You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中如何创建配置客户管理加密密钥(CMEK)的Pub/Sub主题

Java配置Pub/Sub主题CMEK的实现方案

你只需要在构建Topic实例时通过setKmsKeyName方法传入CMEK的完整密钥路径即可,对应Python示例中的kms_key_name参数,完整实现代码如下:

import com.google.cloud.pubsub.v1.TopicAdminClient;
import com.google.pubsub.v1.Topic;
import com.google.pubsub.v1.TopicName;
import com.google.pubsub.v1.MessageStoragePolicy;

public class CreateTopicWithCmek {
    public static void main(String... args) throws Exception {
        // 替换为实际的项目ID、主题ID、CMEK完整路径
        String projectId = "your-project-id";
        String topicId = "your-topic-id";
        String cmekKeyFullPath = "projects/[kms-project-id]/locations/[region]/keyRings/[key-ring-name]/cryptoKeys/[key-name]";

        // 构造主题名称
        TopicName topicName = TopicName.of(projectId, topicId);

        // 构建带CMEK配置和存储策略的Topic对象
        Topic topic = Topic.newBuilder()
                .setName(topicName.toString())
                .setKmsKeyName(cmekKeyFullPath) // 传入CMEK路径完成加密配置
                .setMessageStoragePolicy(MessageStoragePolicy.newBuilder()
                        // 替换为实际允许的消息存储区域,和Python中get_allowed_region()返回值对应
                        .addAllowedPersistenceRegions("us-central1")
                        .addAllowedPersistenceRegions("us-east1")
                        .build())
                .build();

        // 创建主题,逻辑和你原有代码保持一致
        try (TopicAdminClient topicAdminClient = TopicAdminClient.create()) {
            Topic createdTopic = topicAdminClient.createTopic(topic);
            System.out.printf("主题创建成功,CMEK配置为:%s%n", createdTopic.getKmsKeyName());
        }
    }
}

注意事项

  • 确保使用的Google Cloud Pub/Sub Java客户端为最新稳定版,避免旧版本不支持setKmsKeyName方法
  • 调用API的服务账号需要被授予对应KMS密钥的roles/cloudkms.cryptoKeyEncrypterDecrypter权限,否则会触发权限报错
  • CMEK密钥的所属区域需要和Pub/Sub主题允许存储的区域匹配,或使用全局级别的KMS密钥

内容的提问来源于stack exchange,提问作者Krishna0696

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 17:18:04