问题描述
我正在使用 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