AWS DMS Serverless连接自定义KMS加密RDS源时权限错误排查
解决AWS DMS Serverless访问加密PostgreSQL RDS的KMS权限问题
可能的遗漏点及修复步骤
1. 检查KMS密钥策略是否存在冲突的拒绝规则
KMS密钥策略遵循拒绝规则优先于允许规则的逻辑,如果你的密钥策略中存在其他Effect: Deny的语句,会直接覆盖你添加的允许权限。
- 打开KMS控制台,找到目标密钥的「密钥策略」标签。
- 排查是否有任何规则包含
Deny效果,且可能限制了DMS服务关联角色的访问。 - 若存在冲突的拒绝规则,根据安全要求调整或删除该规则。
2. 补充账户根用户的KMS权限(可选但推荐)
自定义KMS密钥策略时,若未明确允许账户根用户访问,可能导致权限链断裂。添加根用户权限不会降低安全性,反而能避免隐式权限丢失:
{ "Sid": "Allow root access", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::59018XXXXXXX:root" }, "Action": "kms:*", "Resource": "*" }
3. 确保DMS Serverless的VPC允许访问KMS
DMS Serverless的工作节点运行在你指定的VPC中,若VPC未配置KMS访问路径,会触发类似权限错误的连接失败:
- 方案1:配置KMS VPC端点
在VPC中创建KMS接口端点(com.amazonaws.us-east-1.kms),并确保安全组允许DMS工作节点访问该端点的443端口。 - 方案2:放行VPC出站HTTPS流量
确认DMS使用的安全组允许出站HTTPS(443端口)流量到KMS公网服务。
4. 检查RDS实例资源策略是否限制DMS访问
如果PostgreSQL RDS实例配置了资源策略,需确保该策略允许DMS服务访问:
添加如下语句到RDS资源策略(替换占位符):
{ "Effect": "Allow", "Principal": { "Service": "dms.amazonaws.com" }, "Action": [ "rds:DescribeDBInstances", "rds:Connect" ], "Resource": "arn:aws:rds:us-east-1:59018XXXXXXX:db:pgdb" }
5. 验证服务关联角色的信任策略
虽然AWSServiceRoleForDMSServerless不可修改,但可确认其信任策略是否正确允许DMS服务假设该角色:
- 打开IAM控制台,找到
AWSServiceRoleForDMSServerless角色。 - 查看「信任关系」标签,确认存在如下核心策略:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "dms.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
测试验证
完成上述调整后,重新测试DMS端点和复制配置的连接。若问题仍存在,可通过AWS CloudTrail查看KMS的Decrypt或DescribeKey操作日志,确认具体的权限拒绝原因(如请求主体是否正确、是否有权限边界限制)。
内容的提问来源于stack exchange,提问作者bphya
相关产品推荐
相关产品推荐

