部署CDK项目跨区域调用AWS Secrets Manager遇资源未找到错误
跨区域调用AWS Secrets Manager密钥的问题解决方法
可能的原因及解决步骤
1. 验证密钥ARN的准确性
确认props.config.mongoDb.credentials.arn对应的是us-east-1区域密钥的完整ARN,格式应为:arn:aws:secretsmanager:us-east-1:ACCOUNT_ID:secret:SECRET_NAME-XXXXXX
注意末尾的随机后缀是Secrets Manager自动生成的,必须完整包含,可直接从us-east-1区域的Secrets Manager控制台复制正确ARN。
2. 配置IAM权限允许跨区域访问
部署CDK栈的角色,以及后续需要访问该密钥的资源(如Lambda、ECS任务角色),必须附加包含目标密钥访问权限的IAM策略:
{ "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue", "secretsmanager:DescribeSecret" ], "Resource": "arn:aws:secretsmanager:us-east-1:123456789012:secret:MongoDBCreds-abc123" }
替换上述ARN为实际的密钥ARN,确保策略覆盖所有需要访问该密钥的身份。
3. 使用更明确的CDK引用方法
建议使用Secret.fromSecretCompleteArn替代fromSecretAttributes,该方法专为完整ARN引用场景设计,减少参数歧义:
import * as secretsManager from 'aws-cdk-lib/aws-secretsmanager'; // ... const mongoDbCredentials = secretsManager.Secret.fromSecretCompleteArn( this, 'MongoDbCredentials', props.config.mongoDb.credentials.arn );
4. 检查密钥的资源策略
如果us-east-1的密钥配置了资源策略,需确保策略允许us-west-2区域的账户或角色访问。示例资源策略:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:role/UsWest2ServiceRole" }, "Action": [ "secretsmanager:GetSecretValue", "secretsmanager:DescribeSecret" ], "Resource": "*" } ] }
将Principal中的ARN替换为us-west-2区域需要访问密钥的角色ARN。
5. 确认密钥状态
登录us-east-1区域的Secrets Manager控制台,检查目标密钥是否存在、未被删除,且未处于禁用状态。
内容的提问来源于stack exchange,提问作者Luzifer
相关产品推荐
相关产品推荐

