微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 IAM 策略文档中使用 AWS CloudFormation 伪参数

如何解决如何在 IAM 策略文档中使用 AWS CloudFormation 伪参数

我正在使用 AWS CloudFormation(基于 YAML)来部署 IAM 角色。应允许此角色部署其他 CloudFormation 资源,并将其作为受信任实体部署到的 AWS 账户的根。 我正在尝试使用内置伪参数 AWS::AccountId 提供帐户 ID: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/pseudo-parameter-reference.html#cfn-pseudo-param-accountid .

这是我按照官方文档尝试过的:https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-policy.html(仅显示我的 CFN 模板的 resources 部分):

Resources:
  IAMRole:
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument:
        Statement:
          - Action: ["sts:AssumeRole"]
            Effect: Allow
            Principal:
              Service: [cloudformation.amazonaws.com]
              AWS: arn:aws:iam::AWS::AccountId:root  # <-- ERROR HERE !

由于 CloudFormation 堆栈中的 MalformedPolicyDocument(在 AWS 管理控制台中的 Invalid principal 下)导致 Events 错误

Invalid principal in policy: "AWS":"arn:aws:iam::AWS::AccountId:root" (Service: AmazonIdentityManagement; Status Code: 400; Error Code: MalformedPolicyDocument

我尝试改变 AWS Principal 值的语法:

  • 带引号和不带引号
  • 带和不带方括号

校长的错误在哪里,如何改正?

解决方法

我们需要对 AWS::Region、AWS::AccountId、AWS::StackName 等变量使用 Intrinsic functions !Sub

AWS: !Sub arn:aws:iam::${AWS::AccountId}:root

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。