首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何管理数据流Java管道中的属性和秘密值?

如何管理数据流Java管道中的属性和秘密值?
EN

Stack Overflow用户
提问于 2021-01-05 14:02:40
回答 2查看 1.3K关注 0票数 0

我有一些用Java编写的数据流管道,它们在不同的环境/项目(开发、UAT、生产)中运行在GCP上。目前,环境配置(主要是Cloud实例和BigQuery数据集的连接参数)使用Java类中的静态映射(key = env,value = map of properties)和实用工具类管理,以动态地从Cloud加载其他文件。

在这种情况下管理配置的最佳实践(如果有的话)是什么?

实际上,我看到了两种配置参数:

  • 普通值(在Spring应用程序中存储在普通属性文件中的内容)
  • 秘密值(包含必须加密的数据的属性文件-数据库的用户名/密码,API密钥- K8S上下文中的某些内容可以作为秘密挂载)

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-01-07 14:29:04

我想您会发现本教程对如何使用数据流管道中的访问秘密管理器很有帮助。

“到目前为止,Dataflow还没有为存储和访问机密提供本机支持。为了保护这些秘密,常用的方法是在运行数据管道时使用Cloud KMS加密并解密秘密。通过新推出的秘密管理器,我们现在可以将这些秘密存储在秘密管理器中,并从我们的管道中访问它们,以提供更好的安全性和易用性。”

下面的代码使用秘密管理器SDK访问给定JDBC秘密名称的秘密。

代码语言:javascript
复制
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();
}
票数 0
EN

Stack Overflow用户

发布于 2021-01-07 11:04:53

处理Google平台中的秘密值的一种方法是使用秘密管理器来处理加密和对存储密码的访问控制。

在您的Java代码中,您可以使用谷歌云秘密管理器 maven模块来获取特定的秘密值。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65580364

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档