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:授予对单个存储桶的访问权限的主要内容,如果未能解决你的问题,请参考以下文章
授予用户对所有外部存储桶的访问权限,但排除我们自己的帐户存储桶
无需凭据即可从特定 IP 授予对 AWS S3 存储桶的访问权限
授予对 s3 存储桶的公共访问权限,而不是为 aws 无服务器应用程序提供静态网站