【发布时间】:2021-08-05 20:22:31
【问题描述】:
努力将最小权限原则应用于我正在创建的 CMK,目标是创建一个 CloudFormation 模板,该模板可通过 StackSets 用于整个组织。因此,我想要一个可用于帐户中的一般加密任务的密钥(kms:Encrypt、kms:Decrypt 等),但不能由帐户中的主体修改(特别是 kms:PutKeyPolicy,但不仅如此) .
我有一个从手工制作的钥匙中提取的工作政策。 CloudFormation 模板工作正常,StackSet 启动资源创建。
但仅当我不使用任何条件限制帐户主体时,这消除了最小权限原则。 CreateKey 和 PutKeyPolicy API 调用都有一个选项 BypassPolicyLockoutSafetyCheck 供我们这些愚蠢到认为自己更了解的人使用!除了 CloudFormation 没有为 AWS::KMS::Key 公开它之外:(
因此,除非我基本上将密钥策略完全打开,否则我会在堆栈中收到以下错误:
资源处理程序返回消息:“新的密钥策略将不允许您将来更新密钥策略。(服务:Kms,状态代码:400,请求 ID:xxxx,扩展请求 ID:null)”(RequestToken : xxxx, HandlerErrorCode: InvalidRequest)
我已经为主体尝试了多种选择,Condition removed(如下所示)创建了密钥,in 没有任何乐趣。
- Sid: AllowUpdatesByCloudFormation
Effect: Allow
Principal:
AWS: !Sub "arn:aws:iam::${AWS::AccountId}:root"
Action:
- kms:Describe*
- kms:List*
- kms:PutKeyPolicy
- kms:CreateAlias
- kms:UpdateAlias
- kms:UpdateKeyDescription
- kms:EnableKey
- kms:DisableKey
- kms:EnableKeyRotation
- kms:DisableKeyRotation
- kms:GetKey*
- kms:DeleteAlias
- kms:TagResource
- kms:UntagResource
- kms:ScheduleKeyDeletion
- kms:CancelKeyDeletion
Resource: '*'
# Condition:
# StringEquals:
# "aws:PrincipalAccount": !Sub ${AWS::AccountId}
# "kms:ViaService": !Sub "cloudformation.${AWS::Region}.amazonaws.com"
我尝试了不同的主要设置,包括AWS: "*" 和一些不同的Service 选项,以及Condition 上的不同设置。我已经尝试过在服务名称中使用和不使用区域。我一定错过了什么,但我已经浪费了几个小时来摸索这个。
Web 搜索、AWS 论坛搜索什么都没有,所以我希望 StackOverflow 的好人可以指导我 - 并且将来我会寻求同样的帮助 :)
对于CreateKey or PutKeyPolicy 上的条件键,似乎无法链接到 AWS KMS API 页面上的表格部分,但我认为我没有错过这些技巧?
提前致谢 - 罗伯特。
【问题讨论】:
标签: amazon-web-services amazon-cloudformation amazon-kms least-privilege