【问题标题】:AWS-IAM: Giving access to a single bucketAWS-IAM:授予对单个存储桶的访问权限
【发布时间】:2017-01-01 04:55:12
【问题描述】:

我创建了一个组并向该组添加了新用户,然后我创建了以下 IAM 策略:

{ “版本”:“2012-10-17”, “陈述”: [ { “效果”:“允许”, "动作": "s3:ListAllMyBuckets", “资源”:“arn:aws:s3:::*” }, { “效果”:“允许”, “行动”: [ "s3:ListBucket", “s3:GetBucketLocation” ], “资源”:“arn:aws:s3:::EXAMPLE-BUCKET-NAME” }, { “效果”:“允许”, “行动”: [ "s3:PutObject", "s3:GetObject", “s3:删除对象” ], “资源”:“arn:aws:s3:::EXAMPLE-BUCKET-NAME/*” } ] }

我从以下渠道获得了上述政策:

http://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_examples.html

基本上,我只想授予一个特定存储桶的权限,但上述策略不起作用。用户仍然可以添加、删除、修改其他存储桶中的文件。

谢谢!

【问题讨论】:

    标签: amazon-iam


    【解决方案1】:

    对于 Google 员工:

    S3 API 和 IAM 操作命名完全被炸毁了:

    • ListBucket 是一个弃用的 SOAP API,现在重命名为 ListObjects
    • ListBuckets 是一个 API,它列出了 您的 API CALLER 帐户 拥有的所有存储桶
    • ListBucket API 由 s3:ListBucket IAM 操作管理,您可能猜到了
    • ListBuckets API 由...管理...惊喜❗️ s3:ListAllMyBuckets IAM 操作
    • ListBuckets 返回一个名为...惊喜的对象❗️ <ListAllMyBucketsResult>

    我现在找不到一个好的方式来描述我的感受。

    为了获得最佳的向后兼容性,永久保留旧 API 或错误命名的 API 可能是一个好习惯,但 AWS 在创建新 API 时应将一致性放在首位。

    简而言之:ListBuckets = s3:ListAllMyBuckets,忘记s3:ListBucket

    话虽如此,截至 2021/01 年,没有办法

    • 列出您拥有的存储桶的数量限制,因为 ListAllMyBuckets 顾名思义,只接受 * 作为有效资源
    • 列出任何不属于您的存储桶,因为没有此类 API 或参数
    • 获取不属于您的任何存储桶的创建日期,因为ListBuckets 是获取此信息的唯一方法

    【讨论】:

      【解决方案2】:

      此策略绝对应该有效 - 用户只能添加/删除/修改EXAMPLE-BUCKET-NAME 存储桶。

      仔细检查您的组和用户,确保没有附加其他托管或内联策略。

      【讨论】:

        【解决方案3】:

        尝试为 S3 存储桶和每个用户的角色使用 IAM 角色。这应该限制对存储桶的写访问。

        参考这个链接 - https://aws.amazon.com/blogs/security/how-to-restrict-amazon-s3-bucket-access-to-a-specific-iam-role/

        检查链接中有关授予访问权限的部分。

        希望有帮助!

        【讨论】:

          猜你喜欢
          • 2020-08-22
          • 2017-11-01
          • 2013-10-31
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多