授予用户对所有外部存储桶的访问权限,但排除我们自己的帐户存储桶

Posted

技术标签:

【中文标题】授予用户对所有外部存储桶的访问权限,但排除我们自己的帐户存储桶【英文标题】:Grant users access to all external buckets but exclude our own account buckets 【发布时间】:2020-02-07 00:03:14 【问题描述】:

我想让 IAM 用户访问所有外部存储桶——不在我们自己账户中的存储桶。

例如,可公开访问的存储桶或某人授予我们 AWS 账户访问权限的存储桶。如果我们账户中的 IAM 用户无权访问外部存储桶(通过 IAM 策略),他们将无法访问它。

但我无法授予他们对所有存储桶的访问权限,因为这将包括我们自己的存储桶 - 我们不希望某些用户访问这些存储桶,或者只授予具有特定权限的访问权限。

基本上我想要一个条件:

IF NOT <MY AWS ACCOUNT> 
    grant s3:*
ELSE
    don't modify existing S3 permissions

我想要一个策略,我可以将其应用于允许访问所有外部存储桶的用户或角色。

【问题讨论】:

我认为这是不可能的,因为 Amazon S3 ARN 不引用帐号。此外,Actions, Resources, and Condition Keys for Amazon S3 - AWS Identity and Access Management 不会将帐户 ID 列为可用条件。 您需要这个的特定用例是什么?我可以理解希望向用户提供访问第 3 方存储桶的凭据(例如使用共享数据),但不想授予对同一帐户中存储桶的访问权限(出于安全/隐私原因)。但是,必须授予类似s3:* 的权限才能访问外部存储桶。在授予访问权限时,这些要求似乎是相互矛盾的。 我不在乎他们对其他方存储桶有什么访问权限,他们可以破坏这些。我不想让他们访问上传/删除/等我们的帐户存储桶。正在检查存储桶前缀是否与我的公司前缀不匹配(假设我所有的存储桶都使用相同的前缀),然后允许 s3:* 做这样的事情的唯一方法? 一个有趣的难题!我能立即想到的唯一方法是创建一个单独的 AWS 账户(没有存储桶)并允许他们在该账户中担任 IAM 角色。然后,他们可以被授予大量 S3 权限,而无需授予对敏感存储桶的访问权限。 您是在尝试同一个帐户还是跨帐户访问? 【参考方案1】:

您可以在策略中添加条件:IAM JSON Policy Elements: Condition Operators - AWS Identity and Access Management

编辑: 根据对话和进一步研究,这不适用于 IAM 用户。您或许可以根据aws:PrincipalTag 向您的每个存储桶添加DENY 策略,并标记您不想访问的任何用户。

【讨论】:

那会是什么条件?我无法立即想到会引用 Amazon S3 存储桶帐户的东西。 是的,这是我的问题,我找不到条件。我能找到的最好的是 s3:prefix 但这意味着我所有的存储桶都需要具有相同的前缀。我的用例的最佳做法是什么? 你是对的。我在考虑像aws:SourceAccount 这样的一些条件,但它的用途有限,在这种情况下不起作用。

以上是关于授予用户对所有外部存储桶的访问权限,但排除我们自己的帐户存储桶的主要内容,如果未能解决你的问题,请参考以下文章

私有登台S3存储桶的策略

AWS-IAM:授予对单个存储桶的访问权限

S3:如何授予对多个存储桶的访问权限?

如何将驻留在账户 A 中的 s3 存储桶的访问权限授予来自多个 aws 账户的不同 iam 用户?

无需凭据即可从特定 IP 授予对 AWS S3 存储桶的访问权限

S3 存储桶策略授予/限制对特定联合用户的访问权限