本页面适用于 Apigee,但不适用于 Apigee Hybrid。
查看 Apigee Edge 文档。
本部分介绍加密密钥的类型以及如何创建加密密钥。
在 Apigee 设置过程中,您需生成以下 Cloud Key Management Service 加密密钥:
密钥类型 | 创建时间 | 说明 |
---|---|---|
控制平面加密密钥 |
Google Cloud 控制台: 命令行界面 (CLI): |
使用数据驻留时,Apigee 会使用此密钥对租户项目的 BigQuery 中存储的 Analytics 数据进行加密。 加密 API 代理、目标服务器、truststore 和密钥库、分析数据,以及跨运行时共享的任何其他内容。 Apigee 会要求您提供两个控制平面 CMEK 密钥。 此密钥和一个 API 使用方数据加密密钥。 控制平面加密密钥的位置应与控制平面位置一致。 |
API 使用方数据加密密钥 |
Google Cloud 控制台: 命令行界面 (CLI): |
使用数据驻留时,除了控制平面加密密钥之外,Apigee 还需要单区域密钥,以用于仅在单个区域提供的服务。例如,Dataflow 和 Cloud SQL。 API 使用方数据加密密钥的位置应在控制平面位置内。 |
运行时数据库加密密钥 |
Google Cloud 控制台: 命令行界面 (CLI): |
加密应用数据(如 KVM、缓存和客户端密钥),然后将其存储在数据库中。 每个组织都有一个运行时数据库加密密钥 - 组织中的所有实例/区域共享相同的运行时数据库加密密钥。
运行时数据库加密密钥支持所有支持 Cloud HSM 和 Cloud EKM 的 Cloud KMS 位置。创建此密钥时,Google 建议您使用多区域位置(例如 使用数据驻留时,运行时数据库加密密钥的位置应在控制平面位置内。 |
磁盘加密密钥 |
Google Cloud 控制台: 命令行界面 (CLI): |
在将运行时实例数据写入磁盘之前对其进行加密。 已加密的数据类型包括密钥管理系统 (KMS);键值对映射 (KVM);配额定义、存储桶和计数器;以及所有已缓存的数据。KMS 数据包括 API 产品、开发者、开发者应用、OAuth 令牌(包括访问令牌、刷新令牌和授权代码)和 API 密钥。 此密钥与运行时实例位于同一区域;创建新密钥时,请将密钥的位置与运行时实例的位置保持一致。 每个实例/区域组合都有自己的磁盘加密密钥。 |
要点
创建磁盘和运行时数据库加密密钥时,请注意以下事项:
- Apigee 运行时数据库加密密钥的位置支持所有支持 Cloud HSM 和 Cloud EKM 的 Cloud KMS 位置。
- 磁盘加密密钥的位置必须与使用该密钥的运行时实例的位置一致。
- 这两个密钥的位置一经设置便无法更改。
- 所有密钥都必须位于密钥环中。
- 不同类型的密钥必须位于不同的密钥环中;磁盘加密密钥不能与运行时数据库加密密钥位于同一密钥环中。
-
密钥必须具有一个
purpose
。如果您要使用命令行生成新密钥,请将purpose
设置为encryption
。如果您使用 Google Cloud 控制台,请选择对称加密/解密来实现此目的。 - 这些密钥由密钥路径定义,该路径使用以下格式:
projects/PROJECT_ID/locations/KEY_LOCATION/keyRings/KEYRING_NAME/cryptoKeys/KEY_NAME
列出现有密钥
如果您已经为 Apigee 创建新的 Cloud KMS 加密密钥,则可以在设置期间使用这些密钥,而无需创建新密钥。
如需列出密钥环中的所有 KMS 密钥,请执行以下操作:
执行 gcloud kms keys list
命令:
gcloud kms keys list --keyring KEY_RING_NAME --location KEY_RING_LOCATION
替换以下内容:
-
KEY_RING_NAME:密钥环的名称。例如
my-key-ring
。 -
KEY_RING_LOCATION:密钥环的物理位置,例如
us-west1
。
或者,您可以在 Google Cloud 控制台中查看密钥。
在命令行中生成新密钥
您可以在命令行或 Google Cloud 控制台中创建密钥环和密钥。
每种类型的密钥都必须有自己的密钥环。例如,磁盘加密密钥可以存储在一个密钥环中,但您的运行时数据库加密密钥必须存储在单独的密钥环中。
以下步骤介绍了如何创建密钥环和密钥,以及如何授予 Apigee Service Agent 使用新密钥的访问权限。为控制平面(如果使用数据驻留)、运行时数据库和运行时磁盘创建密钥环和密钥。
-
使用
gcloud kms keyrings create
命令创建新的密钥环:控制平面
启用数据驻留后,为控制平面创建一个密钥环,然后为使用方数据区域创建另一个密钥环。
gcloud kms keyrings create CONTROL_PLANE_KEY_RING_NAME \ --location CONTROL_PLANE_LOCATION \ --project PROJECT_ID
gcloud kms keyrings create CONSUMER_DATA_KEY_RING_NAME \ --location CONSUMER_DATA_REGION \ --project PROJECT_ID
替换以下内容:
- CONTROL_PLANE_KEY_RING_NAME:控制平面密钥环名称。
- CONTROL_PLANE_LOCATION:将存储 Apigee 控制平面数据的物理位置。
- PROJECT_ID:Google Cloud 项目 ID。
- CONSUMER_DATA_KEY_RING_NAME:使用方数据密钥环名称。
- CONSUMER_DATA_REGION:控制平面区域的子区域。您必须同时指定 CONTROL_PLANE_LOCATION 和 CONSUMER_DATA_REGION。
运行时数据库
gcloud kms keyrings create RUNTIMEDB_KEY_RING_NAME \ --location RUNTIMEDB_KEY_LOCATION \ --project PROJECT_ID
替换以下内容:
- RUNTIMEDB_KEY_RING_NAME:您要创建的数据库密钥环的名称。
- RUNTIMEDB_KEY_LOCATION:数据库密钥环的物理位置。
- PROJECT_ID:Google Cloud 项目 ID。
运行时磁盘
gcloud kms keyrings create RUNTIMEDISK_KEY_RING_NAME \ --location RUNTIMEDISK_KEY_LOCATION \ --project PROJECT_ID
替换以下内容:
- RUNTIMEDISK_KEY_RING_NAME:您要创建的磁盘密钥环的名称。
- RUNTIMEDISK_KEY_LOCATION:磁盘密钥环的物理位置。
- PROJECT_ID:Google Cloud 项目 ID。
验证磁盘密钥环是否设置为与实例相同的位置。每个实例和密钥环都应该有自己的位置。
gcloud kms keyrings list \ --location \ --project $PROJECT_ID
gcloud kms keyrings describe $DISK_KEY_RING_NAME \ --location \ --project $PROJECT_ID
-
使用
kms keys create
命令创建密钥:控制平面
启用数据驻留后,为控制平面创建一个密钥环,然后为使用方数据区域创建另一个密钥环。
gcloud kms keys create CONTROL_PLANE_KEY_NAME \ --keyring CONTROL_PLANE_KEY_RING_NAME \ --location CONTROL_PLANE_LOCATION \ --purpose "encryption" \ --project PROJECT_ID
gcloud kms keys create CONSUMER_DATA_KEY_NAME \ --keyring CONSUMER_DATA_KEY_RING_NAME \ --location CONSUMER_DATA_REGION \ --purpose "encryption" \ --project PROJECT_ID
替换以下内容:
- CONTROL_PLANE_KEY_NAME:控制平面密钥名称。
- CONTROL_PLANE_KEY_RING_NAME:控制平面密钥环名称。
- CONTROL_PLANE_LOCATION:将存储 Apigee 控制平面数据的物理位置。
- PROJECT_ID:Google Cloud 项目 ID。
- CONSUMER_DATA_KEY_NAME:使用方数据密钥名称。
- CONSUMER_DATA_KEY_RING_NAME:使用方数据密钥环名称。
- CONSUMER_DATA_REGION:控制平面区域的子区域。您必须同时指定 CONTROL_PLANE_LOCATION 和 CONSUMER_DATA_REGION。
运行时数据库
gcloud kms keys create RUNTIMEDB_KEY_NAME \ --keyring RUNTIMEDB_KEY_RING_NAME \ --location RUNTIMEDB_KEY_LOCATION \ --purpose "encryption" \ --project PROJECT_ID
替换以下内容:
- RUNTIMEDB_KEY_NAME:您要创建的数据库密钥的名称。
- RUNTIMEDB_KEY_RING_NAME:您要创建的数据库密钥环的名称。
- RUNTIMEDB_KEY_LOCATION:数据库密钥环的物理位置。
- PROJECT_ID:Google Cloud 项目 ID。
运行时磁盘
gcloud kms keys create RUNTIMEDISK_KEY_NAME \ --keyring RUNTIMEDISK_KEY_RING_NAME \ --location RUNTIMEDISK_KEY_LOCATION \ --purpose "encryption" \ --project PROJECT_ID
替换以下内容:
- RUNTIMEDISK_KEY_NAME:您要创建的磁盘密钥的名称。
- RUNTIMEDISK_KEY_RING_NAME:您要创建的磁盘密钥环的名称。
- RUNTIMEDISK_KEY_LOCATION:磁盘密钥环的物理位置。
- PROJECT_ID:Google Cloud 项目 ID。
此命令会创建密钥并将其添加到密钥环中。
在引用密钥时,请使用密钥 ID。
-
使用
gcloud kms keys add-iam-policy-binding
命令向 Apigee Service Agent 授予使用新密钥的权限:控制平面
启用数据驻留后,为控制平面创建一个密钥环,然后为使用方数据区域创建另一个密钥环。
gcloud kms keys add-iam-policy-binding CONTROL_PLANE_KEY_NAME \ --location CONTROL_PLANE_LOCATION \ --keyring CONTROL_PLANE_KEY_RING_NAME \ --member "serviceAccount:service-PROJECT_NUMBER@gcp-sa-apigee.iam.gserviceaccount.com" \ --role roles/cloudkms.cryptoKeyEncrypterDecrypter \ --project PROJECT_ID
gcloud kms keys add-iam-policy-binding CONSUMER_DATA_KEY_NAME \ --location CONSUMER_DATA_REGION \ --keyring CONSUMER_DATA_KEY_RING_NAME \ --member "serviceAccount:service-PROJECT_NUMBER@gcp-sa-apigee.iam.gserviceaccount.com" \ --role roles/cloudkms.cryptoKeyEncrypterDecrypter \ --project PROJECT_ID
替换以下内容:
- CONTROL_PLANE_KEY_NAME:控制平面密钥名称。
- CONTROL_PLANE_LOCATION:将存储 Apigee 控制平面数据的物理位置。
- CONTROL_PLANE_KEY_RING_NAME:控制平面密钥环名称。
- PROJECT_NUMBER:Google Cloud 项目编号。
- PROJECT_ID:Google Cloud 项目 ID。
- CONSUMER_DATA_KEY_NAME:使用方数据密钥名称。
- CONSUMER_DATA_REGION:控制平面区域的子区域。您必须同时指定 CONTROL_PLANE_LOCATION 和 CONSUMER_DATA_REGION。
- CONSUMER_DATA_KEY_RING_NAME:使用方数据密钥环名称。
运行时数据库
gcloud kms keys add-iam-policy-binding RUNTIMEDB_KEY_NAME \ --location RUNTIMEDB_KEY_LOCATION \ --keyring RUNTIMEDB_KEY_RING_NAME \ --member serviceAccount:service-PROJECT_NUMBER@gcp-sa-apigee.iam.gserviceaccount.com \ --role roles/cloudkms.cryptoKeyEncrypterDecrypter \ --project PROJECT_ID
替换以下内容:
- RUNTIMEDB_KEY_NAME:您要创建的数据库密钥的名称。
- RUNTIMEDB_KEY_RING_NAME:您要创建的数据库密钥环的名称。
- RUNTIMEDB_KEY_LOCATION:数据库密钥环的物理位置。
- PROJECT_NUMBER:Google Cloud 项目编号。
- PROJECT_ID:Google Cloud 项目 ID。
运行时磁盘
gcloud kms keys add-iam-policy-binding RUNTIMEDISK_KEY_NAME \ --location RUNTIMEDISK_KEY_LOCATION \ --keyring RUNTIMEDISK_KEY_RING_NAME \ --member serviceAccount:service-PROJECT_NUMBER@gcp-sa-apigee.iam.gserviceaccount.com \ --role roles/cloudkms.cryptoKeyEncrypterDecrypter \ --project PROJECT_ID
替换以下内容:
- RUNTIMEDISK_KEY_NAME:您要创建的磁盘密钥的名称。
- RUNTIMEDISK_KEY_RING_NAME:您要创建的磁盘密钥环的名称。
- RUNTIMEDISK_KEY_LOCATION:磁盘密钥环的物理位置。
- PROJECT_NUMBER:Google Cloud 项目编号。
- PROJECT_ID:Google Cloud 项目 ID。
此命令将密钥绑定到 Apigee Service Agent。
成功完成此请求后,
gcloud
的响应将如下所示:Updated IAM policy for key [runtime]. bindings: - members: - serviceAccount:service-1234567890@gcp-sa-apigee.iam.gserviceaccount.com role: roles/cloudkms.cryptoKeyEncrypterDecrypter etag: BwWqgEuCuwk= version: 1
如果您收到如下错误:
INVALID_ARGUMENT: Role roles/cloudkms.cryptokms.cryptoKeyEncrypterDecrypter is not supported for this resource.
请务必使用项目编号,而不是服务账号电子邮件地址中的项目名称。
如需验证密钥是否绑定到 Apigee Service Agent,请执行以下操作:
gcloud kms keys get-iam-policy $DISK_KEY_NAME \ --keyring $DISK_KEY_RING_NAME \ --location \ --project $PROJECT_ID
gcloud kms keys describe $DISK_KEY_NAME \ --keyring $DISK_KEY_RING_NAME \ --location \ --project $PROJECT_ID
密钥环的名称在您的组织中必须是唯一的。如果您创建了其他区域,这些区域的密钥环名称不能与现有密钥环名称相同。
使用 Google Cloud 控制台生成新密钥
您可以按照创建对称加密密钥所述,使用控制台生成新密钥。
使用控制台创建新密钥时:
- 对于运行时数据库加密密钥,请将位置设置为支持 Cloud HSM 和 Cloud EKM 的任何 Cloud KMS 位置。界面不允许您为该密钥选择任何其他位置,因此其会匹配您在密钥环中选择的内容。
- 创建密钥后,通过点击该密钥旁边的 更多,然后选择复制资源名称,在加密密钥窗格中获取密钥路径。
获取密钥 ID
使用 Cloud KMS API 或 Google Cloud CLI 引用 Cloud Key Management Service 资源时,请使用资源 ID。您可以使用 gcloud kms keys list
命令获取密钥 ID:
控制平面
启用数据驻留后,控制平面有一个密钥环,使用方数据区域有另一个密钥环。
gcloud kms keys list \ --location=CONTROL_PLANE_LOCATION \ --keyring=CONTROL_PLANE_KEY_RING_NAME \ --project=PROJECT_ID
gcloud kms keys list \ --location=CONSUMER_DATA_REGION \ --keyring=CONSUMER_DATA_KEY_RING_NAME \ --project=PROJECT_ID
密钥 ID 的语法如下所示(类似于文件路径):
projects/PROJECT_ID/locations/CONTROL_PLANE_LOCATION/keyRings/CONTROL_PLANE_KEY_RING_NAME/cryptoKeys/CONTROL_PLANE_KEY_NAME
运行时数据库
gcloud kms keys list \ --location=RUNTIMEDB_KEY_LOCATION \ --keyring=RUNTIMEDB_KEY_RING_NAME \ --project=PROJECT_ID
密钥 ID 的语法如下所示(类似于文件路径):
projects/PROJECT_ID/locations/RUNTIMEDB_KEY_LOCATION/keyRings/RUNTIMEDB_KEY_RING_NAME/cryptoKeys/RUNTIMEDB_KEY_NAME
运行时磁盘
gcloud kms keys list \ --location=RUNTIMEDISK_KEY_LOCATION \ --keyring=RUNTIMEDISK_KEY_RING_NAME \ --project=PROJECT_ID
密钥 ID 的语法如下所示(类似于文件路径):
projects/PROJECT_ID/locations/RUNTIMEDISK_KEY_LOCATION/keyRings/RUNTIMEDISK_KEY_RING_NAME/cryptoKeys/RUNTIMEDISK_KEY_NAME
例如:
NAME: projects/my-project/locations/us-west1/keyRings/my-key-ring/cryptoKeys/my-key PURPOSE: ENCRYPT_DECRYPT ALGORITHM: GOOGLE_SYMMETRIC_ENCRYPTION PROTECTION_LEVEL: SOFTWARE LABELS: PRIMARY_ID: 1 PRIMARY_STATE: ENABLED
您还可以在 Google Cloud 控制台中获取密钥 ID。如需了解详情,请参阅获取 Cloud KMS 资源 ID。