[英]Read value from AWS Secrets Manager and replace a placeholder in the Springboot property values
我们的应用程序需要连接到 confluent kafka,因此我们在 application.yaml 文件中有以下设置
kafka:
properties:
sasl:
mechanism: PLAIN
jaas:
config: org.apache.kafka.common.security.plain.PlainLoginModule required username={userName} password={passWord};
{userName} 和 {passWord} 需要替换为从 AWS 密钥管理器获取的值。 这些是我到目前为止所做的。
第 1 步:使用以下 maven 依赖项
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-secretsmanager</artifactId>
</dependency>
第二步:创建一个配置类并创建一个带有@Bean注解的方法来初始化一个AWSSecretsManager客户端对象。我们可以通过AWSSecretsManager对象获取一些键值对。
// Create a Secrets Manager client
AWSSecretsManager client = AWSSecretsManagerClientBuilder.standard()
.withRegion(region)
.withCredentials(new AWSStaticCredentialsProvider(new BasicAWSCredentials(accessKey, secretKey)))
.build();
我有以下问题要问:
更多信息:
我们的应用程序将在 AWS ECS 上运行
我在这里的回答将集中在您问题的 Secrets Manager API 部分
我建议您从AWS SDK for Java V1迁移到AWS SDK for Java V2 。 您可以在此处找到 V2 Java Secret Manager 示例。
https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/javav2/example_code/secretsmanager
这是 V2 的服务客户端。
SecretsManagerClient secretsClient = SecretsManagerClient.builder()
.region(region)
.credentialsProvider(ProfileCredentialsProvider.create())
.build();
在此示例中,我使用从 .aws/Credentials 读取凭据的 ProfileCredentialsProvider。 您可以在AWS Java V2 DEV Guide中了解有关 V2 如何处理凭据的更多信息。
您不能在部署到容器的应用程序中使用ProfileCredentialsProvider ,因为此文件结构不是容器的一部分。 因此您可以使用 Amazon ECS 容器凭证:
开发工具包使用 ContainerCredentialsProvider 类从 AWS_CONTAINER_CREDENTIALS_RELATIVE_URI 系统环境变量加载凭证。
请参阅上述文档中的第 5 点。
我根本不建议通过 Java 代码执行此操作。 我将完全删除aws-java-sdk-secretsmanager
依赖项,并使用ECS 支持将 SecretsManager 值作为环境变量注入。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.