在AWS SAM中Lambda如何获得KeyUser权限以使用KMS密钥?
Lambda 如何获取KMS密钥权限的解析
这里的核心是AWS KMS的权限控制逻辑为身份策略与密钥策略的交集生效,两者缺一不可,你可以从这几个角度理解:
Lambda执行角色的身份级授权:模板里给SignupFunction配置的
KMSEncryptPolicy和KMSDecryptPolicy,是给Lambda的IAM执行角色添加了kms:Encrypt和kms:Decrypt的操作权限,这一步确保Lambda运行时使用的身份本身被允许发起加密解密请求。KMS密钥策略的实际覆盖范围:你看到密钥策略允许
KeyUser参数对应的IAM用户,但这里有两个容易忽略的细节:- 若
KeyUser参数实际传入的是Lambda执行角色的ARN(而非普通IAM用户),那密钥策略已经直接授权给了Lambda运行时的身份,结合执行角色的权限,自然就能使用密钥。 - 多数自定义KMS密钥策略会默认包含允许账户根用户的条目(比如
"Principal": { "AWS": "arn:aws:iam::${AWS::AccountId}:root" }),此时账户内的IAM身份(比如Lambda执行角色)只要有对应的IAM策略授权(即模板里的加密解密策略),就会被密钥策略间接允许——因为根用户有权通过IAM给账户内的身份分配KMS权限。
- 若
权限生效的交集规则:只有当Lambda执行角色的IAM策略允许某KMS操作,同时KMS密钥策略也允许该角色执行此操作时,权限才会生效。你的模板已经配置了Lambda的IAM策略,而密钥策略要么直接授权了Lambda执行角色(通过KeyUser参数),要么通过账户根用户间接授权,所以Lambda就能正常使用该KMS密钥。
内容的提问来源于stack exchange,提问作者hotmeatballsoup
相关产品推荐
相关产品推荐

