クライアント アプリケーションと 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 を使用するワークフローは次のとおりです。
- CA プールを作成します。顧客管理の CA を使用するようにクラスタを構成する前に、CA Service で CA プールを作成する必要があります。このプールは、クラスタと同じリージョンに存在する必要があります。
- CA プールに CA を作成します。CA プールを作成したら、CA Service を使用してプールに少なくとも 1 つの CA を作成する必要があります。
- 作成した CA プールの CA を使用してサーバー証明書を発行する権限を、Memorystore for Redis Cluster サービス アカウントに委任します 。
- 顧客管理の CA を使用する クラスタを作成します。
CA プールを作成する
CA プールは、Memorystore for Redis Cluster でクラスタを作成するプロジェクトと同じプロジェクトに CA Service で作成することも、別のプロジェクトに作成することもできます。ただし、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 制約を構成する際に、DNS 名の形式に、Memorystore for Redis Cluster が SAN に追加する内容と競合する可能性がある制限を設定しないでください。
CA プールに CA を作成する
作成した CA プールに少なくとも 1 つの CA を作成します。
ルート CA または下位 CA を作成できます。
ルート CA を作成するには、ルート CA を作成するの手順に沿って操作します。CA のデフォルト値を使用できますが、CA を ENABLED 状態にしてください。
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: クラスタを作成するプロジェクトの ID。 Google Cloud
- 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 では、週に 1 回サーバー側の証明書ローテーションが実施されますが、必要に応じて証明書をローテーションすることもできます。
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 が ENABLED 状態であることを確認します。 |
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 モードが 顧客管理でない限り、このパラメータを使用することはできません。 |