S3 存储桶策略可以覆盖 IAM 策略吗?

Posted

技术标签:

【中文标题】S3 存储桶策略可以覆盖 IAM 策略吗?【英文标题】:Can S3 bucket-policy override IAM policy? 【发布时间】:2020-08-09 08:40:19 【问题描述】:
    我已经创建了一个 S3 存储桶和一个 EC2 实例。 我已将角色附加到包含 AmazonS3ReadOnlyAccess 策略的 EC2 实例。 使用 EC2 实例中的 AWS CLI 列出我的 S3 存储桶的所有内容 我创建了一个存储桶策略,以防止对该存储桶的任何主体进行任何操作:
"Action": "s3:*",
      "Effect": "Deny",
      "Resource": "arn:aws:s3:::ananda-demo-bucket-1/",
      "Principal": "*"

但是,我仍然可以从我的 EC2 实例中列出我的存储桶的内容。这是否意味着我无法使用自定义存储桶策略覆盖 AWS IAM 策略,或者我创建的存储桶策略有误?

【问题讨论】:

您的Principal 为空。你能显示实际的策略和实例角色吗? 简单规则:如果 IAM 和存储桶策略中的任何内容被拒绝,则它被拒绝。否则,如果其中任何一个允许,则允许。 【参考方案1】:

是的,它确实可以覆盖策略,但仅限于使用拒绝的地方。如果它包含允许但 IAM 策略包含拒绝,则不会评估为允许。

为了让您的策略拒绝 S3 存储桶内的所有操作,存储桶策略中的资源应包括以下内容:

arn:aws:s3:::ananda-demo-bucket-1 arn:aws:s3:::ananda-demo-bucket-1/*

通过使用* 的主体执行此操作,您将拒绝对所有内容的访问,因此您将无法再从任何资源(包括控制台)与此 S3 存储桶进行交互,您之前应该知道这一点做出如此大的改变。尝试限制您拒绝的操作,以便在控制台中仍然可以使用 S3 存储桶的管理。

为了在任何权限评估中概括策略评估逻辑,如果有任何来自以下之一的拒绝,则该操作将被拒绝:

服务控制策略 IAM 边界 资源政策 IAM 政策

完整的评估流程如下所示

有关更多信息,请查看 AWS 文档中的 Policy Evaluation Logic 页面。

【讨论】:

【参考方案2】:

一些命令在桶级运行,而另一些在对象级运行。

试试这个:

      "Action": "s3:*",
      "Effect": "Deny",
      "Resource": [
         "arn:aws:s3:::ananda-demo-bucket-1",
         "arn:aws:s3:::ananda-demo-bucket-1/*",
      ]
      "Principal": "*"

【讨论】:

以上是关于S3 存储桶策略可以覆盖 IAM 策略吗?的主要内容,如果未能解决你的问题,请参考以下文章

S3 存储桶策略 IAM 角色显示为 API 密钥

允许用户访问特定 S3 存储桶进行备份的 AWS IAM 策略

AWS IAM 策略:如何更改 AWSLambdaFullAccess 策略以仅允许访问一个 S3 存储桶?

多个存储桶的 AWS IAM 策略

仅允许从 S3 存储桶的特定文件夹中删除的 IAM 策略

针对 Grafana 警报写入 s3 存储桶的 AWS IAM 策略问题