如何在不使用预签名 URL 的情况下在 s3 私有存储桶中创建 s3 对象 public
How to make an s3 object public in s3 private bucket without using presigned URLs
我有一个具有以下策略的 s3 存储桶
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:GetObject",
"s3:ListBucket",
"s3:DeleteObject"
],
"Resource": [
"arn:aws:s3:::bucket",
"arn:aws:s3:::bucket/*"
]
}
]
}
存储桶 public 访问也被阻止。这是存储桶策略的快照
基本上我希望存储桶是私有的,以防止未经授权的用户上传文件,但我想授予任何用户public读取存储桶内对象的权限
您似乎希望允许 任何人 检索对象,但不应允许他们做任何其他事情。
有两种方法可以实现:
1.使用 ACL
您可以将 public-read
ACL 分配给各个对象。这还需要为两个 ACL 相关选项停用 S3 Block Public 访问权限。
这样,您的存储桶将保持私有,但如果对象的名称已知,则可以访问这些对象。 (列表未启用。)
2。使用存储桶策略
此策略将允许任何人访问存储桶中的对象:
{
"Version":"2012-10-17",
"Statement":[
{
"Effect":"Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::my-bucket/*"
}
]
}
它将允许任何获取对象的尝试,但不允许列出、删除等
对于上述两个选项,如果您希望“授权”用户能够执行上传和删除对象等操作,那么这些权限应该直接分配给 IAM 用户(不使用 S3 存储桶策略)。
我有一个具有以下策略的 s3 存储桶
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:GetObject",
"s3:ListBucket",
"s3:DeleteObject"
],
"Resource": [
"arn:aws:s3:::bucket",
"arn:aws:s3:::bucket/*"
]
}
]
}
存储桶 public 访问也被阻止。这是存储桶策略的快照
基本上我希望存储桶是私有的,以防止未经授权的用户上传文件,但我想授予任何用户public读取存储桶内对象的权限
您似乎希望允许 任何人 检索对象,但不应允许他们做任何其他事情。
有两种方法可以实现:
1.使用 ACL
您可以将 public-read
ACL 分配给各个对象。这还需要为两个 ACL 相关选项停用 S3 Block Public 访问权限。
这样,您的存储桶将保持私有,但如果对象的名称已知,则可以访问这些对象。 (列表未启用。)
2。使用存储桶策略
此策略将允许任何人访问存储桶中的对象:
{
"Version":"2012-10-17",
"Statement":[
{
"Effect":"Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::my-bucket/*"
}
]
}
它将允许任何获取对象的尝试,但不允许列出、删除等
对于上述两个选项,如果您希望“授权”用户能够执行上传和删除对象等操作,那么这些权限应该直接分配给 IAM 用户(不使用 S3 存储桶策略)。