对于来自 GitHub 的 Amazon S3 存储桶部署,如何修复错误 AccessControlListNotSupported:存储桶不允许 ACL?

Æth*_*tan 85 deployment github amazon-s3 amazon-web-services continuous-deployment

我对我的 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": "*"
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

我正在将 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:存储桶不允许 ACL”。

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

请有人建议我可能需要更改哪些内容才能使完整部署正常工作?

Ada*_*cha 167

将屏幕截图添加到@rudieros提供的答案中

  1. 转到存储桶 > 权限选项卡 AWS 存储桶配置

  2. 滚动到Object Ownership并单击“编辑”。 在此输入图像描述

  3. 如下更改设置。 编辑 S3 所有权 ACL

  • 是更新 https://aws.amazon.com/about-aws/whats-new/2021/11/amazon-s3-object-ownership-simplify-access-management-data-s3/ (4认同)
  • 禁用的 ACL 具有以下描述:_此存储桶中的所有对象均归此帐户所有。仅使用策略指定对此存储桶及其对象的访问。_这是否意味着存在基于策略的方法来实现相同的结果? (4认同)
  • 是否有一种选项可以让 S3 客户端(例如 Amazon PHP SDK 客户端)不调用任何 ACL 相关代码?从而不必修改存储桶策略? (4认同)

rud*_*ros 49

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