以下 AWS Cloud Formation 错误?

Posted

技术标签:

【中文标题】以下 AWS Cloud Formation 错误?【英文标题】:Does anyone know the following AWS Cloud Formation error?有谁知道 【发布时间】:2021-12-30 04:09:45 【问题描述】:

在部署包含 Elastic Beanstalk Stack 的 Cloud Formation 模板时,我收到以下错误:

访问被拒绝:S3Bucket=elasticbeanstalk-platform-assets-eu-central-1,S3Key=stalks/eb_corretto11_amazon_linux_2_1.0.2777.0_20211016030628/packs/Corretto11Template.pack(服务:AWSElasticBeanstalk;状态代码:403;错误代码:InsufficientPrivilegesException;请求 ID:5a2d57e4-cd43-443b-9407-b0fc0234ea40;代理:空)

由于它是一个 S3 错误 (InsufficientPrivilegesException),我似乎缺少权限。问题是它无法访问的 S3 存储桶不在我的帐户 S3 存储桶列表中,并且似乎是一种区域存储桶,所以我无法添加策略...有人遇到过这个错误吗? 背景信息:我在使用 AWS 组织的根账户内的账户中工作......

这是我的 iam 角色模板,包括托管策略 arn:

BackendServiceRole:
Type: AWS::IAM::Role
Properties:
  RoleName:  !Sub '$GroupNameBackendServiceRole'
  AssumeRolePolicyDocument:
    Version: "2012-10-17"
    Statement:
      - Effect: Allow
        Principal:
          Service:
            - elasticbeanstalk.amazonaws.com
        Action:
          - 'sts:AssumeRole'
  ManagedPolicyArns: [arn:aws:iam::aws:policy/AWSElasticBeanstalkManagedUpdatesCustomerRolePolicy]

在我的环境中的后端模板中,我添加了以下选项设置:

MyEnvironment:
Type: AWS::ElasticBeanstalk::Environment
Properties:
  ApplicationName: !Ref MyBackendApplication
  CNAMEPrefix: !Sub '$ApplicationName'
  EnvironmentName: !Sub '$ApplicationName-Environment'
  SolutionStackName: 64bit Amazon Linux 2 v3.2.7 running Corretto 11
  Tier:
    Name: WebServer
    Type: Standard
  OptionSettings:
    - Namespace: aws:elasticbeanstalk:environment
      OptionName: ServiceRole
      Value: !GetAtt BackendServiceRole.Arn
    # bunch of other options here

已经谢谢了!

【问题讨论】:

你确定你甚至可以使用来自不同账户的 S3 存储桶吗? @Marcin 你是什么意思?如果这回答了你的问题,我从来没有故意提到这个桶。但这就是异常中的存储桶,它不在我的 S3 存储桶列表中 您检查过this AWS forum entry 是否对您有帮助吗? 【参考方案1】:

您需要将 AWSElasticBeanstalkManagedUpdatesCustomerRolePolicy AWS Managed 策略添加到您的服务角色。您可以在documentation阅读详细信息。

此政策将授予您访问所需存储桶的权限:

完整的政策文件可在here获取。

确保将角色正确分配给配置模板:

  EBSApplicationConfigurationTemplate:
    Type: AWS::ElasticBeanstalk::ConfigurationTemplate
    Properties:
      ApplicationName: !Ref EBSApplication
      Description: ElasticBeanstalk Configuration Template
      SolutionStackName: !Ref SolutionStackName
      OptionSettings:
        - Namespace: aws:elasticbeanstalk:environment
          OptionName: EnvironmentType
          Value: LoadBalanced
        - Namespace: aws:elasticbeanstalk:environment
          OptionName: ServiceRole
          Value: !GetAtt BackendServiceRole.Arn

【讨论】:

谢谢你的回答!尽管您的回答实际上是有道理的,并且在我看来应该有效,但遗憾的是它没有....我将更新后的 iam 角色模板添加到问题中 再次感谢您!现在,令我困惑的是,引发了验证错误......以下内容:调用 ValidateTemplate 操作时发生错误(ValidationError):模板错误:Fn::GetAtt 的实例引用未定义的资源 BackendServiceRole。我之前使用 !Ref BackendServiceRole 时没有抛出错误... 另外,不同之处在于我在我的环境中执行此操作,而不是在我没有的配置模板中...我在创建环境时直接设置设置。这不是总体可能吗?还是我可能只是弄乱了语法?我仔细检查了一下,语法应该没问题,但我可能会漏掉一些东西 最好发布您的完整模板。它应该是相同的,在环境中定义选项。您可以按照此处的示例进行操作:docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/… 您得到的错误也意味着没有名为 BackendServiceRole 的资源。也许您对角色的命名不同或有错别字

以上是关于以下 AWS Cloud Formation 错误?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 AWS Cloud Formation 中实施嵌套堆栈?

AWS Cloud Formation 陷入 Review_In_Progress

AWS Cloud Formation !Sub & !Ref AWS::Serverless::Function Policies 中的函数

如何在 AWS SAM Cloud-Formation 中使用 Route53 设置自定义域名

我能否在 SAM 模板中使用 AWS Cloud Formation 资源语法,反之亦然?

如何使用 Cloud Formation 模板自动扩展 DynamoDB?