我想使用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进行硬编码。但是,由于人们需要手动更新此文件中的用户名,因此模板的可移植性较差。
答案 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用户。但是您可以将用户名作为参数传递。
我想举一个我认为适合您的情况的示例:
这样,您的密钥创建过程就可以创建密钥并同时为用户提供特权。