AWS Config托管角色AWSServiceRoleForConfig调用KMS Decrypt未授权问题如何解决
问题解答
根因说明
你之前配置的KMS密钥策略未生效,是因为你指定的授权主体是config.amazonaws.com服务主体,但CloudTrail日志显示实际发起kms:Decrypt请求的身份是AWS Config的服务关联角色arn:aws:iam::************:role/aws-service-role/config.amazonaws.com/AWSServiceRoleForConfig,两者的授权逻辑不匹配。
问题1:是否需要AWS官方修复?
不需要。这是AWS的预期安全设计:服务关联角色默认仅授予服务基础运行所需的最小权限,不会默认添加访问用户自行管理的KMS密钥的权限,避免出现越权访问用户加密资源的风险。
问题2:是否可以切换为自定义角色?
可以。AWS Config支持使用自定义角色替代默认服务关联角色,操作逻辑如下:
- 创建自定义IAM角色,信任主体设置为
config.amazonaws.com - 为角色附加AWS官方托管的
AWSConfigServiceRolePolicy权限策略,保证基础功能可用 - 额外为角色添加
kms:Decrypt权限,授权范围限定为你用到的KMS密钥 - 在AWS Config控制台的设置页面,将默认服务角色替换为该自定义角色即可
问题3:自定义角色方案是否可取,会不会有后续同步问题?
该方案可以解决当前报错,但存在维护成本:
- AWS会不定期更新官方托管的
AWSConfigServiceRolePolicy,适配新推出的Config功能,自定义角色不会自动同步这些权限更新,可能导致后续新功能无法正常使用,需要你定期手动对比同步权限。 - 更推荐的方案是直接修正KMS密钥策略,无需更换角色,也不存在后续同步风险,正确的KMS策略配置如下:
{ "Sid": "Grant AWS Config Decrypt Access To Avoid Unauthorised Errors", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::你的AWS账号ID:role/aws-service-role/config.amazonaws.com/AWSServiceRoleForConfig" }, "Action": "kms:Decrypt", "Resource": "*" }
内容的提问来源于stack exchange,提问作者Alex Bailey
相关产品推荐
相关产品推荐

