我是 Dropwizard 的新手,并希望在应用程序引导时从 AWS SSM 参数存储中检索秘密。我有两个关于如何做到这一点的问题:
- 我应该在哪里做这个?在初始化方法中?
- 调用 AWS SSM Parameter Store 后,放置它的最佳位置是哪里?我快速浏览了 Bootstrap 类,但对我来说,我应该把秘密等东西放在哪里以便以后检索,这并不明显。
谢谢
我是 Dropwizard 的新手,并希望在应用程序引导时从 AWS SSM 参数存储中检索秘密。我有两个关于如何做到这一点的问题:
谢谢
ConfigurationSourceProvider
您可以通过设置用 Parameter Store 变量的值替换配置设置来实现您想要的。
@Override
public void initialize(Bootstrap<MyConfiguration> bootstrap) {
ParameterStoreSourceProvider parameterStoreSourceProvider =
new ParameterStoreSourceProvider(bootstrap.getConfigurationSourceProvider());
bootstrap.setConfigurationSourceProvider(parameterStoreSourceProvider);
}
实现ConfigurationSourceProvider
从委托接管配置输入流以替换值的 a。
public class ParameterStoreSourceProvider implements ConfigurationSourceProvider {
private final ConfigurationSourceProvider delegate;
private final StringSubstitutor substitutor;
public ParameterStoreSourceProvider(ConfigurationSourceProvider delegate) {
this.delegate = delegate;
this.substitutor = new StringSubstitutor(new ParameterStoreLookup());
}
@Override
public InputStream open(String path) throws IOException {
try (Scanner scanner = new Scanner(delegate.open(path))) {
String config = scanner.useDelimiter("\\A").next();
String substituted = substitutor.replace(config);
return new ByteArrayInputStream(substituted.getBytes(StandardCharsets.UTF_8));
}
}
}
实现您ParameterStoreLookup
让其StringSubstitutor
用作变量解析器的位置。
public class ParameterStoreLookup implements StringLookup {
@Override
public String lookup(String s) {
// Lookup the value from Parameter Store and return.
return null;
}
}
完成上述步骤后,您可以在配置文件中定义一个变量,如下所示:
database:
driverClass : org.postgresql.Driver
url: ${DB_URL}
user: ${DB_USER}
password: ${DB_PASSWORD}
logging:
level: INFO
appenders:
- type: console
有关定义变量的更多信息,请参阅StringSubstitutor。确保将commons-text添加到您的依赖项中。