基本的なトークンベースの認証を使用してクラスタへのアクセスを保護する

Identity and Access Management(IAM)認証に加えて、基本的なトークンベースの認証を使用して、Memorystore for Redis Cluster のクラスタへのアクセスを保護できます。基本的なトークンベースの認証は、クライアントがトークンを使用してアプリケーション内で身元を確認できるようにする軽量なソリューションです。

基本的なトークンベースの認証では、リソース要件が最小限に抑えられ、リソース オーバーヘッドが低くなります。また、Memorystore for Redis またはオンプレミス アプリケーションの現在のワークロードで、すでに基本的なトークンベースの認証を使用している場合は、この機能により、Memorystore for Redis Cluster への移行をスムーズに行うことができます。

利点

基本的なトークンベースの認証を使用すると、次のメリットがあります。

  • 柔軟性: 新規および既存のクラスタで、いつでも認証を有効にできます。基本的なトークンベースの認証を有効にすると、クラスタが保護されます。すべての新しい接続で、ユーザーはクラスタに認証するためのトークンを指定する必要があります。
  • ゼロダウンタイム ローテーション: アプリケーションのダウンタイムを発生させることなく、ユーザー トークンをローテーションします。
  • 互換性: default スーパーユーザーは、このユーザーに付与されている権限を維持します。基本的なトークンベースの認証により、保護が強化されます。これにより、ワークロードを Memorystore for Redis から Memorystore for Redis Cluster に移行する際の下位互換性が確保されます。

認証モード

基本的なトークンベースの認証では、次の 2 つの主な認証モードがサポートされています。

  • シンプルな認証: ユーザーが認証トークンを送信して default ユーザーとして認証する簡単な方法
  • マルチユーザー認証: 複数のユーザーを管理して、クラスタへのアクセスを認証します。

ベスト プラクティス

セキュリティ上の理由から、基本的なトークンベースの認証には次のベスト プラクティスを使用することをおすすめします。

  • ユーザー トークンをローテーションする: ユーザー トークンにローテーション ポリシーを使用します。
  • Secret Manager を使用する: アプリケーション コードにユーザーの基本的なトークンベースの認証情報をハードコードしないでください。代わりに、Secret Manager に保存して、実行時に取得します。

    Secret Manager は、ユーザー認証情報の一元化された暗号化されたボルトを提供します。これにより、シークレット スプロールが排除され、認証情報を手動で管理する運用上のオーバーヘッドが軽減されます。IAM を使用してアクセス制御を適用し、監査ログを自動的に生成します。これにより、コンプライアンスが確保され、認証情報の漏洩が防止されます。

  • 基本的なトークンベースの認証と Transport Layer Security(TLS)を組み合わせる: 基本的なトークンベースの認証を使用する場合は、転送中の暗号化を有効にすることをおすすめします。これにより、ユーザー名とトークンがネットワーク経由で書式なしテキストで送信されることはありません。

始める前に

基本的なトークンベースの認証を使用してクラスタを保護する前に、このセクションの前提条件を満たしてください。

基本的なトークンベースの認証に対するクライアントのサポートを確認する

クライアント アプリケーションが基本的なトークンベースの認証をサポートしていることを確認するには、アプリケーションで AUTH コマンドを使用できることを確認します。

default ユーザーは、次のコマンドを使用してクライアント アプリケーションを認証します。

AUTH TOKEN

このコマンドで、TOKEN はデフォルト ユーザーの認証トークンです。

他のすべてのユーザーは、次のコマンドを使用して認証します。

AUTH USERNAME TOKEN

このコマンドで、USERNAME と TOKEN はユーザーのユーザー名と認証トークンです。

AUTH コマンドの詳細については、Redis ドキュメントの AUTH をご覧ください。

Google Cloud コンソール、Google Cloud CLI、API を使用する

Google Cloud コンソール、gcloud CLI、API を使用するには、次の操作を行います。

  1. Google Cloud コンソールのプロジェクト セレクタ ページで、 Google Cloud プロジェクトを選択または作成します。

    プロジェクトの選択に移動

  2. プロジェクトに対して課金が有効になっていることを確認します。プロジェクトで課金が有効になっているかどうかを確認する方法をご覧ください。
  3. Google Cloud CLI(gcloud CLI)をインストールして初期化します。

    注: すでに gcloud CLI をインストールしている場合は、gcloud components update を実行して、最新バージョンがインストールされていることを確認してください。Memorystore for Redis Cluster の gcloud CLI コマンドを利用するには、少なくとも gcloud CLI バージョン 489.0.0 が必要です。

  4. Memorystore for Redis Cluster API を有効にします。
    Memorystore for Redis Cluster API
  5. Network Connectivity API を有効にします。
    Network Connectivity API
  6. Service Consumer Management API を有効にします。
    Service Consumer Management API

ロールを付与

クラスタの基本的なトークンベースの認証を構成するか、認証トークンを表示するには、 Google Cloud プロジェクトに Redis 管理者(roles/redis.admin)IAM ロールが必要です。このロールの付与の詳細については、IAM を使用したアクセス制御をご覧ください。

クラスタの基本的なトークンベースの認証を管理する

Memorystore for Redis Cluster は、クラスタの基本的なトークンベースの認証を管理するために、次のアクションをサポートしています。

基本的なトークンベースの認証を使用するクラスタを作成する

基本的なトークンベースの認証を使用してクラスタを作成すると、クラスタへのユーザー アクセスを制限する軽量で広くサポートされている方法を利用できます。

クラスタは、 Google Cloud コンソールまたは gcloud CLI を使用して作成できます。

コンソール

クラスタを作成して、基本的なトークンベースの認証を有効にするには、インスタンスを作成するをご覧ください。

gcloud

クラスタを作成して、基本的なトークンベースの認証を有効にするには、gcloud beta redis clusters create コマンドを使用します。

gcloud beta redis clusters create CLUSTER_ID \
--region=REGION \
--auth-mode=token-auth

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

  • CLUSTER_ID: 基本的なトークンベースの認証を使用するために作成するクラスタの ID
  • REGION: クラスタを配置するリージョン

クラスタで基本的なトークンベースの認証を有効にする

クラスタで基本的なトークンベースの認証を有効にすると、クラスタへのユーザー アクセスを制限する軽量で広くサポートされている方法を利用できます。

default ユーザーは、トークンのみを使用してクラスタに対して認証できます。他のすべてのユーザーは、標準のユーザー名とトークンを使用して認証します。詳細については、基本的なトークンベースの認証のクライアント サポートを確認するをご覧ください。

Memorystore for Redis Cluster では認証されたリクエストが必要なため、基本的なトークンベースの認証を有効にすると、新しい接続を作成しようとするアプリケーションでダウンタイムが発生する可能性があります。既存の接続は影響を受けませんが、クラスタへの後続の接続試行で基本的なトークンベースの認証を使用するには、アプリケーションを更新する必要があります。詳細については、基本的なトークンベースの認証を使用してクラスタに接続するをご覧ください。

クラスタの基本的なトークンベースの認証を有効にするには、 Google Cloud コンソールまたは gcloud CLI を使用します。

コンソール

  1. Google Cloud コンソールで、[Memorystore for Redis Cluster] ページに移動します。

    Memorystore for Redis Cluster

  2. 基本的なトークンベースの認証を有効にするクラスタをクリックします。

  3. [クラスタの概要] ページで、[セキュリティ] カードまでスクロールします。

  4. [Auth Mode] フィールドの横にある [Edit]()をクリックします。

    フィールドの横に [IAM Auth] または [Token Auth] が表示されている場合は、クラスタで IAM 認証または基本的なトークンベースの認証がすでに有効になっています。

  5. [認証モード] ダイアログで、[トークン認証] オプションを選択し、[クラスタを更新] をクリックします。

gcloud

基本的なトークンベースの認証を有効にするには、gcloud beta redis clusters update コマンドを使用します。

gcloud beta redis clusters update CLUSTER_ID \
--region=REGION \
--auth-mode=token-auth

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

  • CLUSTER_ID: 基本的なトークンベースの認証を有効にするクラスタの ID
  • REGION: クラスタが配置されているリージョン

クラスタの基本的なトークンベースの認証ユーザーを作成する

クラスタに基本的なトークンベースの認証ユーザーを作成することで、マルチユーザー認証を許可するようにクラスタを構成します。ユーザーが最初にログインすると、この認証モードは新しい接続の安全で取り消し可能な認証情報として機能します。ユーザーは、認証トークンを削除するか、ユーザーが削除されるまで、認証トークンを引き続き使用できます。

基本的なトークンベースの認証ユーザーは、 Google Cloud コンソールまたは gcloud CLI を使用して作成できます。

コンソール

  1. Google Cloud コンソールで、[Memorystore for Redis Cluster] ページに移動します。

    Memorystore for Redis Cluster

  2. 基本的なトークンベースの認証ユーザーを作成するクラスタをクリックします。

  3. ナビゲーション ドロワーで、[ユーザー] メニュー項目をクリックします。

    このメニュー項目がドロワーに表示されない場合は、基本認証を使用してクラスタを作成していないか、クラスタで基本トークンベース認証を有効にしていません。

  4. [ユーザー] ページで、[ユーザーを追加] をクリックします。

  5. [ユーザーを追加] ダイアログで、ユーザーの ID を入力し、[追加] をクリックします。

gcloud

ユーザーを作成するには、gcloud beta redis clusters create-token-auth-user コマンドを使用します。

gcloud beta redis clusters create-token-auth-user CLUSTER_ID \
--region=REGION \
--token-auth-user=USERNAME

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

  • CLUSTER_ID: 基本的なトークンベースの認証ユーザーを作成するクラスタの ID
  • REGION: クラスタが配置されているリージョン
  • USERNAME: ユーザーのユーザー名

クラスタの基本的なトークンベースの認証ユーザーを一覧表示する

クラスタの基本的なトークンベースの認証ユーザーのリストを取得するには、 Google Cloud コンソールまたは gcloud CLI を使用します。

コンソール

  1. Google Cloud コンソールで、[Memorystore for Redis Cluster] ページに移動します。

    Memorystore for Redis Cluster

  2. 基本的なトークンベースの認証ユーザーのリストを取得するクラスタをクリックします。

  3. ナビゲーション ドロワーで、[ユーザー] メニュー項目をクリックします。[ユーザー] ページに、基本的なトークンベースの認証ユーザーのリストが表示されます。

    ナビゲーション ドロワーに [ユーザー] メニュー項目が表示されない場合は、基本認証を使用してクラスタを作成していないか、クラスタで基本トークンベースの認証を有効にしていません。

gcloud

ユーザーを一覧表示するには、gcloud beta redis clusters token-auth-users list コマンドを使用します。

gcloud beta redis clusters token-auth-users list \
--cluster=CLUSTER_ID \
--region=REGION

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

  • CLUSTER_ID: 基本的なトークンベースの認証ユーザーのリストを取得するクラスタの ID。
  • REGION: クラスタが配置されているリージョン

基本的なトークンベースの認証ユーザーに関する情報を表示する

基本的なトークンベースの認証ユーザーに関する情報を表示するには、gcloud CLI を使用します。

ユーザーに関する情報を表示するには、gcloud beta redis clusters token-auth-users describe コマンドを使用します。

gcloud beta redis clusters token-auth-users describe USERNAME \
--cluster=CLUSTER_ID \
--region=REGION

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

  • USERNAME: 情報を表示する、基本的なトークンベースの認証ユーザーのユーザー名
  • CLUSTER_ID: ユーザーが認証できるクラスタの ID
  • REGION: クラスタが配置されているリージョン

クラスタから基本トークンベースの認証ユーザーを削除する

基本的なトークンベースの認証ユーザーをクラスタから削除すると、そのユーザーのクラスタへのアクセス権が取り消されます。

クラスタから基本的なトークンベースの認証ユーザーを削除するには、 Google Cloud コンソールまたは gcloud CLI を使用します。

コンソール

  1. Google Cloud コンソールで、[Memorystore for Redis Cluster] ページに移動します。

    Memorystore for Redis Cluster

  2. 基本的なトークンベースの認証ユーザーを削除するクラスタをクリックします。

  3. ナビゲーション ドロワーで、[ユーザー] メニュー項目をクリックします。

    このメニュー項目がドロワーに表示されない場合は、基本認証を使用してクラスタを作成していないか、クラスタで基本トークンベースの認証を有効にしていません。

  4. [ユーザー] ページで、削除するユーザーの ID の横にある [アクション]()をクリックします。

  5. 表示されたメニューから [ユーザーを削除] を選択します。

  6. [ユーザーを削除しますか?] ダイアログで、ユーザーの ID を入力し、[削除] をクリックします。Memorystore for Redis Cluster は、ユーザーと、そのユーザーに関連付けられているすべての認証トークンを削除します。

  7. 省略可: 削除するユーザーの場合、Memorystore for Redis Cluster は既存の接続を終了しません。これらの接続を終了するには、クラスタ内のすべてのノードで次のコマンドを実行します。

    CLIENT KILL USER USERNAME
    

gcloud

ユーザーを削除するには、gcloud beta redis clusters token-auth-users delete コマンドを使用します。

gcloud beta redis clusters token-auth-users delete USERNAME \
--cluster=CLUSTER_ID \
--region=REGION

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

  • USERNAME: 基本的なトークンベースの認証ユーザーのユーザー名
  • CLUSTER_ID: ユーザーを削除するクラスタの ID
  • REGION: クラスタが配置されているリージョン

削除するユーザーについて、Memorystore for Redis Cluster は、そのユーザーに関連付けられているすべての認証トークンも削除します。また、Memorystore for Redis Cluster は既存の接続を終了しません。これらの接続を終了するには、クラスタ内のすべてのノードで次のコマンドを実行します。

CLIENT KILL USER USERNAME

ユーザーの基本的なトークンベースの認証を管理する

Memorystore for Redis Cluster は、ユーザーの基本的なトークンベースの認証を管理するために、次のアクションをサポートしています。

ユーザーの認証トークンを作成する

クラスタに基本的なトークンベースの認証ユーザーを作成すると、Memorystore for Redis Cluster はユーザーの認証トークンを自動的に作成します。ただし、ユーザーに追加の認証トークンを作成できます。これにより、アプリケーションのダウンタイムを発生させることなく、ユーザーの既存のトークンをローテーションできます。

ユーザーの認証トークンを作成するには、 Google Cloud コンソールまたは gcloud CLI を使用します。

コンソール

  1. Google Cloud コンソールで、[Memorystore for Redis Cluster] ページに移動します。

    Memorystore for Redis Cluster

  2. 認証トークンを作成するユーザーを含むクラスタをクリックします。

  3. ナビゲーション ドロワーで、[ユーザー] メニュー項目をクリックします。

    このメニュー項目がドロワーに表示されない場合は、基本認証を使用してクラスタを作成していないか、クラスタで基本トークンベース認証を有効にしていません。

  4. [ユーザー] ページで、認証トークンを作成するユーザーの ID の横にある [アクション]()をクリックします。

  5. 表示されたメニューから [認証トークンを追加] を選択します。

  6. [認証トークンを追加] ダイアログで、[追加] をクリックします。

    ユーザーにすでに 2 つの認証トークンがある場合、そのユーザーに別のトークンを作成するには、既存のトークンを削除する必要があります。

gcloud

トークンを作成するには、gcloud beta redis clusters token-auth-users create-auth-token コマンドを使用します。

gcloud beta redis clusters token-auth-users create-auth-token USERNAME \
--cluster=CLUSTER_ID \
--region=REGION

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

  • USERNAME: 認証トークンを作成するユーザーのユーザー名
  • CLUSTER_ID: ユーザーがトークンを使用してアクセスできるクラスタの ID
  • REGION: クラスタが配置されているリージョン

ユーザーにすでに 2 つの認証トークンがある場合、ユーザーに別のトークンを作成する前に、既存のトークンを削除する必要があります。

ユーザーの認証トークンを一覧表示する

gcloud CLI を使用して、ユーザーの認証トークンのリストを取得できます。

トークンを一覧表示するには、gcloud beta redis clusters token-auth-users auth-tokens list コマンドを使用します。

gcloud beta redis clusters token-auth-users auth-tokens list \
--token-auth-user=USERNAME \
--cluster=CLUSTER_ID \
--region=REGION

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

  • USERNAME: 認証トークンが属するユーザーのユーザー名
  • CLUSTER_ID: ユーザーが認証トークンを使用してアクセスできるクラスタの ID
  • REGION: クラスタが配置されているリージョン

ユーザーの認証トークンに関する情報を表示する

ユーザーの認証トークンに関する情報は、 Google Cloud コンソールまたは gcloud CLI を使用して表示できます。

コンソール

  1. Google Cloud コンソールで、[Memorystore for Redis Cluster] ページに移動します。

    Memorystore for Redis Cluster

  2. 情報を表示するユーザーの認証トークンを含むクラスタをクリックします。

  3. ナビゲーション ドロワーで、[ユーザー] メニュー項目をクリックします。

    このメニュー項目がドロワーに表示されない場合は、基本認証を使用してクラスタを作成していないか、クラスタで基本的なトークンベースの認証を有効にしていません。

  4. [ユーザー] ページで、ユーザーの ID の横にある [操作]()をクリックします。

  5. 表示されたメニューから [認証トークンを表示] を選択します。[Auth トークン] ダイアログに、次の情報が表示されます。

    • ユーザーの ID。
    • ユーザーが持っている認証トークンの数(1 つまたは 2 つ)。
    • 各認証トークンのバージョンと、Memorystore for Redis Cluster が各バージョンを作成した日時。ユーザーの認証トークンを作成するたびに、Memorystore for Redis Cluster はトークンの増分バージョンを作成します。
    • 認証トークン。
  6. 省略可: ユーザーの認証トークンを取得してクラスタに接続できるようにするには、トークンの横にある [コピー]()をクリックし、トークンをテキスト エディタに貼り付けます。

  7. [完了] をクリックします。

gcloud

この情報を表示するには、gcloud beta redis clusters token-auth-users auth-tokens describe コマンドを使用します。

gcloud beta redis clusters token-auth-users auth-tokens describe AUTH_TOKEN \
--cluster=CLUSTER_ID \
--region=REGION \
--token-auth-user=USERNAME

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

  • AUTH_TOKEN: 情報を表示する認証トークンの名前
  • CLUSTER_ID: ユーザーがトークンを使用してアクセスできるクラスタの ID
  • REGION: クラスタが配置されているリージョン
  • USERNAME: 認証トークンが属するユーザーのユーザー名

ユーザーから認証トークンを削除する

ユーザーから認証トークンを削除することは、トークンを無効にする重要なセキュリティ アクションです。

ユーザーから認証トークンを削除するには、 Google Cloud コンソールまたは gcloud CLI を使用します。

コンソール

  1. Google Cloud コンソールで、[Memorystore for Redis Cluster] ページに移動します。

    Memorystore for Redis Cluster

  2. 認証トークンを削除するユーザーを含むクラスタをクリックします。

  3. ナビゲーション ドロワーで、[ユーザー] メニュー項目をクリックします。

    このメニュー項目がドロワーに表示されない場合は、基本認証を使用してクラスタを作成していないか、クラスタで基本トークンベース認証を有効にしていません。

  4. [ユーザー] ページで、認証トークンを削除するユーザーの ID の横にある [アクション]()をクリックします。

  5. 表示されたメニューから [認証トークンを削除] を選択します。

  6. [Delete Auth Token?] ダイアログで、次の操作を行います。

    1. [認証トークン] メニューから、削除する認証トークンを選択します。
    2. [認証トークン ID] フィールドに、トークンのバージョン番号(例: version-1)を入力します。
    3. [削除] をクリックします。

gcloud

トークンを削除するには、gcloud beta redis clusters token-auth-users auth-tokens delete コマンドを使用します。

gcloud beta redis clusters token-auth-users auth-tokens delete AUTH_TOKEN \
--cluster=CLUSTER_ID \
--region=REGION \
--token-auth-user=USERNAME

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

  • AUTH_TOKEN: ユーザーから削除する認証トークンの名前
  • CLUSTER_ID: トークンを削除してユーザーがアクセスできないようにするクラスタの ID
  • REGION: クラスタが配置されているリージョン
  • USERNAME: 削除するトークンを持つユーザーのユーザー名

基本的なトークンベースの認証を使用してクラスタに接続する

基本的なトークンベースの認証を使用してクラスタに接続するには、次の方法を使用します。

  • Uniform Resource Identifier(URI)文字列: この単一のフォーマットされた文字列は、必要なすべての接続情報(ユーザーのユーザー名とトークン、クラスタの IP アドレスとホスト名など)が 1 つの文字列に含まれているため、便宜上使用されます。
  • フラグ: この方法は、個々のコマンドライン ツールの使用、スクリプト、または複数の個別の引数を使用して構成を個別の環境変数に分割する環境に適しています。

以降のセクションでは、各接続方法について説明します。

URI 文字列を使用する

URI 文字列を使用して Compute Engine VM またはサポートされている環境から接続するには、次のコマンドを使用します。

redis-cli -c -u
redis://USERNAME:TOKEN@IP_ADDRESS:PORT

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

  • USERNAME: クラスタに接続しようとしているユーザーのユーザー名。
  • TOKEN: ユーザーの認証トークン。

    正しくないトークンまたは無効なトークンを指定すると、クラスタに接続できません。Memorystore for Redis Cluster は、このアクションのエントリをデータアクセス監査ログに作成します。ログを表示して、セキュリティ脅威を検出したり、期限切れまたは不適切な形式のトークンが原因で発生した接続の問題をトラブルシューティングしたりできます。データアクセス監査ログの表示について詳しくは、ログを表示するをご覧ください。

  • IP_ADDRESS: クラスタの IP アドレス。

  • PORT: クラスタ用に予約されているポート番号。

クラスタで転送中の暗号化を有効にする場合は、安全な Redis プロトコル(rediss://)を使用し、TLS フラグを追加する必要があります。次に例を示します。

redis-cli -c -u
rediss://USERNAME:TOKEN@IP_ADDRESS:PORT --cacert /tmp/server_ca.pem

フラグを使用する

フラグを使用して Compute Engine VM またはサポートされている環境から接続するには、次のコマンドを使用します。

redis-cli -c --user USERNAME -a TOKEN -h IP_ADDRESS -p PORT

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

  • USERNAME: クラスタに接続しようとしているユーザーのユーザー名。
  • TOKEN: ユーザーの認証トークン。

    正しくないトークンや無効なトークンを指定すると、クラスタに接続できません。Memorystore for Redis Cluster は、このアクションのエントリをデータアクセス監査ログに作成します。ログを表示して、セキュリティ脅威を検出したり、期限切れまたは不適切な形式のトークンが原因で発生した接続の問題をトラブルシューティングしたりできます。データアクセス監査ログの表示について詳しくは、ログを表示するをご覧ください。

  • IP_ADDRESS: クラスタの IP アドレス。

  • PORT: クラスタ用に予約されているポート番号。

クラスタで転送中の暗号化を有効にする場合は、TLS フラグを追加する必要があります。次に例を示します。

redis-cli -c --user USERNAME -a TOKEN -h IP_ADDRESS -p PORT --tls --cacert /tmp/server_ca.pem

ダウンタイムなしでユーザーの認証トークンをローテーションする

アプリケーションにダウンタイムを発生させずにユーザーの認証トークンをローテーションするには、次の操作を行います。

  1. ユーザーの追加の認証トークンを作成する: Memorystore for Redis Cluster は、2 つ目の有効なトークンを生成します。どちらのトークンも有効です。
  2. アプリケーションを更新する: 新しいトークンを使用するようにアプリケーションを更新します。
  3. ユーザーの認証トークンを削除する: Memorystore for Redis Cluster は最初のトークンを削除します。ユーザーは、2 番目のトークンのみを使用してアプリケーションに認証できます。

基本的なトークンベースの認証のアクセスログ

Memorystore for Redis Cluster は、認証トークンとユーザーに関連付けられたオペレーションの管理アクティビティ監査ログとデータアクセス監査ログを生成します。これらの監査ログの詳細については、監査ログを使用してアクセスをモニタリングするをご覧ください。