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

How to use AWS CloudFormation pseudoparameter inside IAM Policy Document

我正在使用 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 堆栈中的 Invalid principal 而导致 MalformedPolicyDocument 错误(在 AWS 管理控制台中,在 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