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

本页面介绍如何使用自己的加密密钥加密 Filestore 实例备份中的数据。

默认情况下,Google Cloud 会使用由 Google Cloud 管理的加密密钥自动加密静态数据。如果您需要更好地控制用于保护数据的密钥,可以为 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 不负责密钥可用性。

如果 External Key Manager (EKM) 通知 Cloud Key Management Service (Cloud KMS) 无法访问外部密钥,用户会收到 ekm_key_unreachable_detected 通知。最多一小时,用户对实例上的操作拥有受限的访问权限。一小时后,如果密钥状态保持不变,系统将执行以下操作:

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

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

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

转到“Filestore 实例”页面

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

支持的层级

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

层级 CMEK 支持
基本 HDD
基本 SSD
具有较低容量频段的可用区
具有更高容量频段的可用区(以前为大规模 SSD)
企业版

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

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

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

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

  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. 运行 projects add-iam-policy-binding 命令,为 Filestore 服务帐号分配 Cloud KMS CryptoKey Encrypter/Decrypter 角色:

    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 管理的加密密钥来加密数据,则密钥名称会显示在加密密钥字段中。

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 密钥进行数据加密,则必须先启用恢复该密钥的所有密钥版本,然后才能重启该实例。

启用 Cloud KMS 密钥状态后,实例将自动检测密钥更改并重启,您无需执行任何其他操作(通常在 20 分钟内)。

为备份链提供 CMEK 支持

您不但可以使用 CMEK 加密 Filestore 实例,还可以对备份链进行加密。

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

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

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

  • 如需使用新的 CMEK 创建备份,必须先删除整个现有备份链。

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

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

后续步骤