您可以安全地加密客户端应用与 Memorystore for Valkey 之间传输的所有数据。这是传输加密。通过使用传输加密,所有 Valkey 流量都通过传输层安全 (TLS) 协议进行加密。这样可确保在应用与 Memorystore for Valkey 之间传输的所有数据保持机密且未被篡改。
启用传输加密后,Valkey 客户端仅通过安全连接进行通信。未配置 TLS 的 Valkey 客户端会被屏蔽。如果您选择使用传输加密,则需要负责确保您的 Valkey 客户端能够使用 TLS 协议。
使用传输加密的实例具有证书授权机构 (CA)。您可以使用 CA 对实例中机器的证书进行身份验证。
您可以使用的 CA 模式之一是客户管理的 CA。您可以为 Memorystore for Valkey 实例使用客户管理的 CA。如果出于合规性考虑需要自行管理 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,工作流如下所示:
- 创建 CA 池。您必须先在 CA Service 中创建 CA 池,然后才能将实例配置为使用客户管理的 CA。此池必须与您的实例位于同一区域。
- 在 CA 池中创建 CA。创建 CA 池后,您必须使用 CA Service 在该池中创建至少一个 CA。
- 向 Memorystore for Valkey 服务账号委托权限,以使用您创建的 CA 池中的 CA 颁发服务器证书。
- 创建实例以使用客户管理的 CA。
创建 CA 池
您可以使用 CA Service 在计划创建 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 Service 中创建从属 CA,请按照创建从属 CA 中的说明操作。
如需从外部根 CA 创建从属 CA,请按照从外部 CA 创建从属 CA 中的说明操作。
为服务账号提供对 CA 池的访问权限
为确保 Memorystore for Valkey 服务账号具有为实例请求证书并签名的权限,请向服务账号授予您创建的 CA 池的 roles/privateca.certificateRequester 角色。
此服务账号格式如下:
service-PROJECT_NUMBER@cloud-memorystore.。将 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-nanostandard-smallhighmem-mediumhighmem-xlarge
SHARD_COUNT:实例中的分片数量。分片数决定了用于存储实例数据的总内存容量。如需详细了解实例规范,请参阅实例和节点规范。
ENGINE_VERSION:实例的版本。此参数接受的值包括
VALKEY_7_2、VALKEY_8_0、VALKEY_9_0和VALKEY_9_1(预览版)。如果您未指定值,则默认值为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_1 \
--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 池的 Google Cloud 项目中超出了 CA Service 的配额。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 模式。这些 CA 模式不使用 server_ca_pool 参数。 |
除非 CA 模式为客户管理的模式,否则您无法使用此参数。 |