如何在cloudformation模板中访问当前用户?

时间:2018-10-20 15:39:29

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

我想使用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进行硬编码。但是,由于人们需要手动更新此文件中的用户名,因此模板的可移植性较差。

2 个答案:

答案 0 :(得分:1)

感谢此answer的想法。

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

aws cloudformation deploy \
  --template-file cloudformation/stack.yml \
  --stack-name my-stack \
  --parameter-overrides CallingUserArn="$(aws sts get-caller-identity --query Arn --output text)"
<

答案 1 :(得分:0)

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

我想举一个我认为适合您的情况的示例:

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

这样,您的密钥创建过程就可以创建密钥并同时为用户提供特权。