努力将最小权限原则应用于我正在创建的 CMK,目标是创建一个 CloudFormation 模板,该模板可通过 StackSets 用于整个组织。因此,我想要一个可用于(kms:Encrypt
等kms:Decrypt
)帐户中一般加密任务的密钥,但该密钥不能由帐户中的委托人修改(特别是kms:PutKeyPolicy
但不仅如此)。
我有一个从手工制作的钥匙中提取的工作政策。CloudFormation 模板工作正常,StackSet 启动资源创建。
但只有当我不以任何条件限制帐户主体时,才消除了最小特权原则。和API 调用都为我们这些愚蠢到认为他们知道得更好的人提供了一个CreateKey
选项!除了 CloudFormation 没有为:(PutKeyPolicy
BypassPolicyLockoutSafetyCheck
AWS::KMS::Key
因此,除非我基本上将密钥策略完全打开,否则我会在堆栈中收到以下错误:
资源处理程序返回消息:“新的密钥策略将不允许您将来更新密钥策略。(服务:Kms,状态码:400,请求 ID:xxxx,扩展请求 ID:null)”(RequestToken:xxxx,处理程序错误代码:无效请求)
我已经为主体尝试了多种选择,Condition
删除(如下所示)创建了密钥,但并不高兴。
- 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
. 我已经尝试过在服务名称中使用和不使用区域。我一定错过了一些东西,但我已经失去了几个小时在这个问题上摸不着头脑。
网络搜索,AWS 论坛搜索什么都没有,所以我希望 StackOverflow 的好汉堡可以指导我 - 未来我正在寻找同样的帮助 :)
似乎无法链接到 AWS KMS API 页面上的表格部分以获取条件键 on CreateKey
orPutKeyPolicy
但我认为我没有错过这些技巧?
在此先感谢 - 罗伯特。