本页面介绍了如何使用 Storage Intelligence Advisor 识别并重新加密违反其存储桶加密强制执行配置的对象。
当您强制执行或限制存储桶的加密类型时,Cloud Storage 会对存储桶中的所有新对象或重写对象强制执行该配置。不过,Cloud Storage 不会自动重新加密您在配置生效之前上传的现有对象。这些对象仍使用其原始加密方法进行加密。如需详细了解可用的加密方法,请参阅数据加密选项。
如果存储桶中包含使用受限加密方法的对象,Storage Intelligence Advisor 会显示对象违反了强制加密规则这一发现结果。发现结果是指从指标和对象元数据中检测到的异常或安全配置差距,需要您注意。如需简要了解 Storage Intelligence Advisor,请参阅 Storage Intelligence Advisor 简介。如需查看发现结果的完整列表,请参阅发现结果参考目录。
触发发现结果的阈值
启用 Storage Intelligence 后,Cloud Storage 会自动根据项目、文件夹或组织中的存储桶级加密强制执行配置,评估对象级加密元数据。当存储桶同时满足以下两个条件时,Storage Intelligence Advisor 会生成发现结果:
- 该存储桶在其
enforcedEncryptionAllowedTypes配置中限制了一种或多种加密方法,例如标准加密(Google 默认加密或GMEK)、客户管理的加密密钥 (CMEK) 或客户提供的加密密钥 (CSEK)。 - 存储桶包含至少一个对象,其
encryptionType元数据字段不在存储桶的enforcedEncryptionAllowedTypes列表中。
初始基准发现结果会在您启用 Storage Intelligence 后的 48 小时内显示,并每 24 小时刷新一次。为了减少提醒数量,Storage Intelligence Advisor 会在信息中心内按存储桶汇总对象级违规行为。您可以在 Storage Insights 数据集中查询对象级加密元数据。
响应发现结果
如需响应发现结果,请找出每个存储桶中受影响的对象,并使用允许的加密方法重写不合规的对象:
查看发现结果详情,以确定受影响的存储桶及其允许的加密类型(
CMEK、GMEK或CSEK)。可选:如需列出受影响存储桶中违反强制执行的加密配置的对象,请在 BigQuery 中查询 Storage Insights 数据集。如果您尚未配置关联的数据集,请参阅配置 Storage Insights 数据集。
SELECT bucket, name, encryptionType FROM `DATASET_NAME.object_attributes_latest_snapshot_view` WHERE bucket = 'BUCKET_NAME' AND encryptionType NOT IN (ALLOWED_ENCRYPTION_TYPES) AND timeDeleted IS NULL AND softDeleteTime IS NULL;
替换以下内容:
DATASET_NAME:BigQuery 中存储空间分析关联数据集的名称。BUCKET_NAME:受影响的存储桶的名称。ALLOWED_ENCRYPTION_TYPES:存储桶允许的加密类型的英文逗号分隔列表,例如'CMEK'或'CMEK', 'GMEK'。
使用下表为您的实时对象选择重新加密方法:
场景 建议采取的操作 详细信息 存储桶允许使用客户管理的加密密钥 ( CMEK)使用 CMEK 重新加密对象 对于活跃的 GMEK对象,请从 BigQuery 导出 CSV 清单文件,然后运行存储批量操作作业,以使用 Cloud KMS 密钥重写这些对象。对于 CSEK 加密对象,请运行gcloud storage objects update命令。存储桶允许标准加密 ( GMEK)使用标准加密 (GMEK) 重新加密对象 验证该存储桶没有默认 Cloud KMS 密钥,然后使用带有 --clear-encryption-key标志的gcloud storage objects update命令,通过标准加密重写受影响的对象。存储桶仅允许使用客户提供的加密密钥 ( CSEK)使用 CSEK 重新加密对象 使用带有 --encryption-key标志的gcloud storage objects update命令,通过 AES-256 加密密钥重写受影响的对象。在您重新加密存储桶中的所有不合规对象后,该存储桶的发现结果将在下一个 24 小时刷新周期内清除。不过,在以下情况下,发现结果会保持有效,直到您或 Cloud Storage 永久删除保留的对象版本:
- 对象版本控制:重写当前对象时,Cloud Storage 会将原始不合规对象保留为非当前版本。如需清除此发现结果,请删除非当前对象版本或配置对象生命周期管理
Delete规则。 - 软删除:当您重写或删除对象时,Cloud Storage 会将原始不合规版本保留在软删除状态,直到存储桶的软删除保留时长到期。
- 对象版本控制:重写当前对象时,Cloud Storage 会将原始不合规对象保留为非当前版本。如需清除此发现结果,请删除非当前对象版本或配置对象生命周期管理
使用 CMEK 重新加密对象
如果存储桶允许使用客户管理的加密密钥 (CMEK),请根据受影响对象的当前加密方法对其进行重新加密。
使用存储批量操作大规模重新加密 GMEK 加密的对象
如需使用 CMEK 大规模重新加密 GMEK 加密的对象,请从 BigQuery 导出 CSV 清单文件,并运行存储批量操作作业:
在 BigQuery 中运行以下
EXPORT DATA查询, 使用存储空间分析集为使用标准加密 (GMEK) 的受影响 实时对象创建 CSV 清单:EXPORT DATA OPTIONS( uri='gs://DESTINATION_BUCKET/manifests/objects_violating_enforced_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.) - Cloud Storage 服务代理 (
service-PROJECT_NUMBER@gs-project-accounts.)
将
PROJECT_NUMBER替换为包含存储桶的项目的项目编号。- 存储批量操作服务代理 (
运行
gcloud storage batch-operations jobs create命令,使用清单文件创建 Storage 批量操作作业,并使用 Cloud KMS 密钥重写对象。如需在修改对象之前验证作业配置,请添加--dry-run标志:gcloud storage batch-operations jobs create JOB_NAME \ --bucket="BUCKET_NAME" \ --manifest-location="gs://DESTINATION_BUCKET/manifests/objects_violating_enforced_policies_*.csv" \ --rewrite-object="kms-key=KMS_KEY"
替换以下内容:
JOB_NAME:批量作业的唯一 ID,例如re-encrypt-objects-job。BUCKET_NAME:受影响的存储桶的名称。DESTINATION_BUCKET:包含导出的清单文件的存储桶的名称。KMS_KEY:您要用于加密对象的 Cloud KMS 密钥的资源名称。密钥必须与存储桶位于同一位置,并使用projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/CRYPTO_KEY格式。
使用 Google Cloud CLI 重新加密 CSEK 加密的对象
由于 Google Cloud 不会存储客户提供的加密密钥 (CSEK),因此存储批量操作无法解密 CSEK 加密的对象。如需使用 CMEK 重新加密 CSEK 加密的对象,请运行 gcloud storage objects update 命令,并同时使用 --decryption-keys 和 --encryption-key 标志:
gcloud storage objects update gs://BUCKET_NAME/OBJECT_NAME \ --decryption-keys=DECRYPTION_KEY \ --encryption-key=KMS_KEY
替换以下内容:
BUCKET_NAME:受影响的存储桶的名称。OBJECT_NAME:要重新加密的 CSEK 加密对象的名称。如需在单个命令中更新多个对象,请使用 URI 通配符或--read-paths-from-stdin(-I) 标志。DECRYPTION_KEY:用于加密对象的 RFC 4648 base64 编码 AES-256 密钥。KMS_KEY:您要用于加密对象的 Cloud KMS 密钥的资源名称,格式为projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/CRYPTO_KEY。
使用标准加密 (GMEK) 重新加密对象
如需使用标准加密(Google 默认加密或 GMEK)重新加密对象,请验证存储桶是否没有默认 Cloud KMS 密钥,并清除每个受影响对象上的自定义加密密钥:
验证存储桶没有默认 Cloud KMS 密钥。当您清除对象的自定义加密密钥时,仅当存储桶没有默认 Cloud KMS 密钥时,Cloud Storage 才会使用标准加密 (
GMEK) 对对象进行加密。如果存储桶具有默认 Cloud KMS 密钥,则 Cloud Storage 会改用该密钥对对象进行加密。如果存储桶也限制 CMEK,则重写会失败。如需从存储桶中移除默认 Cloud KMS 密钥,请运行带有
--clear-default-encryption-key标志的gcloud storage buckets update命令:gcloud storage buckets update gs://BUCKET_NAME \ --clear-default-encryption-key
将
BUCKET_NAME替换为受影响存储桶的名称。使用带有
--clear-encryption-key标志的gcloud storage objects update命令,通过标准加密重写受影响的对象。如果对象使用客户提供的加密密钥 (CSEK) 进行加密,请同时添加--decryption-keys标志:gcloud storage objects update gs://BUCKET_NAME/OBJECT_NAME \ --clear-encryption-key \ [--decryption-keys=DECRYPTION_KEY]
替换以下内容:
BUCKET_NAME:受影响的存储桶的名称。OBJECT_NAME:您要重新加密的对象的名称。如需在单个命令中更新多个对象,请使用 URI 通配符(例如gs://BUCKET_NAME/**)或--read-paths-from-stdin(-I) 标志。DECRYPTION_KEY:如果对象使用CSEK加密,则为加密对象的 RFC 4648 base64 编码 AES-256 密钥。如果对象使用CMEK加密,请省略--decryption-keys标志。
使用 CSEK 重新加密对象
如果存储桶仅允许使用客户提供的加密密钥 (CSEK),请使用 gcloud storage objects update 命令和 --encryption-key 标志,通过 AES-256 加密密钥重写受影响的对象。如果对象使用其他 CSEK 加密,请同时添加 --decryption-keys 标志:
gcloud storage objects update gs://BUCKET_NAME/OBJECT_NAME \ --encryption-key=YOUR_ENCRYPTION_KEY \ [--decryption-keys=DECRYPTION_KEY]
替换以下内容:
BUCKET_NAME:受影响的存储桶的名称。OBJECT_NAME:您要重新加密的对象的名称。如需在单个命令中更新多个对象,请使用 URI 通配符或--read-paths-from-stdin(-I) 标志。YOUR_ENCRYPTION_KEY:您的 RFC 4648 base64 编码 AES-256 加密密钥字符串。DECRYPTION_KEY:如果对象使用不同的CSEK加密,则为加密对象的 RFC 4648 base64 编码 AES-256 密钥。如果对象使用GMEK或CMEK加密,请省略--decryption-keys标志。