以下 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 设置自定义域名