重新加密违反默认 CMEK 存储桶政策的对象

本页面介绍了如何使用 Storage Intelligence Advisor 识别和重新加密违反存储桶默认客户管理的加密密钥 (CMEK) 政策的对象。

当您在存储桶上设置默认 Cloud KMS 密钥时,Cloud Storage 会使用该密钥加密新对象,除非您的上传请求指定了其他密钥。不过,Cloud Storage 不会自动重新加密您在设置默认密钥之前上传的现有对象。这些对象仍使用其原始加密方法进行加密。如需详细了解可用的加密方法,请参阅数据加密选项。

当具有默认 Cloud Key Management Service (Cloud KMS) 密钥的存储桶包含未通过 CMEK 加密的对象时,Storage Intelligence Advisor 会显示对象违反默认 CMEK 存储桶政策发现结果。发现结果是指从指标和对象元数据中检测到的异常或安全配置差距,需要您注意。如需简要了解 Storage Intelligence Advisor,请参阅 Storage Intelligence Advisor 简介。如需查看发现结果的完整列表,请参阅发现结果参考目录。

触发发现结果的阈值

启用 Storage Intelligence 后,Cloud Storage 会自动评估项目、文件夹或组织中的存储桶级和对象级加密元数据。当存储桶同时满足以下两个条件时,Storage Intelligence Advisor 会生成发现结果:

初始基准发现结果会在您启用 Storage Intelligence 后的 48 小时内显示,并每 24 小时刷新一次。为了减少提醒数量,Storage Intelligence Advisor 会在信息中心内按存储桶汇总对象级违规行为。您可以在 Storage Insights 数据集中查询对象级加密元数据。

响应发现结果

如需响应此发现结果,请找出每个存储桶中受影响的对象,并使用存储桶的默认 Cloud KMS 密钥重新加密这些对象:

  1. 查看发现结果详情,找出受影响的存储桶,并复制每个存储桶的默认 KMS 密钥的资源名称。

  2. 可选:如需查看存储桶中未使用 CMEK 加密的对象列表,请在 BigQuery 中查询 Storage Insights 数据集。如果您尚未配置关联的数据集,请参阅配置 Storage Insights 数据集。

    SELECT
      bucket,
      name,
      encryptionType
    FROM
      `DATASET_NAME.object_attributes_latest_snapshot_view`
    WHERE
      bucket = 'BUCKET_NAME'
      AND encryptionType != 'CMEK'
      AND timeDeleted IS NULL
      AND softDeleteTime IS NULL;

    替换以下内容:

    • DATASET_NAME:BigQuery 中存储空间分析关联数据集的名称。
    • BUCKET_NAME:受影响的存储桶的名称。
  3. 使用下表为您的实时对象选择重新加密方法:

    场景 建议采取的操作 详细信息
    受影响的实时对象使用标准加密 (GMEK) 使用存储批量操作大规模重新加密 GMEK 加密的对象 从 BigQuery 导出受影响的 GMEK 活跃对象的 CSV 清单文件,然后运行存储批量操作作业,以使用存储桶的默认 Cloud KMS 密钥重写这些对象。
    受影响的活动对象使用客户提供的加密密钥 (CSEK) 使用 Google Cloud CLI 重新加密 CSEK 加密的对象 由于 Google Cloud 不会存储客户提供的加密密钥 (CSEK),因此存储批量操作无法解密 CSEK 加密的对象。使用 gcloud storage objects update 命令,通过存储桶的默认 Cloud KMS 密钥重写 CSEK 加密的对象。

    在您重新加密存储桶中的所有不合规对象后,该存储桶的发现结果将在下一个 24 小时刷新周期内清除。不过,在以下情况下,发现结果会保持有效,直到您或 Cloud Storage 永久删除保留的对象版本:

使用存储批量操作大规模重新加密 GMEK 加密的对象

如需大规模重新加密 GMEK 对象的有效版本,请从 BigQuery 导出 CSV 清单文件,并运行存储批量操作作业:

  1. 在 BigQuery 中运行以下 EXPORT DATA 查询,以使用存储空间分析数据集创建 CSV 清单:

    EXPORT DATA OPTIONS(
      uri='gs://DESTINATION_BUCKET/manifests/objects_violating_default_policies_*.csv',
      format='CSV',
      overwrite=true,
      header=true
    ) AS
    SELECT
      bucket,
      name
    FROM
      `DATASET_NAME.object_attributes_latest_snapshot_view`
    WHERE
      bucket = 'BUCKET_NAME'
      AND encryptionType = 'GMEK'
      AND timeDeleted IS NULL
      AND softDeleteTime IS NULL;

    替换以下内容:

    • DESTINATION_BUCKET:您要存储导出的 CSV 清单文件的 Cloud Storage 存储桶的名称。
    • DATASET_NAME:BigQuery 中存储空间分析关联数据集的名称。
    • BUCKET_NAME:受影响的存储桶的名称。
  2. 完成存储批量操作前提条件,并请您的管理员向以下两个服务代理授予存储桶默认 Cloud KMS 密钥的 Cloud KMS CryptoKey Encrypter/Decrypter 角色 (roles/cloudkms.cryptoKeyEncrypterDecrypter):

    • 存储批量操作服务代理 (service-PROJECT_NUMBER@gcp-sa-storagebatchoperations.)
    • Cloud Storage 服务代理 (service-PROJECT_NUMBER@gs-project-accounts.)

    将 PROJECT_NUMBER 替换为包含存储桶的项目的项目编号。

  3. 运行 gcloud storage batch-operations jobs create 命令,使用清单文件创建存储批量操作作业,并使用存储桶的默认 Cloud KMS 密钥重新加密对象。如需在修改对象之前验证作业配置,请添加 --dry-run 标志:

    gcloud storage batch-operations jobs create JOB_NAME \
      --bucket="BUCKET_NAME" \
      --manifest-location="gs://DESTINATION_BUCKET/manifests/objects_violating_default_policies_*.csv" \
      --rewrite-object="kms-key=DEFAULT_KMS_KEY"

    替换以下内容:

    • JOB_NAME:批量作业的唯一 ID,例如 update-encryption-to-cmek-job。
    • BUCKET_NAME:受影响的存储桶的名称。
    • DESTINATION_BUCKET:包含导出的清单文件的存储桶的名称。
    • DEFAULT_KMS_KEY:存储桶的默认 Cloud KMS 密钥的资源名称,格式为 projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/CRYPTO_KEY。

使用 Google Cloud CLI 重新加密 CSEK 加密的对象

由于 Google Cloud 不会存储客户提供的加密密钥 (CSEK),因此存储批量操作无法解密 CSEK 加密的对象。如需使用存储桶的默认 Cloud KMS 密钥重新加密 CSEK 加密的对象,请运行带有 --decryption-keys 和 --encryption-key 标志的 gcloud storage objects update 命令:

gcloud storage objects update gs://BUCKET_NAME/OBJECT_NAME \
  --decryption-keys=DECRYPTION_KEY \
  --encryption-key=DEFAULT_KMS_KEY

替换以下内容:

  • BUCKET_NAME:受影响的存储桶的名称。
  • OBJECT_NAME:要重新加密的 CSEK 加密对象的名称。如需在单个命令中更新多个对象,请使用 URI 通配符或 --read-paths-from-stdin (-I) 标志。
  • DECRYPTION_KEY:用于加密对象的 RFC 4648 base64 编码 AES-256 密钥。
  • DEFAULT_KMS_KEY:存储桶的默认 Cloud KMS 密钥的资源名称,格式为 projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/CRYPTO_KEY。

后续步骤