从GitHub部署到Amazon S3存储桶时,如何解决“AccessControlListNotSupported:存储桶不允许ACLs”的错误?

81

我在我的AWS账户中为一个IAM用户设置了以下访问策略。该策略引用了桶名称,即 "xo-staging"。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AccessToGetBucketLocation",
            "Effect": "Allow",
            "Action": [
                "s3:GetBucketLocation"
            ],
            "Resource": [
                "arn:aws:s3:::*"
            ]
        },
        {
            "Sid": "AccessToWebsiteBuckets",
            "Effect": "Allow",
            "Action": [
                "s3:PutBucketWebsite",
                "s3:PutObject",
                "s3:PutObjectAcl",
                "s3:GetObject",
                "s3:ListBucket",
                "s3:DeleteObject"
            ],
            "Resource": [
                "arn:aws:s3:::xo-staging",
                "arn:aws:s3:::xo-staging/*"
            ]
        },
        {
            "Sid": "AccessToCloudfront",
            "Effect": "Allow",
            "Action": [
                "cloudfront:GetInvalidation",
                "cloudfront:CreateInvalidation"
            ],
            "Resource": "*"
        }
    ]
}

我将一个Gatsby应用程序从本地机器部署到Github,使用Github Actions运行构建和部署脚本。

在我的package.json文件中,我将"deploy"设置为gatsby-plugin-s3 deploy --yes; export AWS_PAGER=\"\"; aws cloudfront create-invalidation --distribution-id E5FDMTLPHUTLTL --paths '/*';,在我的workflows.yml文件中,我将"deploy"设置为npm run deploy

在Github上,我的构建成功了,但是我的部署失败了。我得到的错误提示是"AccessControlListNotSupported: The bucket does not allow ACLs"

我检查了AWS中实际的Bucket权限并尝试选择不同的选项,但总是返回相同的错误消息。换句话说,我尝试删除所有公共访问和ACL的阻止,但问题仍然存在。

请问有人能够建议我需要更改什么内容才能使这个完整的部署工作吗?

2个回答

159

为@rudieros提供的答案添加截图

  1. 进入 Bucket > 权限选项卡 AWS Bucket Config

  2. 滚动到 对象所有权 并点击编辑。 enter image description here

  3. 按下面的设置更改。 Edit S3 Ownership ACL


4
更新内容:Amazon S3对象所有权功能的推出,简化S3数据访问管理。 - Elinaldo Monteiro
4
"ACLs disabled"的描述是:“该存储桶中的所有对象均为此帐户所有,仅使用策略指定对该存储桶及其对象的访问权限。”这是否意味着可以通过基于策略的方式实现相同的结果? - Gibron
4
有没有选项可以让S3客户端(例如Amazon PHP SDK)不调用任何与ACL相关的代码?从而不必修改存储桶策略? - Rvanlaak

48

进入您的存储桶,打开权限选项卡,找到对象所有权并单击编辑。选择启用 ACL,并仔细阅读AWS关于潜在安全风险的警告。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接