访问其他账户的 S3 IAM 策略
Posted
技术标签:
【中文标题】访问其他账户的 S3 IAM 策略【英文标题】:S3 IAM Policy to access other account 【发布时间】:2015-04-21 10:17:43 【问题描述】:我们需要创建一个允许访问我们客户的 S3 账户中的存储桶的 IAM 用户(前提是他们也允许我们访问这些存储桶)。
我们使用以下内联策略在我们的账户中创建了一个 IAM 用户:
"Statement": [
"Effect": "Allow",
"Action": [
"s3:AbortMultipartUpload",
"s3:PutObjectAcl",
"s3:ListMultipartUploadParts",
"s3:PutObject",
"s3:ListBucketMultipartUploads",
"s3:GetBucketLocation"
],
"Resource": "arn:aws:s3:::*"
]
除此之外,我们将要求我们的客户使用以下政策并将其应用于他们的相关存储桶:
"Version": "2008-10-17",
"Id": "Policy1416999097026",
"Statement": [
"Sid": "Stmt1416998971331",
"Effect": "Allow",
"Principal":
"AWS": "arn:aws:iam::229569340673:user/our-iam-user"
,
"Action": [
"s3:AbortMultipartUpload",
"s3:PutObjectAcl",
"s3:ListMultipartUploadParts",
"s3:PutObject"
],
"Resource": "arn:aws:s3:::client-bucket-name/*"
,
"Sid": "Stmt1416999025675",
"Effect": "Allow",
"Principal":
"AWS": "arn:aws:iam::229569340673:user/our-iam-user"
,
"Action": [
"s3:ListBucketMultipartUploads",
"s3:GetBucketLocation"
],
"Resource": "arn:aws:s3:::client-bucket-name"
]
虽然这一切似乎都运行良好,但我们发现的一个主要问题是我们自己的内部内联策略似乎让 our-iam-user 可以完全访问我们自己的所有内部存储桶。
我们是否配置错误,或者我们在这里遗漏了其他明显的东西?
【问题讨论】:
如果外国账户正在向您账户中的特定 IAM 用户授予权限,则第一个策略似乎没有必要。你能删除它并确认吗? 【参考方案1】:根据 AWS 支持,这不是解决问题的正确方法: https://forums.aws.amazon.com/message.jspa?messageID=618606
我在这里复制他们的答案。
AWS:
您对 IAM 用户使用的策略授予对任何 Amazon S3 存储桶的访问权限。在这种情况下,这将包括您账户中的任何 S3 存储桶以及账户所有者已授予您的用户访问权限的任何其他账户中的任何存储桶。您需要更具体地了解您的 IAM 用户的策略。例如,以下策略将限制您的 IAM 用户访问单个存储桶。
如果用户需要访问多个存储桶,您还可以授予对一组存储桶的访问权限。
我
很遗憾,当我们创建内联策略时,我们事先并不知道客户的所有存储桶名称。随着越来越多的客户使用我们的服务,继续将新的客户存储桶名称添加到内联策略中是不切实际的。
我想另一种选择是创建一个仅用于上述目的的新 AWS 账户 - 即该账户本身不拥有任何东西,只会用于上传到客户端存储桶。
这是可以接受的,还是有其他可供我们选择的选择?
AWS
拥有一个单独的 AWS 账户将提供明确的安全边界。请记住,如果您曾在该其他账户中创建存储桶,如果您授予对“arn:aws:s3:::*”的访问权限,则用户将继承对任何存储桶的访问权限。
另一种方法是使用黑名单(请注意,上面建议的白名单是一种更好的做法)。
如您所见,第二条语句明确拒绝访问一组存储桶。这将覆盖第一条语句中的允许。这里的缺点是默认情况下用户将继承对任何新存储桶的访问权限。因此,您需要谨慎地将新存储桶添加到黑名单中。任何一种方法都需要您保持对策略的更改。因此,我建议您仅授予对用户需要的 S3 存储桶的访问权限。
结论 出于我们的目的,白名单/黑名单方法是不可接受的,因为我们事先不知道客户将提供的所有存储桶。最后,我们使用单个用户创建了一个新的 AWS 账户,而该用户没有自己的 s3 存储桶
【讨论】:
【参考方案2】:您授予内部用户的策略允许该用户访问列出的 API 的所有 S3 存储桶(您问题中的第一个策略)。这是不必要的,因为您客户的存储桶策略将授予您的用户访问客户存储桶所需的权限。
要解决您的问题,请在允许的 [Resources] 列表中删除用户政策 - 或 - 明确删除您客户的存储桶,而不是使用“*”
【讨论】:
行不通。 > 账户 A 也可以使用存储桶策略直接授予账户 B 中的用户权限。但是用户仍需要来自用户所属的父帐户帐户 B 的权限docs.aws.amazon.com/AmazonS3/latest/dev/…以上是关于访问其他账户的 S3 IAM 策略的主要内容,如果未能解决你的问题,请参考以下文章
编写 IAM 策略,其中任何具有 EC2 完全访问权限的用户都不能删除 AWS 账户中任何其他用户的实例
如何将驻留在账户 A 中的 s3 存储桶的访问权限授予来自多个 aws 账户的不同 iam 用户?
S3 AWS 的 IAM 角色和密钥设置使用 boto3 访问两个不同的账户存储桶