amazon-web-services - 如何访问 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。但是,这会降低模板的可移植性——因为人们需要手动更新此文件中的用户名。
解决方案
一旦当前用户可以是运行 CloudFormation 模板的 IAM 角色而不是 IAM 用户,您就无法访问它。但是您可以将用户名作为参数传递。
我想给你一个我认为适合你的上下文的例子:
- “cloudformation-runner”可以是角色而不是用户。此角色可以具有授予创建 KMS 密钥的权限的策略。
- CloudFormation 模板可以接收 IAM 用户名和密钥名称作为参数。从 IAM 用户名,您可以使用 CF 函数创建用户 ARN。
- 除了创建 KMS 密钥外,这些参数还可用于创建 IAM 策略并附加到授予新创建密钥读/写权限的用户。
这样,您的密钥创建过程可以同时创建密钥并授予用户权限。
推荐阅读
- r - R Data.Table 重命名许多变量
- javascript - Bootstrap - 表格列宽大小不正确
- python - 如何在 matplotlib 中生成这些水平线?
- javascript - 如何设置使用发布请求打开页面的链接
- c++ - string_view 返回在 g++ 9.3.0 中损坏?
- r - 正则表达式从指定模式中提取所有文本,直到 r 中的字符串结尾
- ios - CollectionView reloadData() 奇怪的行为
- powerbi - 如何打破等级权力bi的关系
- wpf - 如何将样式应用于不同的“TextBlock”对象?
- python - 为什么 2D 分配在 Numpy 中不能按预期工作?