Amazon web services 如何创建只允许在同一CloudFormation堆栈中创建的资源承担IAM角色的条件?

Amazon web services 如何创建只允许在同一CloudFormation堆栈中创建的资源承担IAM角色的条件?,amazon-web-services,amazon-cloudformation,amazon-iam,aws-sts,Amazon Web Services,Amazon Cloudformation,Amazon Iam,Aws Sts,我正在创建一个CloudFormation堆栈,它有一个代码构建和一个IAM角色作为资源。我想知道是否存在只允许在同一堆栈中创建的资源承担该角色的条件 目前,我的堆栈是这样定义的: CodeBuildProjectIAMRole: Type: AWS::IAM::Role Properties: AssumeRolePolicyDocument: Version: '2012-10-17' Statement:

我正在创建一个CloudFormation堆栈,它有一个代码构建和一个IAM角色作为资源。我想知道是否存在只允许在同一堆栈中创建的资源承担该角色的条件

目前,我的堆栈是这样定义的:

  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
问题是任何代码构建项目都可以承担上述角色

当我尝试添加一个条件,指定只有具有
aws:cloudformation:stack name
equal 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'
,我得到这个错误:

条件只能包含一个冒号。(服务:AmazonIdentityManagement;状态代码:400;错误代码:格式错误的policyDocument)

基于我不相信您这次尝试的操作是可能的

具体而言:

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


我认为这只是一个语法错误。尝试添加
'
,类似于:
'aws:principatag/aws:cloudformation:stack name:“
@lexicore我尝试过
'aws:principatag/aws:cloudformation:stack name:”
(得到
模板格式错误:YAML格式不正确
)和
'aws:principatag/aws:cloudformation:stack name:
(got
条件只能包含一个冒号