Ale*_*lex 115 policy amazon-s3 bucket
我有一个简单的桶,看起来像images.mysite.com我的S3和其他包含备份等的桶.
我想允许特定用户访问images.mysite.com存储桶以上传图像.但是,我不希望他看到任何其他的桶; 甚至不存在它们.
我无法制定这样做的政策; 每当我尝试限制性的东西时,它最终会阻止任何桶的列表.
rog*_*pos 118
我已经尝试了一段时间,最后提出了一个有效的解决方案.您必须使用不同的"资源",具体取决于您正在执行的操作类型.此外,我在前一个答案(如DeleteObject)中包含了一些缺失的操作,并限制了一些(如PutBucketAcl).
以下IAM政策现在适用于我:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:GetBucketLocation",
"s3:ListBucketMultipartUploads"
],
"Resource": "arn:aws:s3:::itnighq",
"Condition": {}
},
{
"Effect": "Allow",
"Action": [
"s3:AbortMultipartUpload",
"s3:DeleteObject",
"s3:DeleteObjectVersion",
"s3:GetObject",
"s3:GetObjectAcl",
"s3:GetObjectVersion",
"s3:GetObjectVersionAcl",
"s3:PutObject",
"s3:PutObjectAcl",
"s3:PutObjectVersionAcl"
],
"Resource": "arn:aws:s3:::itnighq/*",
"Condition": {}
},
{
"Effect": "Allow",
"Action": "s3:ListAllMyBuckets",
"Resource": "*",
"Condition": {}
}
]
}
Run Code Online (Sandbox Code Playgroud)
关于桶和关于对象的操作必须具有不同的arn.
小智 33
我们的使用案例:为我们的云应用程序的客户提供备份空间,客户可以使用常用的S3工具直接访问这些空间.当然,没有客户应该看到其他客户有什么.
正如cloudberryman所解释的那样,"你可以列出所有桶,也可以不列出任何桶."所以我们必须提出一个解决方案.背景:
需要向用户授予ListAllMyBuckets权限,以便AWS S3控制台或S3Fox连接时不会显示错误消息.但是ListAllMyBuckets列出了所有桶,分配的资源(实际上,只有arn:... :::*工作).如果你问我,这是一个严重的错误.顺便说一句.拒绝所有存储桶的ListBucket并不会阻止它们被列出,因为ListBucket授予列出存储桶内容的权限.
我认为有3种可能性可以解决.我选择了最后一个.
(1)使用神秘的桶名称,例如GUID
优点:易于设置
缺点:难以管理,特别是对客户而言.(想象一下,在成千上万的其他人中找到一个特定的GUID.)还显示了桶数=使用备份服务的客户端数量.
(2)使用一个具有客户端特定文件夹的存储桶
这就是亚马逊通过他们的S3/IAM示例建议仅提供某些用户或用户组访问的空间.请参阅: AWS示例IAM策略
优势:相当容易设置,符合AWS的想法
缺点:力量使所有桶都存在,所以客户可以找到他们的"家"桶.AWS会计提供存储桶使用情况的统计信息,但不提供文件夹使用情况的统计信息,这使得难以按客户端计算成本
(3)不授予ListAllMyBuckets访问权限
优势:你得到你想要的东西:客户看不到其他客户的桶
缺点:客户端无法看到自己的桶.S3Browser带有一个很好的"不能做"的消息,并要求输入桶名称.连接到根时,S3Fox会抛出错误消息,但如果已知存储桶名称,则允许直接导航到客户端的存储桶.Amazon S3控制台根本不起作用.
希望这有助于在需要时处理S3 IAM.
BFa*_*Far 24
在未授予ListAllMyBuckets权限的情况下,无法提供对S3控制台的访问权限.
在我的情况下(或许也是你的未来读者),可接受的替代方案是将用户登录时直接重定向到您希望他们看到的存储桶.
要完成此操作,请将以下内容附加到您的IAM登录URL:
/s3/?bucket=bucket-name
完整登录URL(替换你的别名和存储桶名称):
https://your-alias.signin.aws.amazon.com/console/s3/?bucket=bucket-name
IAM策略(替换bucket-name):
{
"Statement": [
{
"Effect": "Allow",
"Action": "s3:ListAllMyBuckets",
"Resource": "arn:aws:s3:::*"
},
{
"Effect": "Allow",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::bucket-name",
"arn:aws:s3:::bucket-name/*"
]
}
]
}
Run Code Online (Sandbox Code Playgroud)
有关如何为用户创建存储桶特定权限的更多信息,请阅读此博客:http://mikeferrier.com/2011/10/27/granting-access-to-a-single-s3-bucket-using-amazon-iam /
小智 20
试试这个政策.还要考虑到没有办法让用户列出只选择的存储桶.您可以列出所有存储桶,也可以不存储.
{
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:PutObject",
"s3:GetObjectAcl",
"s3:PutObjectAcl",
"s3:ListBucket",
"s3:GetBucketAcl",
"s3:PutBucketAcl",
"s3:GetBucketLocation"
],
"Resource": "arn:aws:s3:::your_bucket_here/*",
"Condition": {}
},
{
"Effect": "Allow",
"Action": "s3:ListAllMyBuckets",
"Resource": "*",
"Condition": {}
}
]
}
Run Code Online (Sandbox Code Playgroud)
小智 9
我将这个问题解释为:"我可以允许访问一个存储桶,其中任何其他存储桶都不可访问,因此不可见." 因为,显示未授予访问权限的存储桶的名称仍然等同于信息泄漏.
而正确的答案是否定的.所需的权限是ListAllMyBuckets,它允许用户查看所有存储桶.省略此权限将使控制台无法使用.
有一种很好的方法可以让用户访问特定的存储桶,而无需了解其他存储桶.如下所示的组策略将允许用户仅查看"存储桶a".唯一的问题是,如果用户连接到给定的存储桶端点,用户将只能访问存储桶.对于下面的示例,将是bucket-a.s3.amazonaws.com.存储桶也可能必须具有允许发生这种情况的"经过身份验证的用户".
{
"Statement": [
{
"Sid": "<EXAMPLE_SID>",
"Action": [
"s3:ListBucket",
"s3:GetBucketLocation"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::bucket-a"
]
},
{
"Sid": "<EXAMPLE_SID>",
"Action": "s3:*",
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::bucket-a/*"
]
}
]
}
Run Code Online (Sandbox Code Playgroud)
此方法在Mac OS/X上使用Cyberduck进行测试,并使用s3cmd软件包
./s3cmd ls s3://bucket-a --access_key=ACCESS_KEY --secret_key=SECRET_KEY --bucket-locat
ion=ap-southeast-2
Run Code Online (Sandbox Code Playgroud)
对为什么没有检查答案感到困惑?
让我们从上面的解决方案中分解每个政策声明:
本政策声明从适用于桶的内容,而不是降压本身.这可能不是问题所要求的,因为你无法看到桶中的内容.
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:PutObject",
"s3:GetObjectAcl",
"s3:PutObjectAcl",
"s3:ListBucket",
"s3:GetBucketAcl",
"s3:PutBucketAcl",
"s3:GetBucketLocation"
],
"Resource": "arn:aws:s3:::your_bucket_here/*",
"Condition": {}
}
Run Code Online (Sandbox Code Playgroud)
这两个语句策略派生自,只读(arn:aws:s3:::your_bucket_here/)只读()只读桶,但仍允许存储桶的内容(arn:aws:s3:::your_bucket_here/*)上的CRUD操作.
{
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:GetBucketLocation",
"s3:ListBucketMultipartUploads"
],
"Resource": "arn:aws:s3:::your_bucket_here",
"Condition": {}
},
{
"Effect": "Allow",
"Action": [
"s3:AbortMultipartUpload",
"s3:DeleteObject",
"s3:DeleteObjectVersion",
"s3:GetObject",
"s3:GetObjectAcl",
"s3:GetObjectVersion",
"s3:GetObjectVersionAcl",
"s3:PutObject",
"s3:PutObjectAcl",
"s3:PutObjectAclVersion"
],
"Resource": "arn:aws:s3:::your_bucket_here/*",
"Condition": {}
}
Run Code Online (Sandbox Code Playgroud)
但是,该策略包括以下语句,该语句允许用户查看端点上的所有存储桶.这可能不是问题所要求的.
{
"Effect": "Allow",
"Action": "s3:ListAllMyBuckets",
"Resource": "*",
"Condition": {}
}
Run Code Online (Sandbox Code Playgroud)
但是,如果您使用浏览S3商店的客户端,则上述非常有用.如果您的客户端直接访问存储而不是存储桶,那么您需要访问根目录下的存储桶列表.
| 归档时间: |
|
| 查看次数: |
85974 次 |
| 最近记录: |