我有一些用Java编写的数据流管道,它们在不同的环境/项目(开发、UAT、生产)中运行在GCP上。目前,环境配置(主要是Cloud实例和BigQuery数据集的连接参数)使用Java类中的静态映射(key = env,value = map of properties)和实用工具类管理,以动态地从Cloud加载其他文件。
在这种情况下管理配置的最佳实践(如果有的话)是什么?
实际上,我看到了两种配置参数:
谢谢。
发布于 2021-01-07 14:29:04
我想您会发现本教程对如何使用数据流管道中的访问秘密管理器很有帮助。
“到目前为止,Dataflow还没有为存储和访问机密提供本机支持。为了保护这些秘密,常用的方法是在运行数据管道时使用Cloud KMS加密并解密秘密。通过新推出的秘密管理器,我们现在可以将这些秘密存储在秘密管理器中,并从我们的管道中访问它们,以提供更好的安全性和易用性。”
下面的代码使用秘密管理器SDK访问给定JDBC秘密名称的秘密。
private static String jdbcUrlTranslator(String jdbcUrlSecretName) {
try (SecretManagerServiceClient client = SecretManagerServiceClient.create()) {
AccessSecretVersionResponse response = client.accessSecretVersion(jdbcUrlSecretName);
return response.getPayload().getData().toStringUtf8();
} catch (IOException e) {
throw new RuntimeException("Unable to read JDBC URL secret");
}
}
public static void main(String[] args) {
PipelineOptionsFactory.register(MainPipelineOptions.class);
MainPipelineOptions options =
PipelineOptionsFactory.fromArgs(args)
.withValidation()
.as(MainPipelineOptions.class);
NestedValueProvider<String, String> jdbcUrlValueProvider =
NestedValueProvider.of(
options.getJdbcUrlSecretName(), MainPipeline::jdbcUrlTranslator);
Pipeline pipeline = Pipeline.create(options);
pipeline
.apply("SQL Server - Read Sales.Customers_Archive",
JdbcIO.<KV<Integer, String>>read()
.withDataSourceConfiguration(
JdbcIO.DataSourceConfiguration.create(
StaticValueProvider.of("com.microsoft.sqlserver.jdbc.SQLServerDriver"),
jdbcUrlValueProvider)
);
// Other transforms
pipeline.run();
}发布于 2021-01-07 11:04:53
处理Google平台中的秘密值的一种方法是使用秘密管理器来处理加密和对存储密码的访问控制。
在您的Java代码中,您可以使用谷歌云秘密管理器 maven模块来获取特定的秘密值。
https://stackoverflow.com/questions/65580364
复制相似问题