本页面介绍了如何使用 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 会生成发现结果:
- 存储桶具有默认 Cloud KMS 密钥,这意味着
encryption.defaultKmsKeyName字段已设置,且encryption.defaultEncryptionType字段为CMEK。 - 存储桶包含至少一个
encryptionType元数据字段不是CMEK(例如GMEK或CSEK)的对象。
初始基准发现结果会在您启用 Storage Intelligence 后的 48 小时内显示,并每 24 小时刷新一次。为了减少提醒数量,Storage Intelligence Advisor 会在信息中心内按存储桶汇总对象级违规行为。您可以在 Storage Insights 数据集中查询对象级加密元数据。
响应发现结果
如需响应此发现结果,请找出每个存储桶中受影响的对象,并使用存储桶的默认 Cloud KMS 密钥重新加密这些对象:
查看发现结果详情,找出受影响的存储桶,并复制每个存储桶的默认 KMS 密钥的资源名称。
可选:如需查看存储桶中未使用 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:受影响的存储桶的名称。
使用下表为您的实时对象选择重新加密方法:
场景 建议采取的操作 详细信息 受影响的实时对象使用标准加密 ( 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 永久删除保留的对象版本:
- 对象版本控制:重写当前对象时,Cloud Storage 会将原始不合规对象保留为非当前版本。如需清除此发现结果,请删除非当前对象版本或配置对象生命周期管理
Delete规则。 - 软删除:当您重写或删除对象时,Cloud Storage 会将原始不合规版本保留在软删除状态,直到存储桶的软删除保留时长到期。
- 对象版本控制:重写当前对象时,Cloud Storage 会将原始不合规对象保留为非当前版本。如需清除此发现结果,请删除非当前对象版本或配置对象生命周期管理
使用存储批量操作大规模重新加密 GMEK 加密的对象
如需大规模重新加密 GMEK 对象的有效版本,请从 BigQuery 导出 CSV 清单文件,并运行存储批量操作作业:
在 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:受影响的存储桶的名称。
完成存储批量操作前提条件,并请您的管理员向以下两个服务代理授予存储桶默认 Cloud KMS 密钥的 Cloud KMS CryptoKey Encrypter/Decrypter 角色 (
roles/cloudkms.cryptoKeyEncrypterDecrypter):- 存储批量操作服务代理 (
service-PROJECT_NUMBER@gcp-sa-storagebatchoperations.iam.gserviceaccount.com) - Cloud Storage 服务代理 (
service-PROJECT_NUMBER@gs-project-accounts.iam.gserviceaccount.com)
将
PROJECT_NUMBER替换为包含存储桶的项目的项目编号。- 存储批量操作服务代理 (
运行
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。
后续步骤
- 主要任务:
- 探索其他发现结果:
- 相关概念: