【问题标题】:Files in aws s3 bucket are not public after they are synced by aws cliaws s3 存储桶中的文件在由 aws cli 同步后不公开
【发布时间】:2019-06-07 14:36:18
【问题描述】:

你好吗。 我正在将 react.js Web 应用程序构建目录与 aws s3 存储桶同步。 当我通过输入亚马逊控制台(https://s3.console.aws.amazon.com/)手动将构建目录中的文件上传到 s3 时,所有上传的文件都是公开的,所以当我访问端点时,它可以很好地显示网站(我使用 s3 进行静态网站托管)

但如果我将它与 aws cli 同步

aws s3 sync build/ s3://mybucketnamehere --delete

我可以看到存储桶中所有上传的新文件,但这些文件都被拒绝访问,所以当我进入网站时它给了我 403 错误。

这是政策

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": [
                "s3:DeleteObject",
                "s3:DeleteObjectTagging",
                "s3:DeleteObjectVersion",
                "s3:DeleteObjectVersionTagging",
                "s3:GetObject",
                "s3:GetObjectAcl",
                "s3:PutObject",
                "s3:PutObjectAcl"
            ],
            "Resource": [
                "arn:aws:s3:::mybucketnamehere",
                "arn:aws:s3:::mybucketnamehere/*"
            ]
        }
    ]
}

我做错了什么?

谢谢

【问题讨论】:

标签: reactjs amazon-web-services amazon-s3 aws-cli


【解决方案1】:

正确答案是:不要使用 S3 来提供静态文件。您应该设置一个 Cloudfront 发行版来提供这些文件,因为它为您提供了许多优势。

如果由于某种原因您不能使用 Cloudfront,您可以将 --acl public-read 添加到您的命令中:

aws s3 sync build/ s3://mybucketnamehere --delete --acl public-read

【讨论】:

  • 如何通过 CloudFront 上传文件? S3和CloudFront有不同的用途,CloudFront可以提供S3文件,不知道你说的“使用Cloufront”是什么意思,你还是需要把这些文件提供给S3。
  • 有两个用例。 1.上传和存储 2.服务文件。 S3 用于存储,Cloudfront 更适合分发。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-14
  • 2023-03-15
  • 2017-08-24
  • 2017-10-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多