ACL ポリシーを使用してクラスタへのアクセスを保護する

Memorystore for Redis Cluster でアクセス制御リスト(ACL)ポリシーを使用すると、クラスタへのアクセスを保護できます。ユーザーとサービスによる特定の鍵、コマンド、Pub/Sub チャネルへのアクセスを制限することで、きめ細かいセキュリティを有効にできます。

ACL ポリシーを使用してクラスタへのアクセスを保護するユースケースの例を次に示します。

  • ロールベース アクセス制御(RBAC)を提供する: アプリケーションのさまざまなコンポーネントに対して個別のユーザー プロファイルを作成します。たとえば、ウェブ フロントエンドには読み取り専用アクセス権を付与し、バックグラウンド ワーカー サービスには読み取り / 書き込みアクセス権を付与できます。これにより、データの誤った漏洩や改ざんを防ぐことができます。
  • 破壊的なコマンドを防止する: FLUSHALLFLUSHDBCONFIG などの危険なコマンドを、上位レベルの管理者のみに制限します。これにより、ソフトウェア バグや手動エラーからデータの完全性が保護されます。
  • マルチテナント アプリケーションのセキュリティを確保する: 異なるマイクロサービスまたは外部パートナーに個別の ACL ユーザーを使用します。これにより、あるサービスのユーザーが別のサービスが所有するキーを読み取ったり変更したりできなくなります。

    Memorystore for Redis Cluster は、リソースレベルのマルチテナンシーを提供していません。キースペースが分割されていても、1 つのサービスが過剰なメモリや CPU を消費する可能性があります。

  • 読み取り専用の分析とモニタリングを実行する: GET または他の読み取り専用コマンド(SCANTYPE など)のみを使用できる専用ユーザーを分析エンジンまたはダッシュボード アプリケーションに割り当てます。これにより、誤った書き込みやデータの削除を防ぐことができます。

  • データベース キーを保護する: 特定のパターン(app1:* など)に一致するキーとのみアプリケーションがやり取りできるように制限します。これにより、クラスタ内のデータが論理的に分離されます。

  • Lua スクリプトを無効にする: ACL ポリシーを使用して、クラスタの Lua スクリプト機能を管理します。Lua スクリプトを無効にしたり、制限したりすることは、パフォーマンス チューニング、クラスタの機能の簡素化、組織のセキュリティ ガイドラインの遵守に役立ちます。

始める前に

ACL ポリシーの使用を開始する前に、このセクションの手順を完了します。

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

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

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

    注: この手順で作成するリソースをそのまま保持する予定でない場合は、既存のプロジェクトを選択するのではなく、新しいプロジェクトを作成してください。チュートリアルの終了後にそのプロジェクトを削除すれば、プロジェクトに関連するすべてのリソースを削除できます。


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

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

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

Memorystore for Redis Cluster のロールを割り当てる

ユーザーまたは使用しているユーザー アカウントに、操作を行うための必要な権限があることを確認します。

すべての ACL ポリシー オペレーションを実行するには、Redis 管理者roles/redis.admin)ロールと Redis 編集者roles/redis.editor)ロールを使用します。ACL ポリシーの表示のみを行うには、Redis 閲覧者roles/redis.viewer)ロールを使用します。

Memorystore for Redis Cluster の権限を割り当てる

Memorystore for Redis Cluster で ACL ポリシーを使用するには、Redis 管理者、Redis 編集者、Redis 閲覧者のロールに加えて、次の権限が必要です。

アクション 権限
ACL ポリシーを作成する redis.aclPolicies.create
クラスタに ACL ポリシーを割り当てる redis.clusters.update
ACL ポリシーに関する情報を表示する redis.aclPolicies.list
ACL ポリシーに関する情報を表示する redis.aclPolicies.get
ACL ポリシーのリビジョンに関する情報を表示する redis.aclPolicyRevisions.list
ACL ポリシーのリビジョンに関する情報を表示する redis.aclPolicyRevisions.get
ACL ポリシーを変更する redis.aclPolicies.update
クラスタから ACL ポリシーを削除する redis.clusters.update
ACL ポリシーを削除する redis.aclPolicies.delete

ACL ポリシーを作成する

Memorystore for Redis Cluster で ACL ポリシーを作成すると、特定のキー、コマンド、Pub/Sub チャネルへのユーザー アクセスを制限することで、クラスタのセキュリティを強化できます。

ACL ポリシーは、gcloud CLI を使用して作成できます。

gcloud

ACL ポリシーを作成するには、gcloud redis acl-policies create コマンドを使用します。

gcloud redis acl-policies create ACL_POLICY_NAME \
--region=REGION \
--rules=rule="on ~* +@all",username="lucian" \
--rules=rule="on +get",username="taylor"

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

  • ACL_POLICY_NAME: 作成する ACL ポリシーの名前。ポリシー名に使用できるのは、英小文字、数字、ハイフンのみです。先頭は英字で、そのリージョンで一意である必要があります。
  • REGION: ACL ポリシーを配置するリージョン。

このポリシーは、基本的なトークンベースの認証を使用し、次のアクションを実行するルールがあります。

  • 最初のルールでは、lucian~* +@all 権限が付与されます。この権限により、ユーザーはすべての鍵にアクセスしてすべてのコマンドを実行できます。
  • 2 つ目のルールは、taylorget 権限を付与します。この権限により、ユーザーはキーに関連付けられた値を取得できます。ユーザーのアクセスを読み取り専用のデータ オペレーションに制限し、ユーザーが鍵を変更できないようにします。

Identity and Access Management(IAM)認証を使用する ACL ポリシーのルールを作成する場合は、ユーザー名(ユーザーのメールアドレスなど)に IAM プリンシパルを使用することをおすすめします。

gcloud redis acl-policies create ACL_POLICY_NAME \
--region=REGION \
--rules=rule="on ~* +@all",username="lucian@example.com" \
--rules=rule="on +get",username="taylor@example.com"

認証を使用しない ACL ポリシーのルールを作成するには、ユーザーが default ユーザーである必要があります。

gcloud redis acl-policies create ACL_POLICY_NAME \
--region=REGION \
--rules=rule="on ~* +@all",username="default"

基本トークンベースの認証と IAM 認証の詳細については、基本トークンベースの認証を使用してクラスタへのアクセスを保護するIAM 認証についてをご覧ください。

作成できる他の ACL ルールとポリシーの詳細については、Redis ドキュメントの ACL をご覧ください。

クラスタに ACL ポリシーを割り当てる

ACL ポリシーをクラスタに割り当てるか、割り当てられたポリシーを置き換えることで、Memorystore for Redis Cluster はポリシーのルールをクラスタに適用できます。これにより、ユーザーの特定の鍵、コマンド、Pub/Sub チャンネルへのアクセスが制限されます。

gcloud CLI を使用して、ACL ポリシーをクラスタに割り当てることができます。

新しいクラスタにポリシーを割り当てる

クラスタを作成して ACL ポリシーをクラスタに割り当てるには、インスタンスを作成するをご覧ください。

既存のクラスタにポリシーを割り当てる

既存のクラスタのセキュリティを強化するには、クラスタに ACL ポリシーを割り当てます。

gcloud

既存のクラスタに ACL ポリシーを割り当てるには、gcloud redis clusters update コマンドを使用します。

gcloud redis clusters update CLUSTER_ID \
--update_mask=acl_policy \
--acl-policy=ACL_POLICY_NAME \
--region=REGION

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

  • CLUSTER_ID: ACL ポリシーを割り当てるクラスタの ID
  • ACL_POLICY_NAME: ACL ポリシーの名前
  • REGION: クラスタが配置されているリージョン

ACL ポリシーに関する情報を表示する

Memorystore for Redis Cluster で ACL ポリシーに関する情報を表示すると、セキュリティを維持し、環境の運用安定性を確保し、インメモリ データを監査できます。これらのポリシーは、特定のキーパターンを読み取りまたは変更できるユーザー、特定のコマンドを実行できるユーザー、特定の Pub/Sub チャンネルにアクセスできるユーザーを定義します。

ACL ポリシーに関する情報は、gcloud CLI を使用して表示できます。

gcloud

ACL ポリシーに関する情報を表示するには、gcloud redis acl-policies list コマンドを使用します。

gcloud redis acl-policies list
--region=REGION

REGION は、ACL ポリシーが配置されているリージョンに置き換えます。

ACL ポリシーに関する情報を表示する

Memorystore for Redis Cluster で ACL ポリシーに関する情報を表示することで、セキュリティ監査の実施、アクセスエラーのトラブルシューティング、ユーザー コマンド、キー権限、Pub/Sub チャネルへのアクセスを確認して最小権限の原則の適用を行うことができます。また、管理者は ACL ポリシーを表示して、アプリケーションに適切なアクセス権があることを確認し、権限が過剰なルールを検出できます。

ACL ポリシーに関する情報は、gcloud CLI を使用して表示できます。この情報を表示するには、gcloud redis acl-policies describe コマンドを使用します。

gcloud redis acl-policies describe ACL_POLICY_NAME \
--region=REGION

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

  • ACL_POLICY_NAME: 情報を表示する ACL ポリシーの名前
  • REGION: ACL ポリシーが配置されているリージョン

ACL ポリシーのリビジョンに関する情報を表示する

ACL ポリシーを作成すると、Memorystore for Redis Cluster はポリシーのバージョン(リビジョン)を作成します。ポリシーを変更するたびに、Memorystore for Redis Cluster は後続のポリシー リビジョンを作成します。

Memorystore for Redis Cluster はこれらのリビジョンを自動的に生成するため、内部の追跡と監査に使用できます。また、リビジョンを表示すると、各履歴バージョンの ACL ポリシーの正確な内容を確認できます。

ACL ポリシーのリビジョンを使用すると、どのクラスタがどのポリシーのリビジョンを使用しているかを追跡できます。これにより、可視性を維持し、ポリシーの更新後に結果整合性が確保される期間中に、クラスタが正しいバージョンを使用していることを確認できます。

ACL ポリシーの変更に関する情報は、gcloud CLI を使用して表示できます。

gcloud

ACL ポリシーのリビジョンに関する情報を表示するには、gcloud redis acl-policies revisions list コマンドを使用します。

gcloud redis acl-policies revisions list \
--acl-policy=ACL_POLICY_NAME \
--region=REGION

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

  • ACL_POLICY_NAME: 情報を表示するリビジョンを含む ACL ポリシーの名前
  • REGION: ACL ポリシーが配置されているリージョン

出力で、リビジョン ID をメモします。これらの ID は、特定の ACL ポリシー リビジョンに関する情報を表示するために必要です。

ACL ポリシーのリビジョンに関する情報を表示する

ACL ポリシーのリビジョンを表示すると、そのルール、メタデータ、アタッチされているすべてのクラスタのリストを確認できます。ACL ポリシーのリビジョンに関する情報は、gcloud CLI を使用して表示できます。

gcloud

ACL ポリシーのリビジョンに関する情報を表示するには、gcloud redis acl-policies revisions describe コマンドを使用します。

gcloud redis acl-policies revisions describe ACL_POLICY_REVISION_ID \
--acl-policy=ACL_POLICY_NAME \
--region=REGION

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

  • ACL_POLICY_REVISION_ID: 情報を表示する ACL ポリシー リビジョンの ID。この ID は、ACL ポリシーのリビジョンに関する情報を表示したときにメモしました。
  • ACL_POLICY_NAME: リビジョンを含む ACL ポリシーの名前。
  • REGION: ACL ポリシーが配置されているリージョン。

ACL ポリシーを変更する

Memorystore for Redis Cluster で ACL ポリシーを変更することで、セキュリティを強化し、最小権限アクセスを適用して、運用の安全性を管理できます。ポリシーを変更するには、gcloud CLI を使用します。

ACL ポリシーにルールを追加する

ACL ポリシーのセキュリティを強化するには、ルールを追加します。

gcloud

ACL ポリシーにルールを追加するには、gcloud redis acl-policies update コマンドを使用します。

gcloud redis acl-policies update ACL_POLICY_NAME \
--region=REGION \
--add-rules=rule="on ~list:*",username="lucian"

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

  • ACL_POLICY_NAME: ACL ルールを追加する ACL ポリシーの名前
  • REGION: ACL ポリシーが配置されているリージョン

このルールは、list: で始まるすべての鍵に対する lucian アクセス権を付与します。

ACL ポリシーのルールを置き換える

ACL ポリシーの ACL ルールを置き換えると、セキュリティが強化され、運用上の安全性が向上し、ユーザー アクセス制御がよりきめ細かになります。たとえば、インシデント対応中に権限を取り消したり、デバッグ目的で一時的なアクセスを有効にしたりできます。

gcloud

ACL ポリシーのルールを置き換えるには、gcloud redis acl-policies update コマンドを使用します。

gcloud redis acl-policies update ACL_POLICY_NAME \
--region=REGION \
--rules=rule="on ~c*che",username="lucian"

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

  • ACL_POLICY_NAME: ACL ルールを置き換える ACL ポリシーの名前
  • REGION: ACL ポリシーが配置されているリージョン

ポリシーで置き換えるルールは、c*che パターンに一致するすべての鍵に対する lucian アクセス権を付与します。たとえば、cachecaacheceche などです。

ACL ポリシーからルールを削除する

ACL ルールが ACL ポリシーに適用されなくなった場合は、削除できます。

gcloud

ACL ポリシーからルールを削除するには、gcloud redis acl-policies update コマンドを使用します。

gcloud redis acl-policies update ACL_POLICY_NAME \
--region=REGION \
--remove-rules=rule="on ~set",username="lucian"

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

  • ACL_POLICY_NAME: ACL ルールを削除する ACL ポリシーの名前
  • REGION: ACL ポリシーが配置されているリージョン

このルールを削除すると、lucian に関連付けられている権限が取り消されます。クラスタにアクセスするには、luciandefault ユーザーとして接続する必要があります。このユーザーの権限が適用されます。

クラスタから ACL ポリシーを削除する

ACL ポリシーが Memorystore for Redis Cluster のクラスタに適用されなくなった場合は、削除できます。ポリシーを削除するには、gcloud CLI を使用します。

gcloud

クラスタから ACL ポリシーを削除するには、gcloud redis clusters update コマンドを使用します。

gcloud redis clusters update CLUSTER_ID \
--acl-policy="" \
--region=REGION

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

  • CLUSTER_ID: ACL ポリシーを削除するクラスタの ID
  • REGION: クラスタが配置されているリージョン

acl-policy パラメータの "" 値は空の文字列です。これは、クラスタから ACL ポリシーを削除することを示します。

ACL ポリシーを削除する

ACL ポリシーが不要になった場合は、削除できます。ポリシーは、gcloud CLI を使用して削除できます。

gcloud

ACL ポリシーを削除するには、gcloud redis acl-policies delete コマンドを使用します。

gcloud redis acl-policies delete ACL_POLICY_NAME \
--region=REGION

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

  • ACL_POLICY_NAME: 削除する ACL ポリシーの名前
  • REGION: ACL ポリシーが配置されているリージョン

Lua スクリプトを無効にする

ACL ポリシーを使用して、クラスタの Lua スクリプト機能を管理できます。Lua スクリプトを無効にしたり制限したりすると、パフォーマンス チューニング、クラスタの機能の簡素化、組織のセキュリティ ガイドラインの遵守に役立ちます。

ユーザーのスクリプト コマンドを無効にする

ユーザーが Lua スクリプトを実行できないように無効にするには、ACL ポリシーを使用して、ユーザーの ACL ルール文字列からスクリプト コマンドの権限を削除する必要があります。

Redis はコマンドをグループに分類します。Lua スクリプトは @scripting カテゴリに分類されます。ユーザー権限を削除する必要がある主なコマンドは次のとおりです。

  • EVAL: 文字列として提供された Lua スクリプトを実行します。
  • EVALSHA: SCRIPT LOAD コマンドを使用してキャッシュに保存された Lua スクリプトを実行します。
  • SCRIPT : スクリプト キャッシュを管理します(LOADFLUSHEXISTSKILL など)。

    SCRIPT コマンドには、次のサブコマンドが含まれます。

ユーザーに対して、すべてのスクリプト コマンドまたは特定のコマンドを無効にできます。スクリプト コマンドを無効にするには、gcloud CLI を使用して、コマンドまたはカテゴリの前にマイナス記号(-)を付けます。

ユーザーのすべてのスクリプト コマンドを無効にする

ユーザーのすべてのスクリプト コマンドを無効にするには、ACL ポリシーを作成してクラスタに割り当てるか、クラスタに割り当てられている ACL ポリシーを変更します。

ポリシーを作成する

lucian というユーザーのすべてのスクリプト コマンドを無効にする ACL ポリシーを作成するには、gcloud redis acl-policies create コマンドを使用します。

gcloud redis acl-policies create POLICY_NAME \
--region=REGION \
--rules=rule="on ~* +@all -@scripting",username=lucian

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

  • POLICY_NAME: ACL ポリシーの名前
  • REGION: ACL ポリシーを配置するリージョン

ポリシーを作成したら、新しいクラスタまたは既存のクラスタに割り当てる必要があります。

ポリシーの変更

lucian のすべてのスクリプト コマンドを無効にするように ACL ポリシーを変更するには、gcloud redis acl-policies update コマンドを使用します。

gcloud redis acl-policies update POLICY_NAME \
--region=REGION \
--rules=rule="on ~* +@all -@scripting",username=lucian

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

  • POLICY_NAME: ACL ポリシーの名前
  • REGION: ACL ポリシーが配置されているリージョン

ユーザーが必要とする特定の権限のみを付与する場合は、+@all 値を変更します。たとえば、ユーザーに読み取り専用コマンドへのアクセス権のみを付与する場合は、+@all+@read に変更します。設定できるユーザー権限の詳細については、Redis ACL のドキュメントをご覧ください。

ユーザーのスクリプト コマンドを無効にする

ユーザーに対して無効にする特定のコマンドをターゲットに設定できます。たとえば、SCRIPT FLUSH コマンドを除くすべてのスクリプト コマンドをユーザーが実行できるようにすることができます。ユーザーのスクリプト コマンドを無効にするには、ACL ポリシーを作成してクラスタに割り当てるか、クラスタに割り当てられている ACL ポリシーを変更します。

スクリプト コマンドは無効にできます。このセクションの例では、ユーザーの SCRIPT FLUSH コマンドを無効にします。スクリプト コマンドの一覧については、ユーザーのスクリプト コマンドを無効にするをご覧ください。

ポリシーを作成する

lucianSCRIPT FLUSH スクリプト コマンドを無効にする ACL ポリシーを作成するには、gcloud redis acl-policies create コマンドを使用します。

gcloud redis acl-policies create POLICY_NAME \
--region=REGION \
--rules=rule="on ~* -script|flush",username=lucian

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

  • POLICY_NAME: ACL ポリシーの名前
  • REGION: ACL ポリシーを配置するリージョン

ポリシーを作成したら、新しいクラスタまたは既存のクラスタに割り当てる必要があります。

ポリシーの変更

lucian のすべてのスクリプト コマンドを無効にするように ACL ポリシーを変更するには、gcloud redis acl-policies update コマンドを使用します。

gcloud redis acl-policies update POLICY_NAME \
--region=REGION \
--rules=rule="on ~* -script|flush",username=lucian

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

  • POLICY_NAME: ACL ポリシーの名前
  • REGION: ACL ポリシーが配置されているリージョン

ユーザーが必要とする特定の権限のみを付与する場合は、+@all 値を変更します。たとえば、ユーザーに読み取り専用コマンドへのアクセス権のみを付与する場合は、+@all+@read に変更します。設定できるユーザー権限の詳細については、Redis ACL のドキュメントをご覧ください。

デフォルト ユーザーを保護する

default スーパーユーザーのスクリプト権限を無効にするには、ACL ポリシーを作成してクラスタに割り当てるか、クラスタに割り当てられている ACL ポリシーを変更します。

ポリシーを作成する

default ユーザーのすべてのスクリプト コマンドを無効にする ACL ポリシーを作成するには、gcloud redis acl-policies create コマンドを使用します。

gcloud redis acl-policies create POLICY_NAME \
--region=REGION \
--rules=rule="on ~* +@all -@scripting",username=default

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

  • POLICY_NAME: ACL ポリシーの名前
  • REGION: ACL ポリシーを配置するリージョン

ポリシーを作成したら、新しいクラスタまたは既存のクラスタに割り当てる必要があります。

ポリシーの変更

ACL ポリシーを変更して default ユーザーのすべてのスクリプト コマンドを無効にするには、gcloud redis acl-policies update コマンドを使用します。

gcloud redis acl-policies update POLICY_NAME \
--region=REGION \
--rules=rule="on ~* +@all -@scripting",username=default

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

  • POLICY_NAME: ACL ポリシーの名前
  • REGION: ACL ポリシーが配置されているリージョン

default ユーザーに必要な特定の権限のみを付与する場合は、+@all 値を変更します。たとえば、このユーザーに読み取り専用コマンドへのアクセス権のみを付与する場合は、+@all+@read に変更します。設定できるユーザー権限の詳細については、Redis ACL のドキュメントをご覧ください。

トラブルシューティング

このセクションでは、ACL ポリシーの使用時に表示される可能性のあるエラー メッセージ、メッセージが表示される理由、メッセージのトラブルシューティングのヒントについて説明します。

エラー メッセージ 原因 トラブルシューティング
username cannot be empty ACL ポリシーのユーザー名に空の文字列または空白文字のみを含む文字列を設定しています。 英数字または特殊文字を含むユーザー名を使用します。次に、ACL ポリシーを再度作成します。
duplicate username found in ACL policy ACL ポリシーに重複するユーザー名があります。 エラーログを使用して、重複するユーザー名を見つけます。ACL ポリシー作成リクエストを変更して、ユーザー名に対して 1 つのルールのみを指定します。次に、ACL ポリシーを再度作成します。
ACL rule token cannot contain token. use either IAM or Basic Auth features to enable authentication ACL ポリシーでは、パスワード文字(<>#! など)や関連するコマンド(nopassresetpassreset など)は使用できません。 ACL ポリシーのルールから、すべてのパスワード文字と関連するコマンドを削除します。次に、ACL ポリシーを再度作成します。認証を設定するには、基本認証または IAM ベースの認証を有効にします。
passwords not allowed in ACL rules (token starts with char). use either IAM or Basic Auth features to enable authentication ACL ポリシーでは、パスワード文字(<>#! など)や関連するコマンド(nopassresetpassreset など)は使用できません。 ACL ポリシーのルールから、すべてのパスワード文字と関連するコマンドを削除します。次に、ACL ポリシーを再度作成します。認証を設定するには、基本認証または IAM ベースの認証を有効にします。
invalid ACL rule syntax 1 つ以上の ACL ポリシーのルールでアクセス文字列が正しくフォーマットされていません。 アクセス文字列を正しくフォーマットします。
ACL policy is in DELETING state and cannot be used ACL ポリシーをクラスタに割り当てようとしていますが、ポリシーのステータスが DELETING になっています。 別の ACL ポリシーをクラスタに割り当てます。
ACL_POLICY_IN_USE: ACL policy is in use by 1 or more clusters 1 つ以上のクラスタに割り当てられている ACL ポリシーを削除しようとしています。 ACL ポリシーを削除する前に、ポリシーが割り当てられているすべてのクラスタから削除する必要があります。ポリシーに割り当てられているクラスタを確認するには、ACL ポリシーに関する情報を表示するをご覧ください。
fast-failing the workflow as the resource is in DELETING state DELETING ステータスの ACL ポリシーを変更しようとしています。 ACL ポリシーのステータスが DELETING の場合、ポリシーを変更することはできません。