S3 错误:使用嵌套堆栈部署 CFN 模板时访问被拒绝

Posted

技术标签:

【中文标题】S3 错误:使用嵌套堆栈部署 CFN 模板时访问被拒绝【英文标题】:S3 error: Access Denied when deploying CFN template with Nested Stacks 【发布时间】:2021-02-19 12:25:50 【问题描述】:

我正在尝试启动一个 CFN 模板化的嵌套堆栈。子堆栈与我尝试通过 CFN 控制台启动的父堆栈位于同一区域的存储桶中。

我拥有管理员访问权限,并且能够通过单个 CFN 模板创建资源,但由于某种原因,使用嵌套堆栈时会返回以下错误:

The following resource(s) failed to create: [My-Sns-Stack]. . Rollback requested by user.
My-Sns-Stack    CREATE_FAILED   S3 error: Access Denied For more information check http://docs.aws.amazon.com/AmazonS3/latest/API/ErrorResponses.html

我检查了以下资源,但没有解决问题:

Specifying an S3 bucket when deploying a cloudformation template

https://www.reddit.com/r/aws/comments/bjk3qw/cloudformation_nested_stacks_s3_access/

https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-stack.html

...
    Resources:
        SnsStack:
            Type: AWS::CloudFormation::Stack
            Properties:
                TemplateURL: !Ref SnsStackUrl
                TimeoutInMinutes: 15
...

【问题讨论】:

有桶策略吗?您是使用自定义 CloudFormation 角色还是使用实例角色部署模板? 无存储桶策略,默认。我尝试为 CFN(管理员访问权限)使用自定义 IAM 角色进行部署,并且也没有角色(我具有管理员访问权限),因此它应该承担我的权限。 【参考方案1】:

除了上述答案外,请确保我们用于部署的角色具有对该 S3 或模板 S3 URL(如果是嵌套堆栈)的 S3 访问权限,我们的 Cloud Formation yml(模板代码)是参考。

【讨论】:

【参考方案2】:

我发现这个错误不太有用,因为我认为 CloudFormation 模板无法访问 in 中引用的 S3 资源。结果它更简单,“拒绝访问”错误实际上表示 S3 文件未找到包含我的 CloudFormation 模板。在对我的嵌套 CloudFormation 堆栈的引用中,TemplateURL: 有错字。

【讨论】:

你救了我!我对多堆栈 CFN 部署有一个不好的参考,特别是使用 S3 的 TemplateURL 变量。

以上是关于S3 错误:使用嵌套堆栈部署 CFN 模板时访问被拒绝的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 github 操作部署 aws beanstalk,获得 s3 访问被拒绝错误

无法删除 cfn 堆栈,角色无效或无法代入

无服务器:部署错误 S3 存储桶已存在于堆栈中

terraform/aws lambda 函数访问在 s3 上被拒绝

AWS cloudformation 嵌套堆栈因模板 URL 失败

每当我更新我的 CFN 堆栈时运行自定义资源