我已经能够生成只提供对特定存储桶的访问权限的用户策略,但是在尝试完所有内容后(包括此帖子:Is there an S3 policy for limiting access to only see/access one bucket?)。
问题:我无法将存储桶的列表限制为只有一个存储桶。出于各种原因,我不希望列表显示除指定的桶以外的任何桶。
我尝试了各种政策,但无济于事。这是我的最新策略JSON,它正在限制操作,但没有列出:
{
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:ListAllMyBuckets",
"s3:ListBucket",
"s3:GetBucketLocation"
],
"Resource": "arn:aws:s3:::*"
},
{
"Effect": "Deny",
"Action": [
"s3:ListBucket"
],
"NotResource": [
"arn:aws:s3:::acgbu-acg",
"arn:aws:s3:::acgbu-acg/*"
]
},
{
"Effect": "Allow",
"Action": [
"s3:*"
],
"Resource": [
"arn:aws:s3:::acgbu-acg",
"arn:aws:s3:::acgbu-acg/*"
]
}
]
}
非常感谢任何帮助。我开始怀疑它是否可能。
答案 0 :(得分:30)
目前无法限制存储桶列表仅显示一个存储桶。
AWS控制台依靠ListAllMyBuckets
操作来获取用户拥有的存储桶列表,但不能使用亚马逊资源名称(或ARN;唯一的ARN&#39)来限制返回的列表;允许ListAllMyBuckets
为arn:aws:s3:::*
)。
官方AWS文档中没有明确说明此限制,但ListAllMyBuckets
是服务级API调用(它在REST API中也称为GET服务),而不是存储桶级别IAM策略中的API调用及其关联的ARN是指S3服务,而不是指特定存储桶。
有关可能的解决方法,请参阅StackOverflow上的this answer:
答案 1 :(得分:3)
免费的" S3浏览器" (这适用于我的版本3-7-5)允许用户具有"添加外部存储桶"对于该帐户,他们需要知道的只是桶的名称。这使他们能够看到"他们的水桶和内容(以及他们在那个水桶里给予的能力),他们不会看到任何其他水桶。
让水桶“好玩”#34;对于S3浏览器行为,我建议用户或组的以下IAM策略:
{
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:GetBucketLocation",
"s3:GetBucketAcl"
],
"Resource": "arn:aws:s3:::acgbu-acg"
},
{
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:GetObject",
"s3:GetObjectAcl",
"s3:DeleteObject"
],
"Resource": "arn:aws:s3:::acgbu-acg/*"
}
]
}
这是一种解决方法,如果用户只需要执行一次就可以了。但是,如果您的用户访问的存储桶正在大量改变,那么这种解决方法并不实用。
答案 2 :(得分:0)
我来到这里寻找如何限制对一个(或一个)用户的访问。也许,帖子标题含糊不清?
无论如何,它似乎有谷歌的青睐,所以让我们稍微丰富一下:
如果您需要限制某些用户访问某个用户,请按以下步骤操作:
首先,获取要授予其权限的用户的ID。
这可以使用awscli命令aws iam list-users
来实现
这些ID如下所示:" AIDAIFKYAC9DNJXM2CRD"或" AIDAZ362UEKJCJMFFXCL"
如果它在Web控制台中可用,请评论。
获得必须授予访问权限的ID后,将策略放在要保护的存储桶上。
要使用Web控制台执行此操作:
- >打开S3 - >打开你的水桶 - >选择"属性"标签 - >单击"编辑存储桶策略"
要使用awscli应用策略,请使用策略的内容创建一个文件,并使用以下命令将其放在存储桶中:
aws s3api put-bucket-policy --bucket NAME_OF_YOUR_BUCKET --policy file:///path/to/policyFile.json
当然,将YOUR_BUCKET_NAME和文件的路径设置为您的值,但不要删除文件名前的文件://前缀 < / p>
警告:此拒绝政策将覆盖默认&#34;访问s3&#34;用户可以拥有。这意味着您可以拒绝使用此权限访问您的OWN用户。 谨慎使用!
我甚至害怕你能把一个水桶完全无法接近。
出于好奇,我尝试使用我们帐户的 root 用户访问,我没有授予访问权限,并且实际上无法访问# 39;吨。
不得不要求这个支持,并希望更新这个答案。
无论如何,我确定你会小心,所以这是一个示例政策。
只需用您的名称替换存储桶的名称,并将userId替换为您要授权访问的名称。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Deny",
"Principal": "*",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::your-bucket-name",
"arn:aws:s3:::your-bucket-name/*"
],
"Condition": {
"StringNotLike": {
"aws:userId": [
"AIDAXAXAXAXAXAXAXAXAX",
"AIDAOXOXOXOXOXOOXOXOX",
"AIDAXIXIXIXIXIXIXIXIX"
]
}
}
}
]
}
对于更具体的内容,或者如果您想使用角色而不是用户,请参阅此AWS post explaining in detail how to restrict access to a buckets
希望这有帮助
答案 3 :(得分:-1)
原始海报询问用户政策。这将附加到特定用户,而其他人可能有更多的leineint策略(或没有策略)应用于他们。一个典型的用例是您只想限制一个用户,其凭据需要在最高信任组之外共享。用户政策是实现这一目标的方法..