You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在SAM/CloudFormation管理的Lambda中使用已有KMS密钥的问题咨询

你的理解是正确的。

权限逻辑说明

客户托管KMS密钥的权限评估逻辑和S3存在本质区别:

  • 默认情况下,KMS密钥的权限完全由密钥自身的策略控制,即使你给Lambda的执行角色配置了KMS操作权限,只要密钥策略里没有明确允许对应主体访问、也没有开放IAM策略委托权限,访问请求就会被直接拒绝。
  • 你所说的「开启KMS密钥的通用IAM策略权限」,指的是在KMS密钥策略中添加允许当前AWS账号根用户持有密钥管理权的语句,该配置会激活IAM权限委托能力:配置完成后,你给同账号下的IAM身份(比如Lambda执行角色)添加对应的KMS操作权限即可生效,不需要再反复修改KMS密钥策略。

配置示例

  1. 首先手动修改不在当前CloudFormation栈管理的KMS密钥策略,添加如下通用委托语句(该步骤无法在当前模板中完成,需直接操作对应KMS密钥):
{
    "Sid": "EnableIAMPermissions",
    "Effect": "Allow",
    "Principal": {"AWS": "arn:aws:iam::<你的账号ID>:root"},
    "Action": "kms:*",
    "Resource": "*"
}
  1. 再在你的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 11:45:06