AWS Secrets Manager跨账号为外部账号角色/组授予密钥访问权限问题
问题根因
- AWS跨账号资源策略(含Secrets Manager资源策略、KMS密钥策略)不支持将外部账号的IAM组作为Principal,该限制为IAM固有规则,因此你配置外部账号IAM组为授权主体时会提示Principal不正确。
- Lambda执行角色访问被拒绝的常见原因包括:密钥ARN未加后缀通配符匹配AWS自动生成的6位随机后缀、角色ARN拼写错误、Lambda执行角色未正确附加跨账号访问权限策略、Lambda VPC配置无法访问Secrets Manager/KMS服务。
- 你使用个人账号可以正常访问的原因是个人用户ARN属于支持的Principal类型,授权链路完整。
解决方案(无需逐个授权用户)
不要在中心账号的策略中直接指定外部账号的具体角色/用户,改为直接授权给外部账号的根身份,权限的细粒度分配完全交给外部账号侧自行管理,后续新增访问主体无需修改中心账号配置:
- 替换中心账号客户托管KMS密钥策略的授权部分:
{ "Sid": "Permissions for external account", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::external-acct:root" }, "Action": [ "kms:Decrypt", "kms:DescribeKey" ], "Resource": "*", "Condition": { "StringEquals": { "kms:ViaService": "secretsmanager.us-east-1.amazonaws.com" }, "StringLike": { "kms:EncryptionContext:SecretARN": "arn:aws:secretsmanager:us-east-1:central-acct:secret:my-secret*" } } }
- 替换中心账号Secrets Manager密钥的资源策略:
{ "Version" : "2012-10-17", "Statement" : [ { "Effect" : "Allow", "Principal" : { "AWS" : "arn:aws:iam::external-acct:root" }, "Action" : "secretsmanager:GetSecretValue", "Resource" : "*", "Condition" : { "ForAnyValue:StringEquals" : { "secretsmanager:VersionStage" : "AWSCURRENT" } } } ] }
- 外部账号侧保持原有权限策略不变,需要给哪个IAM组、IAM角色、IAM用户授予密钥访问权限,直接将该权限策略附加到对应身份即可。
校验项
- 确认Lambda执行角色的信任策略允许Lambda服务担任该角色
- 确认Lambda执行角色已正确附加跨账号访问权限策略
- 若Lambda配置了VPC,确认VPC已配置Secrets Manager和KMS的VPC端点,或VPC有公网出口可访问对应服务
内容的提问来源于stack exchange,提问作者cptkirkh
相关产品推荐
相关产品推荐

