如何为IAM角色添加KMS密钥策略并解决附加时的字段报错问题
问题原因
你收到报错的核心原因是操作对象混淆:
- KMS密钥策略属于密钥本身的访问控制规则,不属于IAM角色的信任关系配置
- IAM角色的信任关系仅用于定义「哪些实体可以代入该角色」,语法结构不支持
Resource字段,因此粘贴普通权限策略会触发报错。
正确操作步骤
1. 修复IAM角色的信任关系
先把Lambda执行角色的信任关系恢复为默认正确配置,仅允许Lambda服务代入该角色:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "lambda.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
2. 配置KMS访问权限(二选一即可)
方案A:修改KMS密钥策略
找到你S3桶加密使用的KMS密钥,编辑其密钥策略,在现有Statement数组中新增如下规则:
{ "Sid": "Allow Lambda role to decrypt S3 objects", "Effect": "Allow", "Principal": { "AWS": "替换为你的Lambda执行角色ARN,格式为arn:aws:iam::[你的AWS账号ID]:role/[角色名称]" }, "Action": [ "kms:Decrypt", "kms:DescribeKey" ], "Resource": "*" }
方案B:给Lambda执行角色附加权限策略
在Lambda执行角色的「权限」选项卡下,新增内联或托管权限策略,内容如下:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kms:Decrypt", "kms:DescribeKey" ], "Resource": "替换为你的KMS密钥ARN" }, { "Effect": "Allow", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::[你的S3桶名]/*" } ] }
补充说明
如果你的S3桶使用的是SSE-S3(亚马逊托管的S3加密),不需要额外配置KMS权限,仅需确认Lambda角色有S3读权限即可;只有使用SSE-KMS(自定义/托管KMS密钥加密)时才需要配置上述KMS权限。
内容的提问来源于stack exchange,提问作者user13067694
相关产品推荐
相关产品推荐

