【问题标题】:How do I access the current user in a cloudformation template?如何访问 cloudformation 模板中的当前用户?
【发布时间】:2019-03-25 05:30:21
【问题描述】:

我想使用 CloudFormation 创建一个 KMS 密钥。我希望能够为执行 cloudformation YAML 文件的用户(我称他们为“cloudformation-runner”)提供对他们创建的密钥的管理访问权限。

我可以设置 IAM 策略以向该用户(“cloudformation-runner”)提供对 KMS 管理 API 的访问权限。但是,为了让用户能够更新/删除刚刚创建的密钥,我还需要指定一个 KeyPolicy 让他们这样做。为此,如何在 CloudFormation 脚本中获取当前用户名(“cloudformation-runner”)?

这是我的 KMS 密钥模板的外观,如何让当前用户成为主体?

    MyKey:
          Type: AWS::KMS::Key
          Properties:
            Description: "..."
            KeyPolicy:
              Version: "2012-10-17"
              Id: "MyId"
              Statement:
                -
                  Sid: "Allow administration of the key"
                  Effect: "Allow"
                  Principal:
                    AWS:
                      - # TODO: Get Current User
                  Action:
                    - "kms:Create*"
                    - "kms:Describe*"
                    - "kms:Enable*"
                    - "kms:List*"
                    - "kms:Put*"
                    - "kms:Update*"
                    - "kms:Revoke*"
                    - "kms:Disable*"
                    - "kms:Get*"
                    - "kms:Delete*"
                    - "kms:ScheduleKeyDeletion"
                    - "kms:CancelKeyDeletion"
                  Resource: "*"

我可以为 IAM 用户手动硬编码 ARN。但是,这会降低模板的可移植性——因为人们需要手动更新此文件中的用户名。

【问题讨论】:

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


【解决方案1】:

一旦当前用户可以是运行 CloudFormation 模板的 IAM 角色而不是 IAM 用户,您将无法访问它。但是您可以将用户名作为参数传递。

我想给你一个我认为适合你的上下文的例子:

  1. “cloudformation-runner”可以是角色而不是用户。此角色可以拥有一个策略,授予创建 KMS 密钥的权限。
  2. CloudFormation 模板可以接收 IAM 用户名和密钥名称作为参数。通过 IAM 用户名,您可以使用 CF 函数创建用户 ARN。
  3. 除了创建 KMS 密钥之外,这些参数还可用于创建 IAM 策略并附加到授予新创建密钥读/写权限的用户。

这样您的密钥创建过程可以同时创建密钥并授予用户权限。

【讨论】:

    【解决方案2】:

    感谢answer 的想法。

    您可以将当前用户的 ARN 作为 CloudFormation 参数传递:

    Parameters:
      ...
      CallingUserArn:
        Description: Calling user ARN
        Type: String
    
    Resources
      KmsKey:
        Type: AWS::KMS::Key
        Properties:
          ...
          KeyPolicy:
            Version: '2012-10-17'
            Statement:
              - Effect: Allow
                Principal:
                  AWS: !Ref CallingUserArn
                ...
    
    aws cloudformation deploy \
      --template-file cloudformation/stack.yml \
      --stack-name my-stack \
      --parameter-overrides CallingUserArn="$(aws sts get-caller-identity --query Arn --output text)"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-26
      • 2020-04-06
      • 2018-06-04
      • 1970-01-01
      • 2021-09-12
      • 2015-12-18
      • 2017-08-27
      • 2021-10-28
      相关资源
      最近更新 更多