1

我正在创建一个具有 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)

4

1 回答 1

1

根据这些文档,我不相信您这次尝试做的事情是可能的。

具体来说:

您不能使用 ResourceTag/key-name 条件键基于附加到该角色的标签来限制传递角色的权限

于 2019-12-30T19:28:58.170 回答