使用客户管理的证书授权机构 (CA) 保护数据安全

您可以安全地加密客户端应用与 Memorystore for Valkey 之间传输的所有数据。这称为“传输加密”。 通过使用传输中 加密,所有 Valkey 数据流量都会通过传输层安全协议 (TLS) 协议进行加密。这样可确保应用与 Memorystore for Valkey 之间传输的所有数据都保持机密且未被篡改。

启用传输加密后,Valkey 客户端仅通过安全连接进行通信。未针对 TLS 配置的 Valkey 客户端会被屏蔽。如果您选择使用传输加密,则需要负责确保您的 Valkey 客户端可以使用 TLS 协议。

使用传输加密的实例具有证书授权机构 (CA)。您可以使用 CA 对实例中机器的证书进行身份验证。

您可以使用的一种 CA 模式是客户管理的 CA。您可以为 Memorystore for Valkey 实例使用客户管理的 CA。如果出于合规性考虑需要自行管理 CA,则可以使用此 CA 模式。在使用此模式时,您必须设置自己的 CA 池,该池托管在 Certificate Authority Service上。

您必须先使用 CA Service 在与实例相同的区域中创建一个 CA 池,并在该池中创建至少一个 CA,然后才能将实例配置为使用客户管理的 CA。CA 可以是根 CA从属 CA。 您还可以在 CA Service 中创建从属 CA,然后将该从属 CA 链接到外部根 CA。

创建实例时,您需要指定 CA 池。在此配置过程中,项目特有的 Memorystore for Valkey 服务帐号具有使用 CA 池的权限。服务帐号从该池中请求 CA,Memorystore for Valkey 使用该 CA 为实例的服务器证书签名。

准备工作

在使用客户管理的 CA 模式之前,请确保满足以下要求。

所需的角色

如需获得创建证书授权机构 (CA) 池和证书授权机构 (CA) 所需的权限,请让您的管理员为您授予 CA Service 的 CA Service Operation Manager (roles/privateca.caManager) IAM 角色。

您也可以通过自定义角色 或其他预定义角色来获取所需的权限。如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

使用客户管理的 CA 的工作流

如需使用客户管理的 CA,工作流如下所示:

  1. 创建 CA 池。您必须先在 CA Service 中创建一个 CA 池,然后才能将实例配置为使用客户管理的 CA。此池必须与您的实例位于同一区域。
  2. 在 CA 池中创建 CA。创建 CA 池后,您必须使用 CA Service 在该池中创建至少一个 CA。
  3. 向 Memorystore for Valkey 服务账号委派权限,以使用您创建的 CA 池中的 CA 颁发服务器证书。
  4. 创建一个实例以使用 客户管理的 CA。

创建 CA 池

您可以在计划创建 Memorystore for Valkey 实例的同一项目中创建 CA 池,也可以在其他项目中创建 CA 池。但是,如果您在其他项目中创建证书授权机构 (CA) 池,VPC Service Controls 可能会根据组织政策阻止您创建任何实例。如需解决此问题,请确保托管 CA 池和 CA 的项目以及托管 Memorystore for Valkey 的项目属于同一服务边界。如需了解更多 信息,请参阅服务边界详情和配置以及管理服务边界

如需创建 CA 池,请按照 创建 CA 池中的说明操作。 您可以接受 CA 池的默认值,并使用以下必需的配置设置:

  • 在您计划创建 您的实例的同一区域中创建 CA 池。如需查看 Memorystore for Valkey 支持的区域列表, 请参阅 Memorystore for Valkey 位置
  • 允许基于配置的证书请求。
  • 允许在主题备用名称 (SAN) 中使用 DNS 名称。配置 CA 池的身份限制条件时,请勿对 DNS 名称格式设置任何限制,这些限制可能会与 Memorystore for Valkey 添加到 SAN 中的条目冲突。

在 CA 池中创建 CA

在您创建的 CA 池中至少创建一个 CA。

您可以创建根 CA 或从属 CA。

如需创建根 CA,请按照创建根 CA中的说明操作。您可以接受 CA 的默认值,但请确保以启用 状态创建 CA。

配置 CA 密钥大小和算法 时,您可以选择任意密钥 大小和算法。

如果您创建从属 CA,则需要先创建并配置根 CA。

为服务帐号提供对 CA 池的访问权限

为确保您的 Memorystore for Valkey 服务帐号具有为实例请求证书并签名的权限,请向服务帐号授予您创建的证书授权机构 (CA) 池的 roles/privateca.certificateRequester 角色。

此服务帐号的格式如下:
service-PROJECT_NUMBER@cloud-memorystore.iam.gserviceaccount.com. 将 PROJECT_NUMBER 替换为您的 项目编号 Google Cloud 。

gcloud

如需为服务帐号授予 CA 池的访问权限,请使用 gcloud privateca pools add-iam-policy-binding 命令。

gcloud privateca pools add-iam-policy-binding CA_POOL_ID \
--project=PROJECT_ID \
--location=REGION_ID \
--member serviceAccount:SERVICE_ACCOUNT_NAME \
--role=roles/privateca.certificateRequester

进行以下替换:

  • CA_POOL_ID:您创建的 CA 池的 ID。
  • PROJECT_ID:您要在其中创建实例的 Google Cloud 项目的 ID。
  • REGION_ID:CA 池所在的区域。
  • SERVICE_ACCOUNT_NAME:Memorystore for Valkey 服务帐号的名称。此服务帐号的项目编号与和 PROJECT_ID关联的项目编号相同。

创建使用客户管理的 CA 的实例

控制台

按照创建实例中的步骤操作。

gcloud

如需创建使用客户管理的 CA 的实例,请使用 gcloud memorystore instances create 命令。

gcloud memorystore instances create INSTANCE_ID \
--location=REGION_ID \
--endpoints='[{"connections": [{"pscAutoConnection": {"network": "projects/PROJECT_ID/global/networks/NETWORK_ID", "projectId": "PROJECT_ID"}}]}]' \
--replica-count=REPLICA_COUNT \
--node-type=NODE_TYPE \
--shard-count=SHARD_COUNT \
--engine-version=ENGINE_VERSION \
--mode=MODE \
--transit-encryption-mode=server-authentication \
--server-ca-mode=customer-managed-cas-ca \
--server-ca-pool="projects/CA_POOL_PROJECT_ID/locations/REGION_ID/caPools/CA_POOL_ID"

进行以下替换:

  • INSTANCE_ID:您要创建的实例的 ID。实例 ID 必须包含 1 到 63 个字符,并且只能使用小写字母、数字或连字符。它必须以小写字母开头,并以小写字母或数字结尾。

  • REGION_ID:您希望实例所在的区域。 您必须在创建的 CA 池 所在的区域中创建实例。

  • PROJECT_ID:您要在其中创建 实例的项目的 ID。

  • NETWORK_ID:您要用于创建 实例的网络的 ID。

  • REPLICA_COUNT:副本数(每个分片)。接受的值为 0-5

  • NODE_TYPE:节点类型。接受的值包括:

    • shared-core-nano
    • standard-small
    • highmem-medium
    • highmem-xlarge
  • SHARD_COUNT:实例中的分片数。分片数决定了用于存储实例数据的总内存容量。如需详细了解实例规范,请参阅实例和节点规范

  • ENGINE_VERSION:实例的版本。此参数接受的值为 VALKEY_7_2VALKEY_8_0VALKEY_9_0。如果您未指定值,则默认值为 VALKEY_9_0

  • MODE:确定实例是启用集群模式还是 停用集群模式。如果省略此字段,则实例默认启用集群模式。如需了解详情,请参阅启用和停用集群模式

  • CA_POOL_PROJECT_ID:您创建的 CA 池的 ID。

  • REGION_ID:CA 池所在的区域。您要创建的实例和 CA 池必须位于同一区域。

  • CA_POOL_ID:您创建的 CA 池的 ID。

server-ca-mode 参数表示实例的 CA 模式。对于 客户管理的 CA,customer-managed-cas-ca 是此参数的值。 如果您不使用此参数,则默认 CA 模式为每个实例。

例如:

gcloud memorystore instances create my-instance \
--location=us-central1 \
--endpoints='[{"connections": [{"pscAutoConnection": {"network": "projects/my-project/global/networks/my-network", "projectId": "my-project"}}]}] \
--replica-count=1 \
--node-type=highmem-medium \
--shard-count=3 \
--engine-version=VALKEY_9_0 \
--mode=CLUSTER \
--transit-encryption-mode=server-authentication \
--server-ca-mode=customer-managed-cas-ca \
--server-ca-pool="projects/my-CA-pool-project/locations/us-central1/caPools/my-CA-pool"

轮替实例的服务器证书

除了 Memorystore for Valkey 每周执行一次服务器端证书轮替之外,您还可以按需轮替证书。

gcloud

如需轮替实例中所有机器的服务器证书,请使用 gcloud memorystore instances update 命令。

gcloud memorystore instances update INSTANCE_ID \
--location=REGION_ID \
--rotate-server-certificate

进行以下替换:

  • INSTANCE_ID:包含您要为其轮替服务器证书的机器的实例的 ID
  • REGION_ID:实例所在的区域

例如:

gcloud memorystore instances update my-instance \
--location=us-central1 \
--rotate-server-certificate

限制

将客户管理的 CA 与 Memorystore for Valkey 搭配使用时,存在以下限制:

  • 为实例配置客户管理的 CA 后,您无法修改配置。例如,您无法更改实例的 CA 池的 ID。
  • 请勿删除客户管理的 CA 池或撤消与 CA 关联的服务帐号权限。否则,服务器证书将无法轮替并会过期。因此,您的客户端应用将无法连接到实例。

问题排查

本部分列出了您在使用客户管理的 CA 时可能会收到的错误消息,并提供了排查这些消息的提示。

错误消息 原因 问题排查
FAILED_PRECONDITION: GetClusterCertificateAuthority not supported for customer-managed CAs 如果您使用客户管理的 CA,则无法使用 Memorystore for Valkey 检索 CA 证书。 如需获取 客户管理的 CA 的 CA 证书,您必须使用 CA Service。
Server certificate rotation can only be triggered for customer-managed CAs. 您尝试轮替实例的服务器证书,但 实例的 CA 模式为每个实例或共享。 除非您为 实例使用的模式是客户管理的,否则无法轮替服务器证书。
Invalid format for server CA pool: {CA pool resource}. Expected projects/{project}/locations/{location}/caPools/{caPool}. 您用于创建实例的 CA 池的格式无效 。 对于 CA 池,请使用以下格式:
projects/CA_POOL_PROJECT_ID/locations/REGION_ID/ caPools/CA_POOL_ID
The instance/cluster's server CA pool must be in the same region as the instance/cluster. CA Pool region: {CA pool region}, Instance/cluster region: {cluster region}. 您尝试创建的实例与 CA 池位于不同的 区域。 确保您要创建的实例和 CA 池位于同一 区域。
Request is prohibited by organization's policy for CA Pool {CA pool ID}. 托管 CA 池的 Google Cloud 项目和托管实例的 项目不在同一服务边界内。 配置 VPC Service Controls,使项目属于同一服务 边界。
Permission privateca.certificates.create denied on {CA pool ID}. Make sure that you granted the roles/privateca.certificateRequester role to the service account {P4SA email}. Memorystore for Valkey 服务帐号没有 CA 池的 roles/privateca.certificateRequester 角色。因此,Memorystore for Valkey 无法生成服务器证书。 roles/privateca.certificateRequester 角色授予 服务帐号。如需了解详情,请参阅为服务帐号 授予对 CA 池的访问权限
Resource {CA pool ID} not found. Memorystore for Valkey 找不到您在尝试创建实例时指定的 CA 池。 检查 CA 池的项目 ID、位置和名称。
There are no enabled CAs in the CaPool {CA pool ID}. Please ensure that there is at least one enabled Certificate Authority to issue a certificate. CA 池中没有已启用的 CA。Memorystore for Valkey 无法为实例生成服务器证书。 确保您在 CA 池中创建至少一个 CA,并且该 CA 处于 启用 状态。
Quota exhausted for CA Service. Check quotas for the project hosting the CA Pool: {CA pool ID}. 您超出了托管 CA 池的项目中 CA Service 的配额。 Google Cloud Memorystore for Valkey 无法执行需要此服务的操作。 检查项目中 CA Service 的配额。如需了解详情,请参阅配额和限制
server_ca_pool must be provided when server_ca_mode is SERVER_CA_MODE_CUSTOMER_MANAGED_CAS_CA. 您尝试创建使用客户管理的 CA 模式的实例。但是,您未提供有关 CA 池的信息。 指定 CA 池的项目 ID、位置和名称。
server_ca_pool must not be provided when server_ca_mode is not SERVER_CA_MODE_CUSTOMER_MANAGED_CAS_CA. 您尝试创建使用每个实例或 共享 CA 模式的实例。这些 CA 模式不使用 server_ca_pool 参数。 除非 CA 模式是 客户管理的,否则您无法使用此参数。