如何配置KMS密钥策略仅允许指定Lambda函数进行加解密操作
如何配置KMS密钥策略仅允许指定Lambda函数进行加解密操作
嘿,我懂你要的效果——只有特定Lambda能碰这个KMS密钥的加解密,其他人哪怕是你自己的IAM用户都不行对吧?那核心就是只给Lambda的执行角色开权限,同时把所有其他实体的相关权限全删掉,我给你一步步捋清楚:
首先,Lambda是靠它的执行角色来访问KMS的,所以你的密钥策略里只需要把这个角色的ARN作为授权主体,其他任何允许加解密的语句都得去掉,包括你之前写的那个userArn的条目,不然那个IAM用户还是能操作密钥。
这里给你一个完整的示例策略,直接替换成你的实际信息就行:
{ "Version": "2012-10-17", "Id": "LambdaExclusiveAccessPolicy", "Statement": [ { "Sid": "AllowLambdaExecutionRoleForCryptoOps", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:role/YourLambdaExecutionRoleARN" }, "Action": [ "kms:Encrypt", "kms:Decrypt" ], "Resource": "*" }, { "Sid": "OptionalKeyAdminAccess", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:user/YourAdminUserARN" }, "Action": [ "kms:DescribeKey", "kms:UpdateKeyDescription", "kms:PutKeyPolicy", "kms:DisableKey", "kms:EnableKey", "kms:TagResource", "kms:UntagResource" ], "Resource": "*" } ] }
给你拆解一下策略里的关键部分:
- 第一条是核心规则:只允许你指定的Lambda执行角色执行
kms:Encrypt和kms:Decrypt操作,把里面的角色ARN换成你实际用的那个Lambda执行角色的ARN就行。 - 第二条是可选配置:如果你需要自己作为管理员能管理密钥(比如修改策略、开关密钥),可以留着,但绝对不能加
kms:Encrypt或kms:Decrypt权限,这样你只能管密钥的配置,不能碰加解密操作。要是完全不需要任何人管理,直接删掉这条就行。
还有几个关键注意点要记牢:
- 一定要把默认KMS密钥策略里允许账户根用户或者IAM管理员进行加解密的语句删掉,不然这些角色还是能绕过你的限制访问密钥。
- Lambda函数必须绑定这个指定的执行角色,而且这个角色本身不需要额外配置KMS的权限——因为密钥策略已经直接给角色授权了,这是KMS的资源级授权,比IAM角色的权限优先级更高。
- 配置完后记得测试:用Lambda调用KMS的加解密API应该成功,用你的IAM用户尝试调用的话,会收到权限拒绝的错误,这就说明配置生效了。
备注:内容来源于stack exchange,提问作者Vinay Kharayat
相关产品推荐
相关产品推荐

