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

Posted

技术标签:

【中文标题】AWS-IAM:授予对单个存储桶的访问权限【英文标题】:AWS-IAM: Giving access to a single bucket 【发布时间】: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

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

谢谢!

【问题讨论】:

【参考方案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/

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

希望有帮助!

【讨论】:

以上是关于AWS-IAM:授予对单个存储桶的访问权限的主要内容,如果未能解决你的问题,请参考以下文章

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

向 Amazon S3 存储桶授予权限

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

授予对 s3 存储桶的公共访问权限,而不是为 aws 无服务器应用程序提供静态网站

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

授予 Redshift Cluster 对另一个账户拥有的 S3 存储桶的访问权限