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 は、選択したノードタイプです。次の値が利用できます。

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

IAM 認証の権限を付与する

IAM アクセス権を付与するには、IAM ロールを付与するの手順に沿って、プリンシパルに roles/redis.dbConnectionUser ロールを付与します。プリンシパルは、 Google Cloud内のリソースへのアクセス権を付与できる ID です。たとえば、プリンシパルは、 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 コマンドを使用して、サービス アカウントを設定し、Compute Engine VM の Cloud Platform API スコープを有効にします。

    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

    たとえば、次のコマンドは、my-sa-123@my-project-123.iam.gserviceaccount.com サービス アカウントを example-VM という VM に割り当て、その 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 ターミナルから次のコマンドを実行して、Compute Engine VM に redis-cli をインストールします。

    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="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 サーバーに一時的なエラーを返しました。アプリケーションは、指数バックオフを使用してこのエラーの再試行を試み、接続障害の再発を防ぐ必要があります。