顧客管理の認証局(CA)を使用してデータを保護する

クライアント アプリケーションと Memorystore for Redis Cluster 間で移動するすべてのデータを安全に暗号化できます。これは転送中の暗号化です。転送中の暗号化を使用すると、すべての Redis トラフィックが Transport Layer Security(TLS)プロトコルで暗号化されます。これにより、アプリケーションと Memorystore for Redis Cluster 間で移動するすべてのデータが機密性を維持し、改ざんされないようになります。

転送中の暗号化が有効になっている場合、Redis クライアントは安全な接続を介してのみ通信を行います。TLS 用に構成されていない Redis クライアントはブロックされます。転送中の暗号化を使用する場合は、Redis クライアントが TLS プロトコルを使用できることを確認する必要があります。

転送中の暗号化を使用するクラスタには、認証局(CA)があります。CA を使用して、クラスタ内のマシンの証明書を認証します。

使用できる CA モードの 1 つに、顧客管理の CA があります。Memorystore for Redis Cluster のクラスタには、顧客管理の CA を使用できます。コンプライアンス上の理由から独自の CA を管理する必要がある場合は、この CA モードを使用できます。このモードを使用するには、Certificate Authority Service でホストされている独自の CA プールを設定する必要があります。

顧客管理の CA を使用するようにクラスタを構成する前に、CA Service を使用して、クラスタと同じリージョンに CA プールを作成し、そのプールに 1 つ以上の CA を作成する必要があります。CA は、ルート CA または下位 CA のいずれかです。CA Service で下位 CA を作成して、外部ルート CA に連結することもできます。

クラスタを作成するときに、CA プールを指定します。この構成の一環として、プロジェクト固有の Memorystore for Redis Cluster サービス アカウントには、CA プールを使用する権限が付与されます。サービス アカウントがプールから CA をリクエストし、Memorystore for Redis Cluster はその CA を使用してクラスタのサーバー証明書に署名します。

始める前に

顧客管理の CA モードを使用する前に、次の要件を満たしていることを確認してください。

必要なロール

CA プールと CA の作成に必要な権限を取得するには、CA Service に対する CA Service オペレーション マネージャー(roles/privateca.caManager)IAM ロールを付与するよう管理者に依頼してください。

必要な権限は、カスタムロールや他の事前定義ロールから取得することもできます。ロールの付与については、プロジェクト、フォルダ、組織に対するアクセス権の管理をご覧ください。

顧客管理の CA を使用するワークフロー

顧客管理の CA を使用するワークフローは次のとおりです。

  1. CA プールを作成します。顧客管理の CA を使用するようにクラスタを構成する前に、CA Service で CA プールを作成する必要があります。このプールは、クラスタと同じリージョンに存在する必要があります。
  2. CA プールに CA を作成します。CA プールを作成したら、CA Service を使用してプールに少なくとも 1 つの CA を作成する必要があります。
  3. 作成した CA プールの CA を使用してサーバー証明書を発行する権限を Memorystore for Redis Cluster サービス アカウントに委任します。
  4. 顧客管理の CA を使用するには、クラスタを作成します。

CA プールを作成します

CA プールは、Memorystore for Redis Cluster でクラスタを作成するプロジェクトと同じプロジェクトに作成することも、別のプロジェクトに作成することもできます。ただし、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 プールの ID 制約を構成する際に、Memorystore for Redis Cluster が SAN に追加する内容と競合する可能性がある DNS 名の形式に制限を設定しないでください。

CA プールに CA を作成する

作成した CA プールに少なくとも 1 つの CA を作成します。

ルート CA または下位 CA を作成できます。

ルート CA を作成するには、ルート 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: レプリカの数(シャードごと)。指定できる値は 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

制限事項

Memorystore for Redis Cluster で顧客管理の CA を使用する場合は、次の制限が適用されます。

  • クラスタに顧客管理の 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 サービス アカウントに、CA プールの roles/privateca.certificateRequester ロールがありません。そのため、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 プールに少なくとも 1 つの 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 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 モードが顧客管理でない限り、このパラメータは使用できません。