我正在尝试配置一个 S3 存储桶,公众可以将文件放入其中(但不能读取、删除或列出),并且 root 用户可以拥有完全访问权限。我找不到如何编写策略以同时满足这两个要求。
我尝试过以下政策,公众确实可以写但不能读。但是,根用户无法在 AWS 控制台中查看对象列表,我收到错误“没有足够的权限列出对象
在您或您的 AWS 管理员更新您的权限以允许 s3:ListBucket 操作后,请刷新页面”。
更改“声明”子句的顺序没有帮助。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::MY_ACCOUNT_ID:root"
},
"Action": [
"s3:GetObject",
"s3:DeleteObject",
"s3:ListBucket",
"s3:PutObject"
],
"Resource": [
"arn:aws:s3:::BUCKET_NAME_HERE",
"arn:aws:s3:::BUCKET_NAME_HERE/*"
]
},
{
"Effect": "Deny",
"Principal": "*",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::BUCKET_NAME_HERE",
"arn:aws:s3:::BUCKET_NAME_HERE/*"
]
},
{
"Effect": "Allow",
"Principal": "*",
"Action": "s3:PutObject",
"Resource": [
"arn:aws:s3:::BUCKET_NAME_HERE",
"arn:aws:s3:::BUCKET_NAME_HERE/*"
]
}
]
}
Amazon S3 存储桶默认是私有的。
因此,您只需要此政策:
{
"Effect": "Allow",
"Principal": "*",
"Action": "s3:PutObject",
"Resource": [
"arn:aws:s3:::BUCKET_NAME_HERE/*"
]
}
这增加了任何人都可以在存储桶中存储对象的能力。因此,通常有权访问该存储桶的任何人(例如所有者)仍然具有该访问权限。
请注意,
Deny
策略会覆盖Allow
策略,因此您的Deny s3:*
策略实际上会阻止所有人(包括所有者)的访问。