json - 允许匿名上传到 S3 但我是文件的所有者
问题描述
我有这种情况,并试图弄清楚一段时间。交易是我有一个 S3 存储桶,任何人都只能匿名上传到存储桶,即无需登录。所以他们只有写权限 - 但不能查看或做任何其他事情。将项目添加到存储桶后,我可以进去查看、下载、编辑等 - 所以完全权限(我是存储桶所有者)。
问题:我设置了允许匿名上传到我的存储桶的策略,然后让我查看 S3 存储桶中的项目 - 但是我无权对文件执行任何操作。
我究竟做错了什么?
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "allow-anon-put",
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::testbucket123/*",
"Condition": {
"StringEquals": {
"s3:x-amz-acl": "bucket-owner-full-control"
}
}
},
{
"Sid": "deny-other-actions",
"Effect": "Deny",
"NotPrincipal": {
"AWS": "arn:aws:iam::123:root"
},
"NotAction": [
"s3:PutObject",
"s3:PutObjectAcl"
],
"Resource": "arn:aws:s3:::testbucket123/*"
}
]
}
任何帮助或提示将不胜感激......或者是否有更好的方法来编写政策来实现这一目标?
解决方案
要澄清@sqlbot 的答案,请使用以下策略:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "allow-anon-put",
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": [
"s3:PutObject",
"s3:PutObjectAcl"
],
"Resource": "arn:aws:s3:::testbucket123/*",
"Condition": {
"StringEquals": {
"s3:x-amz-acl": "bucket-owner-full-control"
}
}
}
]
}
这表示:允许任何人将对象放入此存储桶并设置访问控制列表,但前提是他们bucket-owner-full-control
在上传对象时已指定。
然后,用户需要在上传命令中包含此标头:
x-amz-acl: bucket-owner-full-control
或者,他们使用AWS 命令行界面 (CLI)(--acl bucket-owner-full-control
将标头设置为上述内容)。
如果它们不包含此标头,则上传将被拒绝。
推荐阅读
- python - 匹配几个可变参数
- javascript - 如何使有效载荷响应返回数据为不同的格式?
- jestjs - 测试 NestJS 验证管道不起作用
- google-app-engine - 连接到 GCP App Engine 上的 SocketIO 服务器时如何使用域而不是公共 IP?
- amazon-web-services - 尝试在 AWS EMR 中获得 GPU 支持时出现错误“一个 NVIDIA 内核模块 'nvidia' 似乎已加载到您的内核中”
- python - Python 正则表达式 A|B|C 匹配 C,即使 B 应该匹配
- python - AWS Lambda 将图像文件发送到 Amazon Sagemaker
- c# - 为什么 `foo is not { } bar` 在语义上不等同于 `!(foo is { } bar)`?
- javascript - 如何通过选择当前或未来年份来启用和禁用月份
- javascript - Form.submit() 未添加 URL 参数并重定向到错误的 URL