You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot集成AWS Secrets Manager获取RDS凭证报错求助

解决Spring Boot + AWS Secrets Manager获取RDS凭证的ResourceNotFoundException

问题背景

在Spring Boot应用中集成AWS Secrets Manager获取PostgreSQL RDS凭证时,遇到如下错误:

com.amazonaws.services.secretsmanager.model.ResourceNotFoundException: Secrets Manager can't find the specified secret. (Service: AWSSecretsManager; Status Code: 400; Error Code: ResourceNotFoundException; Request ID: 6571600b-61bc-4889-ad74-f41c678bfd89; Proxy: null)

使用的依赖(pom.xml):

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <dependency>
        <groupId>com.amazonaws.secretsmanager</groupId>
        <artifactId>aws-secretsmanager-jdbc</artifactId>
        <version>${aws-secretsmanager-jdbc.version}</version>
    </dependency>
    <dependency>
        <groupId>org.postgresql</groupId>
        <artifactId>postgresql</artifactId>
    </dependency>
</dependencies>

<properties>
    <aws-secretsmanager-jdbc.version>1.0.5</aws-secretsmanager-jdbc.version>
</properties>

application.properties配置:

spring.datasource.driver-classname=com.amazonaws.secretsmanager.sql.AWSSecretsManagerPostgreSQLDriver
spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect
spring.datasource.url=jdbc-secretsmanager:postgresql://postgres-db.cjqt4bf02oy9.ap-northeast-2.rds.amazonaws.com:5432/postgres-db
spring.datasource.username=dev/dbCreds/demo

排查与解决步骤

1. 确认Secret存在且区域匹配

  • 登录AWS Secrets Manager控制台,切换到ap-northeast-2区域(与你的RDS实例区域一致),检查是否存在dev/dbCreds/demo这个Secret。
  • 注意:Secret是区域级资源,跨区域无法访问,必须保证应用访问的区域和Secret所在区域完全一致。

2. 核对Secret名称/ARN的正确性

  • spring.datasource.username字段填写的是Secret的名称或完整ARN,仔细检查是否有拼写错误(比如大小写、路径分隔符)。
  • 如果使用ARN,必须包含完整的后缀(AWS自动生成的随机字符串),格式类似:arn:aws:secretsmanager:ap-northeast-2:你的AWS账号ID:secret:dev/dbCreds/demo-xxxxxx。

3. 验证IAM权限配置

  • 应用运行环境的IAM实体(EC2实例角色、ECS任务角色、本地测试用的IAM用户)必须拥有secretsmanager:GetSecretValue权限,且资源范围覆盖目标Secret。
  • 示例权限策略:
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "secretsmanager:GetSecretValue",
            "Resource": "arn:aws:secretsmanager:ap-northeast-2:你的账号ID:secret:dev/dbCreds/demo-*"
        }
    ]
}
  • 本地测试时,检查~/.aws/credentials文件或环境变量AWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEY对应的IAM用户是否具备上述权限。

4. 升级JDBC驱动版本

  • 你使用的1.0.5版本较旧,存在兼容性问题,建议升级到最新稳定版(如2.0.1),修改pom.xml中的版本:
<properties>
    <aws-secretsmanager-jdbc.version>2.0.1</aws-secretsmanager-jdbc.version>
</properties>

5. 检查Secret内容格式

  • AWS RDS自动生成的Secret会包含username、password等必填字段,自定义Secret也必须包含这两个键,否则驱动无法解析。
  • 用AWS CLI测试获取Secret内容,确认格式正确:
aws secretsmanager get-secret-value --secret-id dev/dbCreds/demo --region ap-northeast-2

6. 指定应用的AWS区域

  • 确保应用默认使用的AWS区域是ap-northeast-2,可以通过以下方式设置:
    • 在application.properties中添加:cloud.aws.region.static=ap-northeast-2(需引入spring-cloud-aws依赖)
    • 设置环境变量:AWS_REGION=ap-northeast-2

内容的提问来源于stack exchange,提问作者mar0ne

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 08:20:32