您可以安全地加密客户端应用与 Memorystore for Redis Cluster 之间传输的所有数据。这称为“传输加密” 。通过使用传输 加密,所有 Redis 流量都会通过 传输层安全 (TLS) 协议进行加密。这样可确保应用与 Memorystore for Redis Cluster 之间传输的所有数据保持机密性且未被篡改。
启用传输加密后,Redis 客户端仅通过安全连接进行通信。未针对 TLS 配置的 Redis 客户端会被屏蔽。如果您选择使用传输加密,则需要负责确保您的 Redis 客户端可以使用 TLS 协议。
使用传输加密的集群具有证书授权机构 (CA)。您可以使用 CA 对集群中机器的证书进行身份验证。
您可以使用的一种 CA 模式是客户管理的 CA。您可以将客户管理的 CA 用于 Memorystore for Redis Cluster 中的集群。如果您出于合规性原因需要管理自己的 CA,则可以使用此 CA 模式。 在使用此模式时,您必须设置自己的 CA 池,该池托管在 Certificate Authority Service上。
您必须先使用 CA Service 在与集群相同的区域中创建一个 CA 池,并在该池中创建至少一个 CA,然后才能将集群配置为使用客户管理的 CA。CA 可以是根 CA或从属 CA。 您还可以在 CA Service 中创建从属 CA,然后将该从属 CA 链接到外部根 CA。
创建集群时,您需要指定 CA 池。作为此配置的一部分,特定于项目的 Memorystore for Redis Cluster 服务帐号具有使用 CA 池的权限。服务帐号从该池中请求 CA,Memorystore for Redis Cluster 使用该 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 Redis Cluster 服务账号授予相应权限,以使用您创建的 CA 池中的 CA 颁发服务器证书 。
- 创建一个集群以使用 客户管理的 CA。
创建 CA 池
您可以在计划在 Memorystore for Redis Cluster 中创建集群的同一项目中创建 CA 池,也可以在其他项目中创建 CA 池。但是,如果您在其他项目中创建 CA 池,VPC Service Controls 可能会根据组织政策阻止您创建任何集群。如需解决此问题,请确保托管 CA 池和 CA 的项目以及托管 Memorystore for Redis Cluster 的项目属于同一服务边界。 如需了解详情,请参阅服务边界详情和配置以及管理服务边界。
如需创建 CA 池,请按照 创建 CA 池中的说明操作。 您可以接受 CA 池的默认值,并使用以下必需的配置设置:
- 在您计划创建集群的同一区域中创建 CA 池。 如需查看 Memorystore for Redis Cluster 支持的区域列表, 请参阅 Memorystore for Redis Cluster 位置。
- 允许基于配置的证书请求。
- 允许在主题备用名称 (SAN) 中使用 DNS 名称。配置 CA 池的身份限制条件时,请勿对 DNS 名称格式设置任何限制,这些限制可能会与 Memorystore for Redis Cluster 添加到 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 Redis Cluster 服务帐号具有为集群请求证书并签名的权限,请向服务帐号授予您创建的证书授权机构 (CA) 池的 roles/privateca.certificateRequester 角色。
此服务帐号格式如下:
service-PROJECT_NUMBER@cloud-redis.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 Redis Cluster 服务帐号的名称。此服务帐号的项目编号与和 PROJECT_ID关联的项目编号相同。
创建使用客户管理的 CA 的集群
控制台
按照创建实例中的步骤操作。
gcloud
如需创建使用客户管理的 CA 的集群,请使用 gcloud redis clusters create 命令。
gcloud redis clusters create CLUSTER_ID \ --region=REGION_ID \ --network=NETWORK \ --replica-count=REPLICA_COUNT \ --node-type=NODE_TYPE \ --shard-count=SHARD_COUNT \ --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"
进行以下替换:
CLUSTER_ID:您要创建的集群的 ID。集群 ID 必须包含 1 到 63 个字符,并且只能使用小写字母、数字或连字符。它必须以小写字母开头,并以小写字母或数字结尾。
REGION_ID:您希望集群所在的区域。 您必须在创建的 CA 池 所在的区域中创建集群。
NETWORK:您用于创建集群的网络。它必须 使用以下格式:
projects/NETWORK_PROJECT_ID/global/networks/NETWORK_ID。您使用的网络 ID 必须与服务连接政策使用的网络 ID 相符。否则,您将无法创建集群。REPLICA_COUNT:副本数(每个分片)。接受的值为
0-5。NODE_TYPE:节点类型。接受的值包括:
redis-shared-core-nanoredis-standard-smallredis-highmem-mediumredis-highmem-xlarge
SHARD_COUNT:集群中的分片数。分片数决定了用于存储集群数据的总内存容量。如需详细了解集群规范,请参阅集群和节点规范。
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 redis clusters create my-cluster \ --region=us-central1 \ --network=projects/my-network-project/global/networks/default \ --replica-count=1 \ --node-type=redis-highmem-medium \ --shard-count=3 \ --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 Redis Cluster 每周执行一次服务器端证书轮替之外,您还可以按需轮替证书。
gcloud
如需轮替集群中所有机器的服务器证书,请使用
gcloud redis clusters update
命令。
gcloud redis clusters update CLUSTER_ID \ --region=REGION_ID \ --rotate-server-certificate
进行以下替换:
- CLUSTER_ID:包含您要轮替服务器证书的机器的集群的 ID
- REGION_ID:集群所在的区域
例如:
gcloud redis clusters update my-cluster \ --region=us-central1 \ --rotate-server-certificate
限制
将客户管理的 CA 与 Memorystore for Redis Cluster 搭配使用时,存在以下限制:
- 为集群配置客户管理的 CA 后,您无法修改配置。例如,您无法更改集群的 CA 池的 ID。
- 请勿删除客户管理的 CA 池或撤消与 CA 关联的服务帐号权限。否则,服务器证书将无法轮替并会过期。因此,您的客户端应用将无法连接到集群。
问题排查
本部分列出了您在使用客户管理的 CA 时可能会收到的错误消息,并提供了排查这些消息的提示。
| 错误消息 | 原因 | 问题排查 |
|---|---|---|
FAILED_PRECONDITION: GetClusterCertificateAuthority not
supported for customer-managed CAs |
如果您使用客户管理的 CA,则无法使用 Memorystore for Redis Cluster 检索 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 Redis Cluster 服务帐号没有
roles/privateca.certificateRequester 角色,无法访问 CA 池。因此,Memorystore for Redis Cluster 无法生成服务器证书。 |
将 roles/privateca.certificateRequester 角色授予
服务帐号。如需了解详情,请参阅为服务帐号
授予对 CA 池的访问权限。 |
Resource {CA pool ID} not found. |
Memorystore for Redis Cluster 找不到您在尝试创建集群时指定的 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 Redis Cluster 无法为集群生成服务器证书。 | 确保您在 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 Redis Cluster 无法执行需要此服务的操作。 | 检查项目中 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 模式是 客户管理的,否则您无法使用此参数。 |