如何在 JAVA 中使用客户管理的加密密钥创建 pubsub 主题

How to create pubsub topic with Customer-managed encryption key in JAVA

我正在尝试在 Java 中使用客户管理的加密密钥创建 Pub/Sub 主题。

在 Python 中,我们可以使用 CMEK 位置作为参数创建主题,如下所示:

topic = client.create_topic(
    topic_path,
    kms_key_name=cmek_location,
    message_storage_policy=get_allowed_region()
)

在 java 中,我使用以下内容:

TopicAdminClient topicAdminClient = TopicAdminClient.create(topicAdminSettings);
topicAdminClient.createTopic(topic);

我们如何在 java 代码中使用 CMEK 位置?

为此,您可以使用从 createTopic 方法 documentation 中提取的以下代码:

try (TopicAdminClient topicAdminClient = TopicAdminClient.create()) {
  Topic request =
    Topic.newBuilder()
        .setName(TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]").toString())
        .putAllLabels(new HashMap<String, String>())
        .setMessageStoragePolicy(MessageStoragePolicy.newBuilder().build())
        .setKmsKeyName("kmsKeyName412586233")
        .setSchemaSettings(SchemaSettings.newBuilder().build())
          .setSatisfiesPzs(true)
          .setMessageRetentionDuration(Duration.newBuilder().build())
          .build();
  Topic response = topicAdminClient.createTopic(request);
}

基本上你提供了一个你想要创建的 Topic 的模板。

在您的用例中,我想它看起来类似于:

try (TopicAdminClient topicAdminClient = TopicAdminClient.create()) {
  Topic request =
    Topic.newBuilder()
      .setName(TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]").toString())
      .setKmsKeyName("kmsKeyName412586233") //cmek location
      .setMessageStoragePolicy(
         MessageStoragePolicy.newBuilder()
           .addAllowedPersistenceRegions("us-central1") // get_allowed_region
           .build()
      )
      .build();
  Topic response = topicAdminClient.createTopic(request);
}

请注意setKmsKeyName方法

API 在此 GCP documentation 中描述。