使用客户管理的加密密钥加密数据

本页面介绍了如何加密 Filestore 上的数据 instancesbackups 使用您自己的加密密钥进行加密

默认情况下,Google Cloud 会使用 Google 拥有和管理的加密密钥自动加密静态数据。如果您需要更好地控制用于保护数据的密钥,则可以为 Filestore 使用客户管理的加密密钥。

客户管理的加密密钥选项

Cloud Key Management Service 支持客户管理的加密密钥 (CMEK),可作为软件密钥存储,也可作为硬件密钥存储在 HSM 集群中,或存储在 Cloud External Key Manager (Cloud EKM) 的外部位置。有多种方案可供选择。

如需了解详情,请参阅 Cloud Key Management Service

Cloud External Key Manager

适用于 Filestore 的 Cloud EKM 支持现已正式发布 (GA)。如需了解详情,请参阅 Cloud External Key Manager

EKM 服务中断

外部密钥由第三方管理,这是设计使然;在这种情况下,Google Cloud 不对密钥可用性负责。

如果 Cloud Key Management Service (Cloud KMS) 通过 External Key Manager (EKM) 通知 无法访问外部密钥时,用户会收到 ekm_key_unreachable_detected 通知。在长达一小时的时间内,用户对 实例。一小时后,如果密钥状态保持不变,系统会执行以下操作:

  • 密钥已停用。
  • 所有加密和解密操作都会失败。
  • Filestore 实例已暂停。

在某些情况下(例如虚拟机重启等计划外事件), 实例可能会在一小时前中断。

您可以在 Filestore 实例详情页面查看无法访问的密钥通知:

转到“Filestore 实例”页面

如果用户在首次收到通知后一小时内执行以下任一操作,还会收到 ekm_key_unreachable_detected 通知:

支持的层级

下表显示了 Filestore 服务层级 支持 CMEK(客户管理的加密密钥):

层级 CMEK 支持
基本 HDD
基本 SSD
可用区级
区域
企业

创建用于实例的密钥环和密钥

密钥环和密钥可以与 Filestore 实例位于不同的项目中,但它们必须位于同一位置。如果您已经有要用于 Filestore 的 Cloud KMS 密钥环和密钥,请跳至下一部分。否则,请按照关于创建对称加密密钥的说明创建密钥环和密钥。

向 Filestore 服务账号授予密钥访问权限

Filestore 服务账号必须具有 Cloud KMS CryptoKey Encrypter/Decrypter 角色 (roles/cloudkms.cryptoKeyEncrypterDecrypter),您才能创建使用客户管理的加密密钥的 Filestore 实例。

  1. 首次在项目中创建 Filestore 实例时,系统会创建 Filestore 服务账号。如果您还没有 Filestore 服务账号,请运行以下 services identity create 命令:

    gcloud beta services identity create --service=file.googleapis.com --project=INSTANCE_PROJECT_NUMBER_OR_ID
    

    INSTANCE_PROJECT_NUMBER_OR_ID 替换为要在其中创建 Filestore 实例的项目的编号或 ID。

  2. 为 Filestore 服务账号分配 Cloud KMS CryptoKey 通过运行 projects add-iam-policy-binding 命令获得加密者/解密者角色:

    gcloud projects add-iam-policy-binding KMS_PROJECT_NUMBER_OR_ID \
        --member serviceAccount:service-INSTANCE_PROJECT_NUMBER@cloud-filer.iam.gserviceaccount.com \
        --role roles/cloudkms.cryptoKeyEncrypterDecrypter
    

    替换以下内容:

    • KMS_PROJECT_NUMBER_OR_ID 替换为包含您要使用的 Cloud KMS 密钥的项目的编号或 ID。
    • INSTANCE_PROJECT_NUMBER 替换为您要在其中创建 Filestore 实例的项目的编号(不是项目 ID)。

创建使用 Cloud KMS 密钥的实例

Google Cloud 控制台

创建使用 Cloud KMS 密钥处理数据的实例 加密:

  1. 在 Google Cloud 控制台中,前往 Filestore 实例 页面。

    转到“Filestore 实例”页面

  2. 点击创建实例

  3. 选择支持 CMEK 的实例层级,并像往常一样填写所有其他必填字段和可选字段。

  4. 点击显示高级选项

  5. 选中使用客户管理的加密密钥 (CMEK) 复选框。

  6. 选择要用于实例的 Cloud KMS 密钥。

  7. 点击创建

gcloud CLI

如需创建使用 Cloud KMS 密钥加密数据的 Filestore 实例,请在 filestore instances create 命令中指定 --kms-key 标志:

gcloud filestore instances create nfs-server \
    --tier=<var>TIER</var> \
    --location=us-central1 \
    --file-share=name="vol1",capacity=1TiB \
    --network=name="default" \
    --kms-key=KMS_KEY

替换以下内容:

  • TIER 与支持客户管理的加密密钥的 Filestore 层级搭配使用。
  • KMS_KEY 替换为 Cloud KMS 的完全限定名称 密钥。或者,您也可以按以下格式分别指定每个参数:
--kms-key=KMS_KEY : --kms-keyring=KEY_RING --kms-location=KMS_REGION --kms-project=KMS_PROJECT_NUMBER_OR_ID

替换以下内容:

  • KMS_KEY 替换为 Cloud KMS 密钥的名称。
  • KMS_PROJECT_NUMBER_OR_ID 替换为在其中创建密钥的项目的编号或 ID。
  • KMS_KEY_RING 替换为密钥环的名称。
  • KMS_REGION 替换为密钥环的区域。 密钥环和实例必须位于同一区域中。

获取密钥列表

您可以通过运行 kms keys list 来获取密钥列表 命令:

  gcloud kms keys list \
  --project=KMS_PROJECT_NUMBER_OR_ID \
  --keyring=KEY_RING \
  --location=KMS_REGION

替换以下内容:

  • KMS_PROJECT_NUMBER_OR_ID 替换为在其中创建密钥的项目的编号或 ID。
  • KEY_RING 替换为密钥环的名称。
  • KMS_REGION 替换为密钥环的区域。

输出的名称列提供现有密钥的完全限定名称。例如:

projects/example-project/locations/us-central1/keyRings/example-ring/cryptoKeys/example-key

获取实例密钥信息

以下部分介绍了如何获取实例密钥信息。

列出使用特定 Cloud KMS 密钥的实例

您可以通过运行 instances list 命令来列出使用特定密钥的 Filestore 实例:

gcloud filestore instances list --filter="kmsKeyName=KMS_KEY"

KMS_KEY 替换为要使用的密钥的完全限定名称。

示例

gcloud filestore instances list \
    --filter="kmsKeyName=projects/example-project/locations/us-central1/keyRings/example-ring/cryptoKeys/example-key"

输出如下所示:

INSTANCE_NAME LOCATION    TIER       CAPACITY_GB FILE_SHARE_NAME IP_ADDRESS   STATE CREATE_TIME
nfs-server    us-central1 ENTERPRISE 1024        vol1            10.166.108.2 READY 2021-08-12T11:38:56

获取实例的 Cloud KMS 密钥信息

使用以下方法之一获取 Filestore 实例的 Cloud KMS 密钥信息:

Google Cloud 控制台

  1. 转到“Filestore 实例”页面

    转到“Filestore 实例”页面

  2. 点击实例 ID 以打开“实例详情”页面。

  3. 点击概览标签页。

如果实例使用 Cloud KMS 密钥(而不是 Google 拥有且由 Google 管理的密钥)来加密数据,则密钥名称会显示在加密密钥字段中。

gcloud CLI

运行以下 instances describe 命令:

gcloud filestore instances describe INSTANCE_ID \
   --location=INSTANCE_LOCATION

替换以下内容:

  • INSTANCE_ID 替换为您要获取其信息的 Filestore 实例的实例 ID。
  • INSTANCE_LOCATION 替换为实例所在的区域或可用区。

输出如下所示:

createTime: '2021-08-12T11:38:56.851157387Z'
fileShares:
- capacityGb: '1024'
  name: vol1
kmsKeyName: projects/example-project/locations/us-central1/keyRings/example-ring/cryptoKeys/example-key
labels:
  key: val
name: projects/consumer-project/locations/us-central1/instances/nfs-server
networks:
- ipAddresses:
  - 10.0.100.2
  modes:
  - MODE_IPV4
  network: network
  reservedIpRange: 10.166.108.0/23
state: READY
tier: ENTERPRISE

停用或销毁实例使用的 Cloud KMS 密钥

如果检测到 Cloud KMS 密钥状态发生变化,实例会自动停止传送数据。下面是一些示例:

  • 停用密钥或密钥版本。
  • 销毁密钥或密钥版本。
  • 修改密钥的权限。

这种检测通常在密钥状态发生变化后的几分钟内发生, 但在某些情况下最长可能需要一个小时

实例停止后,对文件共享数据以及任何快照的所有访问都会被阻止。已停止的实例会继续计费,直到它们被删除为止。

启动已停止的实例

如果已停止的 Filestore 实例使用 Cloud KMS 密钥 对数据进行加密时,密钥的所有密钥版本都必须是 enabled恢复实例。

启用 Cloud KMS 密钥状态后 自动检测关键更改并重启,而无需执行任何其他操作; 通常在 20 分钟内完成。

为备份链提供 CMEK 支持

您不仅可以使用 CMEK 加密 Filestore 实例,还可以加密备份链

备份链位于单个存储桶和区域中。如需在源实例之外的区域存储和加密备份数据,用户必须应用两个单独的 CMEK:一个用于实例,另一个用于备份链。您需要遵守一些要求:

  • CMEK 必须与其加密的备份链位于同一区域。

  • 单个 CMEK 会应用于存储备份链的存储桶,并且无法组合或替换。

  • 若要使用新的 CMEK 创建备份,则整个现有备份链 必须先删除

CMEK 支持不适用于基本层级备份。

如需了解详情,请参阅备份

后续步骤