使用客戶管理的憑證授權單位 (CA) 保護資料安全

您可以安全地加密用戶端應用程式與 Memorystore for Redis Cluster 之間的所有資料。這就是傳輸加密。使用傳輸中加密功能後,所有 Redis 流量都會透過傳輸層安全標準 (TLS) 通訊協定加密。這可確保應用程式與 Memorystore for Redis Cluster 之間的所有資料傳輸作業,都維持機密且未遭竄改。

啟用傳輸中資料加密功能後,Redis 用戶端僅會透過安全連線進行通訊。系統會封鎖未設定 TLS 的 Redis 用戶端。如果您選擇使用傳輸中加密,則必須確保 Redis 用戶端可以使用 TLS 通訊協定。

使用傳輸中加密的叢集會具備憑證授權單位 (CA)。您可以使用 CA 驗證叢集中機器的憑證。

您可以使用的 CA 模式之一是客戶管理的 CA。您可以在 Memorystore for Redis Cluster 中,為叢集使用客戶管理的 CA。如果基於法規遵循需求,您需要管理自己的 CA,則可使用這個 CA 模式。使用這個模式時,您必須設定自己的 CA 集區,並託管於憑證授權單位服務

如要設定叢集使用客戶管理的 CA,您必須先在與叢集相同的區域中建立 CA 集區,並使用 CA 服務在該集區中建立至少一個 CA。CA 可以是根 CA從屬 CA。您也可以在 CA 服務中建立從屬 CA,然後將從屬 CA 鏈結至外部根 CA。

建立叢集時,請指定 CA 集區。在這個設定中,專案專屬的 Memorystore for Redis Cluster 服務帳戶具有使用 CA 集區的權限。服務帳戶會向集區要求 CA,而 Memorystore for Redis Cluster 會使用該 CA 簽署叢集的伺服器憑證。

事前準備

使用客戶管理的 CA 模式前,請確認符合下列規定。

必要的角色

如要取得建立 CA 集區和 CA 所需的權限,請要求管理員授予 CA 服務的 CA 服務作業管理員 (roles/privateca.caManager) IAM 角色。

您或許也能透過自訂角色或其他預先定義的角色,取得必要權限。如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和機構的存取權」。

使用客戶自行管理 CA 的工作流程

如要使用客戶管理的 CA,請按照下列工作流程操作:

  1. 建立 CA 集區。如要將叢集設定為使用客戶管理的 CA,您必須先在 CA 服務中建立 CA 集區。這個集區必須與叢集位於相同區域。
  2. 在 CA 集區中建立 CA。建立 CA 集區後,您必須使用 CA 服務在集區中建立至少一個 CA。
  3. 將權限委派給 Memorystore for Redis Cluster 服務帳戶,以便使用您建立的 CA 集區中的 CA 核發伺服器憑證。
  4. 建立叢集,以便使用客戶管理的 CA。

建立憑證授權單位集區

您可以在 CA 服務中建立 CA 集區,並將其放在與 Memorystore for Redis Cluster 叢集相同的專案中,也可以將 CA 集區放在其他專案中。不過,如果您在其他專案中建立 CA 集區,VPC Service Controls 可能會根據組織政策,禁止您建立任何叢集。如要修正問題,請確認代管 CA 集區和 CA 的專案,以及代管 Memorystore for Redis Cluster 的專案,都屬於相同 service perimeter。詳情請參閱「Service perimeter 詳細資料和設定」和「管理 service perimeter」。

如要建立 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 集區存取權

為確保 Memorystore for Redis Cluster 服務帳戶有權為叢集要求及簽署憑證,請將 roles/privateca.certificateRequester 角色授予您建立的 CA 集區服務帳戶。

這個服務帳戶的格式如下:
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:副本數量 (每個分片)。可接受的值為 05

  • NODE_TYPE:節點類型。可接受的值如下:

    • redis-shared-core-nano
    • redis-standard-small
    • redis-highmem-medium
    • redis-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 服務。
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 服務帳戶沒有 CA 集區的 roles/privateca.certificateRequester 角色。因此,Memorystore for Redis Cluster 無法產生伺服器憑證。 roles/privateca.certificateRequester 角色指派給服務帳戶。詳情請參閱「授予服務帳戶 CA 集區存取權」。
Resource {CA pool ID} not found. 嘗試建立叢集時,Memorystore for Redis Cluster 找不到您指定的 CA 集區。 檢查專案 ID、位置和 CA 集區名稱。
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 集區所在 Google Cloud 專案的 CA 服務配額。Memorystore for Redis Cluster 無法執行需要這項服務的作業。 查看專案中憑證授權單位服務的配額。詳情請參閱「配額與限制」。
server_ca_pool must be provided when server_ca_mode is SERVER_CA_MODE_CUSTOMER_MANAGED_CAS_CA. 您嘗試建立的叢集使用客戶管理的 CA 模式。但您未提供 CA 集區的相關資訊。 指定專案 ID、位置和 CA 集區名稱。
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 模式為客戶自行管理,否則無法使用這個參數。