【问题标题】:How to create a condition which allows only resources created in the same CloudFormation stack to assume IAM role?如何创建仅允许在同一 CloudFormation 堆栈中创建的资源承担 IAM 角色的条件?
【发布时间】:2019-12-31 03:28:58
【问题描述】:

我正在创建一个 CloudFormation 堆栈,该堆栈具有 CodeBuild 和 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

问题是任何 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)

【问题讨论】:

  • 我认为这只是一个语法错误。尝试添加',例如:'aws:PrincipalTag/aws:cloudformation:stack-name:'
  • @lexicore 我试过'aws:PrincipalTag/aws:cloudformation:stack-name:'(得到Template format error: YAML not well-formed)和'aws:PrincipalTag/aws:cloudformation:stack-name':(得到Condition can contain only one colon

标签: amazon-web-services amazon-cloudformation amazon-iam aws-sts


【解决方案1】:

基于these docs,我不相信你这次尝试做的事情是可能的。

具体来说:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-09
    • 1970-01-01
    • 1970-01-01
    • 2020-11-09
    • 1970-01-01
    • 2020-01-22
    • 2021-09-28
    • 2020-08-23
    相关资源
    最近更新 更多