在SAM/CloudFormation管理的Lambda中使用已有KMS密钥的问题咨询
你的理解是正确的。
权限逻辑说明
客户托管KMS密钥的权限评估逻辑和S3存在本质区别:
- 默认情况下,KMS密钥的权限完全由密钥自身的策略控制,即使你给Lambda的执行角色配置了KMS操作权限,只要密钥策略里没有明确允许对应主体访问、也没有开放IAM策略委托权限,访问请求就会被直接拒绝。
- 你所说的「开启KMS密钥的通用IAM策略权限」,指的是在KMS密钥策略中添加允许当前AWS账号根用户持有密钥管理权的语句,该配置会激活IAM权限委托能力:配置完成后,你给同账号下的IAM身份(比如Lambda执行角色)添加对应的KMS操作权限即可生效,不需要再反复修改KMS密钥策略。
配置示例
- 首先手动修改不在当前CloudFormation栈管理的KMS密钥策略,添加如下通用委托语句(该步骤无法在当前模板中完成,需直接操作对应KMS密钥):
{ "Sid": "EnableIAMPermissions", "Effect": "Allow", "Principal": {"AWS": "arn:aws:iam::<你的账号ID>:root"}, "Action": "kms:*", "Resource": "*" }
- 再在你的SAM模板中,给Lambda新增KMS操作权限即可,修改后的配置参考:
MyFunction: Type: AWS::Serverless::Function Properties: # 其余原有配置保持不变 Policies: - Statement: # 原有S3权限语句保留 - Effect: Allow Action: - "s3:ListBucket" - "s3:PutObject" - "s3:GetObject" Resource: - "arn:aws:s3:::my-great-existing-bucket" - "arn:aws:s3:::my-great-existing-bucket/*" # 新增KMS权限语句 - Effect: Allow Action: - "kms:Decrypt" - "kms:GenerateDataKey" Resource: "arn:aws:kms:<KMS所在区域>:<你的账号ID>:key/<KMS密钥ID>"
如果你的场景还涉及删除加密对象等其他操作,按需补充对应的KMS动作即可。
内容的提问来源于stack exchange,提问作者and0r
相关产品推荐
相关产品推荐

