首页 > 解决方案 > 如何访问 cloudformation 模板中的当前用户?

问题描述

我想使用 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-servicesamazon-cloudformationamazon-iamaws-kms

解决方案


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

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

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

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


推荐阅读