第三方访问您的AWS资源

简介

有时候,你需要给予外包的第三方厂商授予访问和使用AWS资源的权限。你可以通过在condition中指定External ID来指定谁可以使用你创建出来的IAM role。

这个ID是第三方随机生成的一串字符。因此,在配置IAM role的时候需要第三方提供一个External ID

举例

假设你有个供应商叫Example公司,这家公司还服务很多其他的使用AWS的企业。你不应该给它IAM user,这是在AWS账号中一个长期有效的权限。相反,你应该使用IAM role。创建一个role,role关联的policy假设如下所示

// sample code
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "externalid",
            "Effect": "Allow",
            "Action": [
                "ec2:CreateTags",
                "ec2:DescribeInstances",
                "ec2:UpdateSecurityGroupRuleDescriptionsEgress",
                "ec2:DescribeSecurityGroups",
                "ec2:UpdateSecurityGroupRuleDescriptionsIngress"
            ],
            "Resource": "*"
        }
    ]
}

假设Example公司提供了他们的External ID:

"Condition": {"StringEquals": {"sts:ExternalId": "Unique ID Assigned by Example Corp"}}

你可以将上面的policy调整为:

{
	"Version": "2012-10-17",
	"Statement": [
		{
			"Sid": "externalid",
			"Effect": "Allow",
			"Action": [
				"ec2:CreateTags",
				"ec2:DescribeInstances",
				"ec2:UpdateSecurityGroupRuleDescriptionsEgress",
				"ec2:DescribeSecurityGroups",
				"ec2:UpdateSecurityGroupRuleDescriptionsIngress",
				"sts:AssumeRole"
			],
			"Resource": "*",
			"Condition": {
				"StringEquals": {
					"sts:ExternalId": [
						"Unique ID Assigned by Example Corp"
					]
				}
			}
		}
	]
}

创建完成以后你把role的Amazon Resource Name (ARN)提供给Example公司,当Example Corp需要访问你的AWS资源时,该公司的人就会调用AWS sts:AssumeRole API。该调用包括要角色的ARN和External ID参数。

这样,任何想assume该角色的人必须是该角色的负责人,并且必须包括正确的External ID

参考资料

[docs] How to use an external ID when granting access to your AWS resources to a third party

最后更新于