amazon-web-services - 仅允许向特定用户列出 S3 存储桶顶级列表
问题描述
设想:
我有一个 S3 存储桶,其中包含“目录”。
my-bucket/xxx
my-bucket/yyy
my-bucket/zzz
etc
我有 2 组用户:管理员和用户。
管理员应该能够列出/查看存储桶内的所有内容,即在顶层,例如aws s3 ls s3://my-bucket
.
用户无法查看顶级,但可以列出/查看存储桶中的每个目录。
我不确定如何定义这样的策略以及将其附加到何处 - 在 S3 存储桶或 IAM 用户端。我已经尝试了这两种选择。不工作。
用户端:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:ListBucket",
"s3:PutObject"
],
"Resource": "arn:aws:s3:::my-bucket/*"
}
]
}
S3 存储桶侧:
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"s3:GetObject"
],
"Effect": "Allow",
"Resource": "arn:aws:s3:::my-bucket/*",
"Principal": {
"AWS": [
"arn:aws:iam::123456789012:user/User"
]
}
}
]
}
解决方案
首先,不要使用 Bucket Policy。当授予“每个人”访问权限时,通常使用存储桶策略。
如果您希望向特定用户授予访问权限,请将策略放在IAM User上。
如果您希望授予一组用户访问权限,请将他们放在 IAM Group 中,并将策略放在IAM Group上。
这是一个允许列出特定存储桶的策略,但顶级(根)目录除外:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:ListBucket",
"Resource": "arn:aws:s3:::BUCKET-NAME",
"Condition": {
"StringLike": {
"s3:prefix": [
"*/*"
]
}
}
}
]
}
只要Prefix
(路径)包含斜杠(/
),它基本上就允许他们列出存储桶。
请注意,如果您要列出存储桶,则必须在目录名称后包含斜杠:
aws s3 ls s3://BUCKET-NAME/folder/
这不起作用,因为它不包含斜杠:
aws s3 ls s3://BUCKET-NAME/folder
推荐阅读
- python - Rhythmbox - 获取当前曲目路径
- operators - 请解释 i=i++; 之间的区别是什么?和我++。请查看下面的代码,让我了解它在第一个条件下是如何工作的?
- sql - 将 sql 转换为 Laravel 查询生成器 ->where('b.seq','=',DB::raw('select max(seq) from sells_2020 where pa_no=a.pa_no'))
- python - 计算numpy包中矩阵乘法的对角线元素
- mongodb - 在聚合输出中为 MongoDB 中其他输出文档字段的总和添加单独的文档
- python - Python numpy groupby 多列
- spring - spring:: JPA Repository 自定义查询不起作用
- macos - 如何在不显示仪表板的情况下在 MacOS 上使用 cli 命令启动 docker 桌面?
- python - **StreamExecutor 设备 (0):Tensorflow 中的主机,默认版本**
- javascript - JS/Electron 逐项添加