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

问题描述 投票:0回答:3

我对我的 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:存储桶不允许 ACL”。

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

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

amazon-web-services github amazon-s3 deployment continuous-deployment
3个回答
161
投票

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

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

  2. 滚动到

    Object Ownership
    并单击“编辑”。

  3. 更改如下设置。


48
投票

转到您的存储桶,进入 Permissions 选项卡,找到 Object Ownership 并单击 Edit。选择ACL已启用并仔细阅读AWS有关潜在安全风险的警告


0
投票

如果您使用 AWS SAM:

Resources:
  MyS3Bucket:
    Type: AWS::S3::Bucket
    Properties:
      BucketName: !Sub fleteo-${Environment}-bucket
      PublicAccessBlockConfiguration:
        BlockPublicAcls: false
        IgnorePublicAcls: false
        BlockPublicPolicy: false
        RestrictPublicBuckets: false
      OwnershipControls:
        Rules:
          - ObjectOwnership: BucketOwnerPreferred
© www.soinside.com 2019 - 2024. All rights reserved.