IAM 認証を管理する

このページでは、Memorystore for Redis Cluster の IAM 認証機能の一般的なタスクに関する手順について説明します。この機能の詳細については、 IAM 認証についてをご覧ください。

IAM 認証を使用してインスタンスを作成する

IAM 認証を使用する Memorystore for Redis Cluster インスタンスを作成するには、create コマンドを実行します。

gcloud redis clusters create INSTANCE_ID --region=REGION_ID --network=NETWORK --node-type=NODE_TYPE --shard-count=SHARD_COUNT --auth-mode=iam-auth

以下を置き換えます。

  • INSTANCE_ID は、作成する Memorystore for Redis Cluster インスタンスの ID です。インスタンス ID は 1〜63 文字にする必要があり、小文字、数字、ハイフンのみ使用できます。先頭は英小文字に、末尾は英小文字または数字にする必要があります。

  • REGION_ID は、インスタンスを配置するリージョンです。

  • NETWORK は、インスタンスの作成に使用されるネットワークです。projects/NETWORK_PROJECT_ID/global/networks/NETWORK_ID の形式を使用する必要があります。ここで使用するネットワーク ID は、サービス接続ポリシーで使用されるネットワーク ID と一致する必要があります。それ以外の場合、create オペレーションは失敗します。 詳しくは、 ネットワーキングをご覧ください。

  • NODE_TYPE は、ノードタイプ です。

  • SHARD_COUNT によってインスタンス内のシャードの数が決定されます。シャード数は、クラスタデータを保存するための合計メモリ容量を決定します。クラスタ仕様の詳細については、クラスタとノードの仕様をご覧ください。

IAM 認証の権限を付与する

IAM アクセス権を付与するには、IAM ロールを付与するの手順に沿って、プリンシパルに roles/redis.dbConnectionUser ロールを付与します。プリンシパルは 、リソースへのアクセス権を付与できる ID です Google Cloud。たとえば、 プリンシパルは、プロジェクトにアクセスできるサービス アカウントにすることができます。 Google Cloud

デフォルトでは、プリンシパルに roles/redis.dbConnectionUser ロールを付与すると、プリンシパルはプロジェクト内のすべてのインスタンスにアクセスできます。

インスタンスに対して制限付き IAM 管理者ロールを作成する

完全な IAM 管理者アクセス権を付与せずに、インスタンス接続の IAM 権限を変更できるロールを作成できます。これを行うには、roles/redis.dbConnectionUser ロールに対して制限付き IAM 管理者を作成します。詳細については、制限付き IAM 管理者を作成するをご覧ください。

IAM 認証を使用するインスタンスに接続する

  1. Redis クラスタと同じ 承認済みネットワークを使用する Compute Engine VM がまだない場合は、作成してから、 Linux VM の使用に関するクイックスタートに沿って接続します。

  2. プロジェクトで gcloud compute instances set-service-account コマンドを使用してサービス アカウントを設定し、 Cloud Platform API スコープを Compute Engine VM に対して有効にします。

    gcloud compute instances set-service-account VM_NAME \
    --service-account=SERVICE_ACCOUNT_EMAIL \
    --scopes=SCOPE
    

    次のように置き換えます。

    • VM_NAME: Compute Engine VM の名前
    • SERVICE_ACCOUNT_EMAIL: サービス アカウントのメールアドレス
    • SCOPE: VM の Cloud Platform API スコープ(cloud-platform

    たとえば、次のコマンドは example-VM という VM にサービス アカウント my-sa-123@my-project-123.iam.gserviceaccount.com を割り当て、その VM のアクセス スコープを Cloud Platform API に設定します。

    gcloud compute instances set-service-account example-VM \
    --service-account=my-sa-123@my-project-123.iam.gserviceaccount.com \
    --scopes=cloud-platform
    

    このアクセス スコープを有効にする方法について詳しくは、 サービス アカウントを接続してアクセス スコープを更新するをご覧ください。このスコープのベスト プラクティスについて詳しくは、 スコープのベスト プラクティスをご覧ください。

  3. プロジェクトで Memorystore for Redis API を有効にします。

    Memorystore for Redis API

  4. Compute Engine SSH ターミナルから次のコマンドを実行して、redis-cli を Compute Engine VM にインストールします。

    sudo apt-get install redis-tools
    
  5. 次のコマンドを実行して、IAM ユーザーのアクセス トークンを取得します。

    gcloud auth print-access-token
    
  6. インスタンスの検出エンドポイントに接続します。

    redis-cli -h NETWORK_ADDRESS -p PORT -a ACCESS_TOKEN -c
    

    以下を置き換えます。

    • NETWORK_ADDRESS は、インスタンスのネットワーク アドレスです。ネットワーク アドレスを表示するには、インスタンス情報を表示するをご覧ください。

    • PORT は、インスタンスのポート番号です。ポート番号を表示するには、 インスタンス情報を表示するをご覧ください。

    • ACCESS_TOKEN は、前の手順で取得した IAM アクセス トークンです。

  7. CLUSTER SHARDS コマンドを実行して、クラスタ トポロジを表示します。ノードの IP アドレスとポート番号のいずれかをメモします。

  8. redis-cli を使用してノードを認証して接続するには、次のコマンドを使用します。

    redis-cli -h NODE_IP_ADDRESS -p NODE_PORT -a ACCESS_TOKEN -c
    

    以下を置き換えます。

    • NODE_IP_ADDRESS: 前の手順で確認したノードの IP アドレス
    • NODE_PORT: 前の手順 で確認したノードのポート番号
    • ACCESS_TOKEN: 前の手順で取得した IAM アクセス トークン
  9. ノードへの認証済み接続があることを確認するには、Redis SET コマンドと GET コマンドを実行します。

  10. Redis クラスタへの接続に使用した Compute Engine VM を削除します。これにより、Cloud 請求先アカウントへの課金を回避できます。

アクセス トークンの取得を自動化する

  1. (省略可) まだ作成していない場合は、アプリケーションのサービス アカウントを作成します(サービス アカウントの作成と管理を参照してください)。

    gcloud iam service-accounts create SA_NAME \
        --description="DESCRIPTION" \
        --display-name="DISPLAY_NAME"
    

    以下を置き換えます。

    • SA_NAME はサービス アカウントの名前です。
    • DESCRIPTION は、サービス アカウントの説明です(省略可能)。
    • DISPLAY_NAME は、 Google Cloud コンソールに表示するサービス アカウント名です。
  2. サービス アカウントにプロジェクトの redis.dbConnectionUser ロールを付与します。

    gcloud projects add-iam-policy-binding PROJECT_ID \
    --member="serviceAccount:SA_NAME@PROJECT_ID.iam.gserviceaccount.com" \
    --role=roles/"ROLE_NAME"
    

    次のように置き換えます。

    • PROJECT_ID: プロジェクト ID。
    • SA_NAME: サービス アカウントの名前。
    • ROLE_NAME: ロール名。この例では、redis.dbConnectionUser です。
  3. アプリケーションを認証します 指定されたサービス アカウントとして。詳しくは、サービス アカウントをご覧ください。

IAM 認証を使用するインスタンスに接続するためのコードサンプル

一般的なクライアント ライブラリを使用してアプリケーションを認証する方法を示すコードサンプルを確認できます。また、このコードサンプルを使用して IAM 認証を使用するインスタンスに接続する方法も確認できます。

IAM 認証のエラー メッセージのトラブルシューティング

エラー メッセージ 推奨される対応 説明

-WRONGPASS invalid username-password pair or user is disabled

Memorystore for Redis Cluster サーバーに提供されたユーザー名とアクセス トークンを確認する 指定されたユーザー名またはアクセス トークンが無効です。サポートされているユーザー名は「default」のみです。アプリケーションですでに「default」ユーザー名を使用している場合は、アクセス トークンが期限切れになっていないことと、IAM 認証を使用するインスタンスに接続するの手順に沿って取得されていることを確認してください。IAM 権限は、最近変更された場合、反映されるまでに数分かかることがあります。

-NOAUTH Authentication required

アプリケーションが Memorystore for Redis Cluster サーバーに IAM アクセス トークンを提供するように構成されていることを確認する アプリケーションが Memorystore for Redis Cluster サーバーにアクセス トークンを提供していません。IAM 認証を使用するインスタンスに接続するの手順に沿って、アプリケーションがアクセス トークンを提供するように構成されていることを確認します。

-ERR (ERR_IAM_EXHAUSTED) Memorystore IAM authentication backend quota exceeded. See https://cloud.google.com/memorystore/docs/cluster/manage-iam-auth#error_messages.

指数バックオフを使用して再試行する IAM バックエンドが過負荷になり、Memorystore for Redis Cluster サーバーに割り当て超過エラーが返されました。接続障害を回避するため、アプリケーションは指数バックオフを使用してこのエラーを再試行する必要があります。

-ERR (ERR_IAM_OTHER) Memorystore IAM authentication backend error. See https://cloud.google.com/memorystore/docs/cluster/manage-iam-auth#error_messages.

指数バックオフを使用して再試行する IAM バックエンドが Memorystore for Redis Cluster サーバーに一時的なエラーを返しました。接続障害を回避するため、アプリケーションは指数バックオフを使用してこのエラーを再試行する必要があります。