如何从CloudFormation调试“ s3:CreateBucket访问被拒绝”

Dan*_*umb 5 aws-cloudformation serverless-framework

我有一个从无服务器YAML文件创建的CloudFormation堆栈。

资源之一是:

"S3BucketWebRoot": {
      "Type": "AWS::S3::Bucket",
      "Properties": {
        "BucketName": "samhain.today",
        "AccessControl": "PublicRead",
        "WebsiteConfiguration": {
          "IndexDocument": "index.html",
          "ErrorDocument": "404.html"
        }
      }
    }
Run Code Online (Sandbox Code Playgroud)

我在部署Stack文件时没有任何问题(包括创建S3存储桶本身),但是当Stack开始构建时,我得到了:

    14:38:46 UTC-0500   CREATE_FAILED   AWS::S3::Bucket S3BucketWebRoot API: s3:CreateBucket Access Denied
Run Code Online (Sandbox Code Playgroud)

问题是,与无服务器服务关联的用户作为其策略的一部分:

{
        "Effect": "Allow",
        "Action": [
            "s3:CreateBucket",
            "s3:PutObject",
            "s3:GetObject",
            "s3:ListBucket",
            "s3:DeleteObject",
            "s3:DeleteBucket",
            "s3:ListBucketVersions"
        ],
        "Resource": [
            "arn:aws:s3::*:*"
        ]
    }
Run Code Online (Sandbox Code Playgroud)

我什至该如何调试呢?我Resource错了,或者正在使用其他用户,但这没有任何意义,因为他们已附加到访问密钥ID上。

Joh*_*ein -4

将资源更改为:

"Resource": "*"
Run Code Online (Sandbox Code Playgroud)

这将允许对任何资源执行给定的操作。您的操作均与 S3 相关,因此它们将被允许在任何 Amazon S3 存储桶上运行。

如果您想允许它仅在一个存储桶上运行,请使用:

"Resource": "arn:aws:s3:::BUCKET-NAME"
Run Code Online (Sandbox Code Playgroud)