跨账号密钥访问问题:Account A的CodeBuild无法读取Account B的Secret
跨AWS账号访问Secrets Manager密钥报错的排查与解决
常见原因及修复步骤
1. 密钥ARN或名称填写错误
- 跨账号访问必须用完整ARN(比如
arn:aws:secretsmanager:us-east-1:123456789012:secret:my-secret-xxxxxx),不能只写密钥名称。 - 核对ARN里的Account B账号ID、区域、密钥名称,尤其是Secrets Manager自动添加的随机后缀,必须和目标密钥完全一致。
2. CodeBuild服务角色权限不足
- 给Account A的CodeBuild服务角色添加IAM策略,允许访问目标密钥:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue", "secretsmanager:DescribeSecret" ], "Resource": "arn:aws:secretsmanager:<区域>:<Account B ID>:secret:<密钥名称-*>" } ] }
3. Account B的密钥资源策略未授权访问
- 登录Account B,修改对应密钥的资源策略,添加允许Account A的CodeBuild角色访问的规则:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::<Account A ID>:role/<CodeBuild服务角色名>" }, "Action": [ "secretsmanager:GetSecretValue", "secretsmanager:DescribeSecret" ], "Resource": "*" } ] }
- 建议遵循最小权限原则,只授权具体的CodeBuild角色,而非整个Account A账号。
4. 区域不匹配
- Secrets Manager是区域级服务,确认CodeBuild项目所在区域和Account B中密钥的区域一致。如果需要跨区域访问,要么把密钥复制到CodeBuild所在区域,要么在双方权限策略中明确跨区域访问的权限。
5. 密钥状态异常
- 登录Account B的Secrets Manager控制台,确认目标密钥存在、状态为“已启用”,没有被删除或标记为废弃。
快速验证方法
- 在Account A中,用CodeBuild服务角色的权限,通过AWS CLI测试访问:
aws secretsmanager get-secret-value --secret-id <Account B密钥ARN> --region <区域>
如果命令能返回密钥,说明权限配置没问题,问题出在buildspec的写法上;如果仍报错,继续排查权限或ARN的正确性。
内容的提问来源于stack exchange,提问作者Seba
相关产品推荐
相关产品推荐

