本节介绍了对 GCP 云的服务引擎 (SE) 磁盘加密的客户托管加密密钥 (CMEK) 支持。

NSX Advanced Load Balancer GCP 云支持对以下资源进行加密。每个资源支持不同的加密密钥。

  • 为上载原始 SE 映像文件而创建的 GCS 存储桶。

  • 作为 GCS 对象上载的原始 SE 映像。

  • 从原始映像中创建的 GCP 映像。

  • 创建 SE 时的 SE 磁盘。

将密钥添加到云配置后,Cloud Connector 会检查密钥是否存在以及密钥的权限。如果有任何密钥验证失败,云将进入失败状态。如果在创建 SE 后从云中删除 SE 磁盘加密密钥,则相应的 SE 随后若关闭,便无法启动。

必备条件

使用 CMEK 之前,请执行以下步骤:

  1. 在 Google KMS 中创建一个密钥。

  2. NSX Advanced Load Balancer 云服务帐户提供相应权限,以使用以下任一密钥:

    a) cloudkms.cryptoKeys.get;或

    b) role: roles/cloudkms.admin

  3. 为以下服务帐户提供相应权限,以使 Google 计算和存储能够使用该密钥进行数据加密或解密:

    a) 权限

    i. cloudkms.cryptoKeyVersions.useToEncrypt

    ii.cloudkms.cryptoKeyVersions.useToDecrypt,或

    iii.role: roles/cloudkms.cryptoKeyEncrypterDecrypter

    b) 对于 GCS 对象和存储桶加密密钥,以下成员必须具有上述权限。

    i. service-[PROJECT_NUMBER]@gs-project-accounts.iam.gserviceaccount.com

    c) 对于 SE 映像和磁盘加密密钥,以下成员必须具有上述权限

    i. service-[PROJECT_NUMBER]@compute-system.iam.gserviceaccount.com

云配置

要配置加密密钥,请在 GCP 云配置中设置 encryption_keys 字段。虽然加密密钥可以存在于任何 GCP 项目(独立于 SE 项目)中,但它必须与 SE 位于同一区域或者可以是全局性的。kms 密钥 ID 必须采用 projects/project-id/locations/region/keyRings/key-ring-name/cryptoKeys/key-name 格式。

配置字段

下面是各个配置字段:

gcs_bucket_kms_key_id    CMEK Resource ID to encrypt Google Cloud Storage Bucket. This Bucket is used to upload Service Engine raw image.
gcs_objects_kms_key_id   CMEK Resource ID to encrypt Service Engine raw image. The raw image is a Google Cloud Storage Object.
se_disk_kms_key_id       CMEK Resource ID to encrypt Service Engine Disks.
se_image_kms_key_id      CMEK Resource ID to encrypt Service Engine GCE Image.

配置 GCP 以使用加密

在配置 Google Cloud 时,您需要一个用于进行加密的密钥。您可以采用 URI 格式提供密钥 ID,如下所示:

下面是 CLI 格式:

[admin:10-138-10-66]: > configure cloud gcp-cloud
[admin:10-138-10-66]: cloud> gcp_configuration
[admin:10-138-10-66]: cloud:gcp_configuration> encryption_keys
[admin:10-138-10-66]: cloud:gcp_configuration:encryption_keys> se_disk_kms_key_id projects/kms-project/locations/us-central1/keyRings/keyring/cryptoKeys/se-disk
[admin:10-138-10-66]: cloud:gcp_configuration:encryption_keys> gcs_bucket_kms_key_id projects/kms-project/locations/us-central1/keyRings/keyring/cryptoKeys/bucket
[admin:10-138-10-66]: cloud:gcp_configuration:encryption_keys> se_image_kms_key_id projects/kms-project/locations/us-central1/keyRings/keyring/cryptoKeys/se-image
[admin:10-138-10-66]: cloud:gcp_configuration:encryption_keys> gcs_objects_kms_key_id projects/kms-project/locations/us-central1/keyRings/keyring/cryptoKeys/se-raw
[admin:10-138-10-66]: cloud:gcp_configuration:encryption_keys> save
save[admin:10-138-10-66]: cloud:gcp_configuration> save
[admin:10-138-10-66]: cloud> save
+------------------------------+----------------------------------------+
| Field                        | Value                                  |
+------------------------------+----------------------------------------+
| uuid                         | cloud-d4513a65-0907-4f67-b75f-bb47a6990423                                                            |
| name                         | gcp-cloud                              |
| vtype                        | CLOUD_GCP                              |
| apic_mode                    | False                                  |
| gcp_configuration            |                                        |
|   cloud_credentials_ref      | gcp-creds                              |
|   region_name                | us-central1                            |
|   zones[1]                   | us-central1-a                          |
|   zones[2]                   | us-central1-b                          |
|   se_project_id              | development-237409                     |
|   network_config             |                                        |
|     config                   | INBAND_MANAGEMENT                      |
|     inband                   |                                        |
|       vpc_subnet_name        | subnet-1                               |
|       vpc_project_id         | net-project                            |
|       vpc_network_name       | net-1                                  |
|   vip_allocation_strategy    |                                        |
|     mode                     | ROUTES                                 |
|     routes                   |                                        |
|       match_se_group_subnet  | False                                  |
|   encryption_keys            |                                        |
|     se_image_kms_key_id      | projects/kms-project/locations/us-central1/keyRings/keyring/cryptoKeys/se-image                           |
|     se_disk_kms_key_id       | projects/kms-project/locations/us-central1/keyRings/keyring/cryptoKeys/se-disk                            |
|     gcs_bucket_kms_key_id    | projects/kms-project/locations/us-central1/keyRings/keyring/cryptoKeys/bucket                             |
|     gcs_objects_kms_key_id   | projects/kms-project/locations/us-central1/keyRings/keyring/cryptoKeys/se-raw                             |
| dhcp_enabled                 | True                                   |
| mtu                          | 1500 bytes                             |
| prefer_static_routes         | False                                  |
| enable_vip_static_routes     | False                                  |
| license_type                 | LIC_CORES                              |
| ipam_provider_ref            | ipam-gcp-cloud       		        |
| state_based_dns_registration | True                                   |
| ip6_autocfg_enabled          | False                                  |
| dns_resolution_on_se         | False                                  |
| enable_vip_on_all_interfaces | False                                  |
| tenant_ref                   | admin                                  |
| license_tier                 | ENTERPRISE_18                          |
| autoscale_polling_interval   | 60 seconds                             |
+------------------------------+----------------------------------------+
}

修改加密选项

对于已创建的云,您可以修改加密选项。修改包括:

  1. 启用/禁用加密

  2. 更改用于加密的密钥

仅当尚未为 GCP 云创建任何 SE 时,才能更新 SE 磁盘加密密钥。

其他加密密钥可随时更改。更新 SE 映像加密密钥后,将使用新的加密密钥在 GCP 中重新创建 SE 映像。

注:
  1. 密钥必须采用 URI 格式。

  2. 仅当尚未创建任何 SE 时,才允许修改 SE 磁盘加密密钥。

  3. 必须检查密钥区域。密钥必须与 SE 位于同一区域或是全局性的。您可以从 GCP 控制台的磁盘加密密钥字段中复制密钥 ID。

其他参考资料