我正在创建一个具有 CodeBuild 和 IAM 角色作为资源的 CloudFormation 堆栈。我想知道是否存在仅允许在同一堆栈中创建的资源担任该角色的条件。
目前,我的堆栈是这样定义的:
CodeBuildProjectIAMRole:
Type: AWS::IAM::Role
Properties:
AssumeRolePolicyDocument:
Version: '2012-10-17'
Statement:
- Effect: Allow
Principal:
Service: codebuild.amazonaws.com
Action: sts:AssumeRole
CodeBuildProject:
Type: AWS::CodeBuild::Project
问题是任何 CodeBuild 项目都可以承担上述角色。
当我尝试添加一个条件时,指定只有具有aws:cloudformation:stack-name
相同堆栈名称的主体才能担任该角色:
CodeBuildProjectIAMRole:
Type: AWS::IAM::Role
Properties:
AssumeRolePolicyDocument:
Version: '2012-10-17'
Statement:
- Effect: Allow
Principal:
Service: codebuild.amazonaws.com
Action: sts:AssumeRole
Condition:
StringEquals:
aws:PrincipalTag/aws:cloudformation:stack-name: !Ref 'AWS::StackName'
,我得到这个错误:
Condition can contain only one colon. (Service: AmazonIdentityManagement; Status Code: 400; Error Code: MalformedPolicyDocument)