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

如何在GCP多项目间共享KMS密钥以实现存储桶加密

GCP跨项目共享KMS密钥用于加密存储桶操作步骤

前置准备

  • 提前记录两个项目的ID:
    • 源项目(KMS密钥所在项目,记为Project-A)ID
    • 目标项目(需要使用该密钥加密存储桶的项目,记为Project-B)ID
  • 确认Project-A中的KMS密钥为对称加密密钥,支持Cloud Storage加密场景
  • 操作账号需要具备以下权限:Project-A的roles/cloudkms.admin权限,Project-B的roles/storage.admin + roles/resourcemanager.projectIamAdmin权限(或Project-B的Owner权限)

步骤1:获取目标项目的Cloud Storage专属服务账号

GCS使用独立的服务账号执行加密解密操作,首先需要查询Project-B的GCS服务账号:
执行gcloud命令:
gcloud storage service-accounts describe --project <PROJECT_B_ID>
返回结果中的email_address字段即为目标服务账号,格式为service-<PROJECT_B编号>@gs-project-accounts.iam.gserviceaccount.com

步骤2:为GCS服务账号授予KMS密钥访问权限

你需要在Project-A的KMS密钥侧,给上述服务账号授予加密解密权限,可选择控制台或gcloud两种方式操作:

  • 控制台操作路径:
    1. 切换到Project-A,进入「Cloud KMS」页面,找到对应密钥所在的Key Ring和目标密钥
    2. 点击密钥右侧的「显示信息面板」,选择「添加主体」
    3. 输入上一步查到的Project-B的GCS服务账号邮箱,授予角色Cloud KMS CryptoKey Encrypter/Decrypter
    4. 点击保存等待权限生效
  • gcloud命令操作:
    gcloud kms keys add-iam-policy-binding <KMS密钥名称> \
      --location <KMS密钥所在区域> \
      --keyring <Key Ring名称> \
      --project <PROJECT_A_ID> \
      --member serviceAccount:<PROJECT_B的GCS服务账号邮箱> \
      --role roles/cloudkms.cryptoKeyEncrypterDecrypter
    

步骤3:验证权限配置有效性

配置完成后可在Project-B中创建测试存储桶验证配置是否生效:

  • 控制台创建:创建存储桶时,在「保护工具」-「加密」选项中选择「客户管理的加密密钥 (CMEK)」,输入Project-A中KMS密钥的完整资源ID,正常完成创建即代表配置生效
  • gcloud命令创建:
    gcloud storage buckets create gs://<测试存储桶名称> \
      --project <PROJECT_B_ID> \
      --location <存储桶所在区域> \
      --default-encryption-key=projects/<PROJECT_A_ID>/locations/<KMS密钥区域>/keyRings/<Key Ring名称>/cryptoKeys/<KMS密钥名称>
    
    无报错返回即代表配置生效,存量存储桶也可直接在「配置」-「加密」页面修改默认加密密钥为上述跨项目CMEK密钥。

注意事项

  • KMS密钥的区域需要和目标存储桶的区域完全匹配,多区域密钥仅可用于同范围的多区域存储桶
  • 仅需在密钥层面配置IAM权限即可,Key Ring无需额外授权
  • 若后续需要撤销共享权限,直接在Project-A的KMS密钥IAM配置中删除对应服务账号的绑定即可,撤销后目标项目中用该密钥加密的存储桶内容将无法正常读取

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 01:27:03