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

如何在EKS中使用Spring Cloud AWS从AWS Secrets Manager加载配置?求集成示例

在EKS中用Spring Cloud AWS从Secrets Manager加载配置

完全可行,Spring Cloud AWS原生支持在EKS环境下从Secrets Manager拉取配置,核心是通过**IAM角色服务账户(IRSA)**让Pod获得访问Secrets Manager的权限,无需硬编码AWS凭证。下面是具体实现步骤和集成示例:

1. 添加Spring Cloud AWS依赖

给Spring Boot项目添加Secrets Manager starter依赖,版本需和你的Spring Boot版本匹配(比如Spring Boot 3.x对应Spring Cloud AWS 3.x):

Maven(pom.xml)

<dependency>
    <groupId>io.awspring.cloud</groupId>
    <artifactId>spring-cloud-starter-aws-secrets-manager-config</artifactId>
    <version>3.1.0</version>
</dependency>

Gradle(build.gradle)

implementation 'io.awspring.cloud:spring-cloud-starter-aws-secrets-manager-config:3.1.0'

2. 配置EKS IAM权限(IRSA)

这是EKS集成的关键步骤,通过IRSA让Pod关联IAM角色,获得访问Secrets Manager的权限:

步骤1:创建IAM访问策略

创建一个IAM策略,允许访问指定的Secrets Manager密钥(替换ARN中的区域、账号ID和密钥名):

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "secretsmanager:GetSecretValue",
                "secretsmanager:DescribeSecret"
            ],
            "Resource": "arn:aws:secretsmanager:us-east-1:123456789012:secret:my-app-secrets-*"
        }
    ]
}

步骤2:创建IAM角色并关联策略

创建IAM角色时,信任策略要指向你的EKS OIDC提供商(替换OIDC ARN和ServiceAccount信息):

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Federated": "arn:aws:iam::123456789012:oidc-provider/oidc.eks.us-east-1.amazonaws.com/id/ABCDEFGHIJKLMNOPQRSTUVWXYZ123456"
            },
            "Action": "sts:AssumeRoleWithWebIdentity",
            "Condition": {
                "StringEquals": {
                    "oidc.eks.us-east-1.amazonaws.com/id/ABCDEFGHIJKLMNOPQRSTUVWXYZ123456:sub": "system:serviceaccount:default:my-app-sa"
                }
            }
        }
    ]
}

将之前创建的IAM策略关联到这个角色。

步骤3:创建K8S ServiceAccount

在EKS中创建ServiceAccount,通过注解关联上面的IAM角色:

apiVersion: v1
kind: ServiceAccount
metadata:
  name: my-app-sa
  namespace: default
  annotations:
    eks.amazonaws.com/role-arn: arn:aws:iam::123456789012:role/my-app-secrets-role

3. Spring Boot应用配置

在application.yml(或application.properties)中开启Secrets Manager配置导入:

spring:
  cloud:
    aws:
      secretsmanager:
        enabled: true
        region: us-east-1
        name: my-app-secrets # 你的Secrets Manager密钥名称
  config:
    import: "aws-secretsmanager:" # 开启从Secrets Manager加载配置

如果需要加载多个密钥或按环境区分,可以这样配置:

spring:
  config:
    import: "aws-secretsmanager:my-app-${spring.profiles.active}-secrets,aws-secretsmanager:my-app-common-secrets"

代码中使用配置

假设Secrets Manager中的密钥内容为JSON格式:

{
    "db.username": "admin",
    "db.password": "s3cr3tP@ssw0rd"
}

你可以直接用@Value注入这些属性:

@RestController
public class SecretsTestController {

    @Value("${db.username}")
    private String dbUsername;

    @Value("${db.password}")
    private String dbPassword;

    @GetMapping("/secrets")
    public String showSecrets() {
        return String.format("DB Username: %s, DB Password: %s", dbUsername, dbPassword);
    }
}

4. EKS部署示例

创建Deployment YAML,指定使用上面的ServiceAccount:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-spring-boot-app
  namespace: default
spec:
  replicas: 1
  selector:
    matchLabels:
      app: my-spring-boot-app
  template:
    metadata:
      labels:
        app: my-spring-boot-app
    spec:
      serviceAccountName: my-app-sa
      containers:
        - name: app-container
          image: your-docker-registry/my-spring-boot-app:latest
          ports:
            - containerPort: 8080
          env:
            - name: SPRING_PROFILES_ACTIVE
              value: dev

5. 验证部署

  1. 部署应用到EKS:
kubectl apply -f deployment.yaml
  1. 查看Pod运行状态:
kubectl get pods
  1. 端口转发到本地测试:
kubectl port-forward pod/my-spring-boot-app-xxxx-yyyy 8080:8080
  1. 访问http://localhost:8080/secrets,确认能正确显示从Secrets Manager加载的配置。

注意事项

  • 确保你的EKS集群已配置OIDC提供商(默认创建的EKS集群自动配置,手动创建需确认)
  • IAM策略的Resource要精确到目标密钥ARN,避免过度授权
  • 注意Spring Cloud AWS和Spring Boot的版本兼容性
  • 可以结合Spring Profiles实现多环境配置隔离

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 09:25:20