我想通过签名的网址上传图片。图像应仅具有公共读取访问权限。我对需要启用或禁用哪些设置感到困惑。
如果我禁用所有“阻止公共访问”设置,它会按预期工作。我担心的是 AWS 建议打开这些权限。图片显示了我提到的设置。
const s3 = new aws.S3();
const s3Params = {
Bucket: process.env.S3_BUCKET,
Key: fileName,
Expires: 60,
ContentType: fileType,
ACL: 'private'
};
Run Code Online (Sandbox Code Playgroud)
当我将“ACL”设置为“private”时,我可以使用签名的 url 在客户端上传图像,但是如果我使用“public-read”,我会被拒绝访问。我也尝试添加
{
"Version":"2012-10-17",
"Statement":[
{
"Sid":"AddPerm",
"Effect":"Allow",
"Principal": "*",
"Action":["s3:GetObject"],
"Resource":["arn:aws:s3:::myapp/*"]
}
]
}
Run Code Online (Sandbox Code Playgroud)
到“存储桶策略”设置以获得公共读取访问权限,但由于公共访问设置,我再次被拒绝访问。
拥有公共读取、私有写入访问权限的最安全方式是什么?我使用 S3 是一种意外的方式吗?我是否应该使用 CloudFront 服务来公开提供这些图像?