ロールベースのアクセスコントロール (RBAC) - Amazon ElastiCache フォー・レディス

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

ロールベースのアクセスコントロール (RBAC)

Redis AUTH コマンドによる認証 で説明されているように、Redis 6.0 以降では、Redis AUTH コマンドを使用してユーザーを認証する代わりに、ロールベースのアクセス制御 (RBAC) と呼ばれる機能を使用できます。RBAC は、サーバーレスキャッシュへのアクセスを制御する唯一の手段でもあります。

Redis AUTH では、クライアントのトークンが認証されていれば、認証済みのすべてのクライアントにキャッシュへのフルアクセスが認められますが、RBAC はこれとは異なり、キャッシュへのアクセスをユーザーグループを通じて制御できます。ユーザーグループは、キャッシュへのアクセスを分類する手段として設計されています。

RBAC では、以下で説明されているように、アクセス文字列を使用してユーザーを作成し、ユーザーに特定のアクセス許可を割り当てます。特定のロール (管理者、人事) に該当するユーザーグループにユーザーを割り当てます。その後、それらのグループが 1 つ以上の ElastiCache for Redis キャッシュにデプロイされます。これにより、同じ Redis キャッシュを使用するクライアント間にセキュリティ境界を設け、クライアントが互いのデータにアクセスできないようにすることができます。

RBAC は、Redis 6 の [Redis ACL] の導入をサポートするように設計されています。ElastiCache for Redis キャッシュで RBAC を使用する場合は、制約がいくつかあります。

  • アクセス文字列にパスワードを指定することはできません。パスワードは CreateUser または ModifyUser コールで設定します。

  • ユーザー権限については、on および off をアクセス文字列の一部としてパスします。アクセス文字列にどちらも指定されていない場合、ユーザーには off が割り当てられ、キャッシュへのアクセス権はありません。

  • 禁止されたコマンドや名前を変更したコマンドは使用できません。禁止または名前変更されたコマンドを指定すると、例外がスローされます。名前を変更したコマンドでアクセスコントロールリスト (ACL) を使用する場合は、コマンドの元の名前、つまり名前が変更される前のコマンドの名前を指定します。

  • reset コマンドを、アクセス文字列の一部として使用することはできません。API パラメータを用いてパスワードを指定すると、ElastiCache for Redis がパスワードを管理します。したがって、reset を使用することはできません。それによりユーザーのすべてのパスワードが削除されるからです。

  • Redis 6 は、ACL リスト コマンドを導入します。このコマンドは、ユーザーのリストと、各ユーザーに適用される ACL ルールを返します。ElastiCache for Redis は ACL LIST コマンドをサポートしますが、Redis のようにパスワードハッシュのサポートは含まれていません。ElastiCache for Redis を使用すると、describe-users オペレーションを使用して、アクセス文字列に含まれるルールなど、同様の情報を取得できます。ただし、describe-users は、ユーザーパスワードを取得しません。

    ElastiCache for Redis でサポートされているその他の読み取り専用コマンドには、ACL WHOAMIACL USERSACL CATなどがあります。ElastiCache for Redis は、他の書き込みベースの ACL コマンドをサポートしていません。

  • 以下の制約が適用されます。

    [リソース] 最大許容数
    ユーザーグループあたりのユーザー数 100
    ユーザー数 1,000
    ユーザーグループの数 100

ElastiCache for Redis での RBAC の使用については、以下で詳しく説明します。

アクセス文字列を使用したアクセス許可の指定

ElastiCache for Redis キャッシュへのアクセス許可を指定するには、アクセス文字列を作成し、AWS CLI またはAWS Management Consoleを使用して、そのアクセス文字列をユーザーに割り当てます。

アクセス文字列は、ユーザーに適用されるスペース区切りルールのリストとして定義されます。それらは、ユーザーが実行できるコマンドと、ユーザーが操作できるキーを定義します。コマンドを実行するには、ユーザーは、実行されているコマンドと、そのコマンドによってアクセスされているすべてのキーにアクセスできる必要があります。ルールは左から右に累積的に適用され、提供された文字列に冗長性がある場合は、提供された文字列の代わりに、より単純な文字列を使用できます。

ACL ルールの構文の詳細については、「ACL」を参照してください。

次の例では、アクセス文字列は、使用可能なすべてのキーおよびコマンドにアクセスできるアクティブなユーザーを表します。

on ~* +@all

アクセス文字列の構文は、次のように分類されます。

  • on — ユーザーはアクティブなユーザーです。

  • ~* — アクセス権はすべての使用可能なキーに与えられます。

  • +@all — アクセス権はすべての使用可能なコマンドに与えられます。

上記の設定は、最も制限が緩い設定です。これらの設定を変更して、セキュリティを強化できます。

次の例では、アクセス文字列は「app::」キースペースで始まるキーに対する読み取りアクセスに制限されたアクセス権を持つユーザーを表します。

on ~app::* -@all +@read

ユーザーがアクセス権を持つコマンドを一覧表示することで、これらのアクセス許可をさらに絞り込むことができます。

+command1 — ユーザーのコマンドへのアクセスは command1 に制限されます。

+@category — ユーザーのアクセスは、コマンドのカテゴリーに制限されます。

アクセス文字列をユーザーに割り当てる方法については、「コンソールと CLI を使用したユーザーおよびユーザーグループの作成」を参照してください。

既存のワークロードを ElastiCache に移行する場合は、ACL LIST を呼び出すことでアクセス権を取得して、ユーザーおよびパスワードハッシュを除外できます。

Redis バージョン 6.2 以降では、以下のアクセス文字列構文もサポートされています。

  • &* — アクセス権はすべての使用可能なチャネルに与えられます。

Redis バージョン 7.0 以降では、以下のアクセス文字列構文もサポートされています。

  • | — サブコマンドをブロックするために使用できます (例:「-config|set」)。

  • %R~<pattern> — 指定された読み取りキーパターンを追加します。これは通常のキーパターンと同様に動作しますが、指定されたパターンに一致するキーからの読み取り権限のみを許可します。詳細については、「キーのアクセス許可」を参照してください。

  • %W~<pattern> — 指定された書き込みキーパターンを追加します。これは通常のキーパターンと同様に動作しますが、指定されたパターンに一致するキーに書き込む権限のみを許可します。詳細については、「キーのアクセス許可」を参照してください。

  • %RW~<pattern>~<pattern> のエイリアス。

  • (<rule list>) — ルールを照合する新しいセレクターを作成します。セレクターはユーザーアクセス許可の後に評価され、定義されている順序に従って評価されます。コマンドがユーザーアクセス許可または任意のセレクターと一致する場合、そのコマンドは許可されます。詳細については、ACL セレクターを参照してください。

  • clearselectors — ユーザーにアタッチされているセレクターをすべて削除します。

ElastiCache for Redis のキャッシュへの RBAC の適用

ElastiCache for Redis RBAC を使用するには、次のステップに従います。

  1. 1 つ以上のユーザーを作成します。

  2. ユーザーグループを作成し、ユーザーをグループに追加します。

  3. 転送時の暗号化が有効なキャッシュにユーザーグループを割り当てます。

これらのステップは、以下に詳細が説明されます。

コンソールと CLI を使用したユーザーおよびユーザーグループの作成

RBAC ユーザーのユーザー情報は、ユーザー ID、ユーザー名、およびオプションのパスワードとアクセス文字列です。アクセス文字列は、キーとコマンドでのアクセス許可レベルを提供します。ユーザー ID はユーザーに対して一意であり、ユーザー名はエンジンに渡されるものです。

指定するユーザー許可が、ユーザーグループの意図した目的に合っていることを確認してください。たとえば、Administrators という名前のユーザーグループを作成した場合、そのグループに追加するすべてのユーザーは、キーおよびコマンドへのフルアクセスに設定されたアクセス文字列を持つ必要があります。e-commerce ユーザーグループ内のユーザーでは、アクセス文字列を読み取り専用アクセスに設定できます。

ElastiCache は、ユーザー ID とユーザー名 "default" を使用してデフォルトユーザーを自動的に設定し、それをすべてのユーザーグループに追加します。このユーザーを変更または削除することはできません。このユーザーは、以前の Redis バージョンのデフォルト動作との互換性を意図しており、すべてのコマンドを呼び出してすべてのキーにアクセスできるようにするアクセス文字列を持っています。

適切なアクセスコントロールをキャッシュに追加するには、このデフォルトユーザーを、有効になっていない、または強力なパスワードを使用する新しいユーザーに置き換えます。デフォルトユーザーを変更するには、ユーザー名が default に設定された新しいユーザーを作成します。その後、元のデフォルトユーザーと入れ替えることができます。

次の手順では、元の default ユーザーを、変更されたアクセス文字列を持つ別の default ユーザーと入れ替える方法を示します。

コンソールでデフォルトユーザーを変更するには
  1. AWS Management Console にサインインして、Amazon ElastiCache コンソール (https://console.aws.amazon.com/elasticache/) を開きます。

  2. ナビゲーションペインで [ユーザーグループの管理] を選択します。

  3. [ユーザーグループ ID] で、変更対象の ID を選択します。チェックボックスではなく、リンクを選択するようにしてください。

  4. [Modify] (変更) を選択します。

  5. [変更] ウィンドウで、[管理] を選択し、[ユーザー名] で、デフォルトユーザーとして使用したいユーザーを選択します。

  6. [選択] を選択します。

  7. [Modify] (変更) を選択します。これを行うと、元のデフォルトユーザーが確立していたキャッシュへの既存の接続はすべて終了します。

AWS CLI を使用してデフォルトユーザーを変更するには
  1. 以下のコマンドを使用して、ユーザー名 default で新しいユーザーを作成します。

    Linux、macOS、Unix の場合:

    aws elasticache create-user \ --user-id "new-default-user" \ --user-name "default" \ --engine "REDIS" \ --passwords "a-str0ng-pa))word" \ --access-string "off +get ~keys*"

    Windows の場合:

    aws elasticache create-user ^ --user-id "new-default-user" ^ --user-name "default" ^ --engine "REDIS" ^ --passwords "a-str0ng-pa))word" ^ --access-string "off +get ~keys*"
  2. ユーザーグループを作成し、前に作成したユーザーを追加します。

    Linux、macOS、Unix の場合:

    aws elasticache create-user-group \ --user-group-id "new-group-2" \ --engine "REDIS" \ --user-ids "new-default-user"

    Windows の場合:

    aws elasticache create-user-group ^ --user-group-id "new-group-2" ^ --engine "REDIS" ^ --user-ids "new-default-user"
  3. 新しい default ユーザーを元の default ユーザーと入れ替えます。

    Linux、macOS、Unix の場合:

    aws elasticache modify-user-group \ --user-group-id test-group \ --user-ids-to-add "new-default-user" \ --user-ids-to-remove "default"

    Windows の場合:

    aws elasticache modify-user-group ^ --user-group-id test-group ^ --user-ids-to-add "new-default-user" ^ --user-ids-to-remove "default"

    この変更オペレーションが呼び出されると、元のデフォルトユーザーが確立していたキャッシュへの既存の接続はすべて終了します。

ユーザーを作成するときは、最大 2 つのパスワードを設定できます。パスワードを変更しても、キャッシュへの既存の接続はすべて維持されます。

特に、ElastiCache for Redis で RBAC を使用する場合は、以下のユーザーパスワードの制約に注意してください。

  • パスワードは、印刷可能な 16~128 文字にする必要があります。

  • 次の英数字以外の文字は使用できません: , "" / @

コンソールおよび CLI を使用したユーザーの管理

コンソール上でユーザーを管理するには、次の手順に従います。

コンソールでユーザーを管理するには
  1. AWS Management Console にサインインして、Amazon ElastiCache コンソール (https://console.aws.amazon.com/elasticache/) を開きます。

  2. Amazon ElastiCache ダッシュボードで、[ユーザー管理] を選択します。以下のオプションが利用できます。

    • [ユーザーを作成] — ユーザーの作成時に、ユーザー ID、ユーザー名、認証モード、およびアクセス文字列を入力します。アクセス文字列は、ユーザーが許可されたキーとコマンドのアクセス許可レベルを設定します。

      ユーザーを作成するときは、最大 2 つのパスワードを設定できます。パスワードを変更しても、キャッシュへの既存の接続はすべて維持されます。

    • [ユーザーを変更] — ユーザーの認証設定を更新したり、アクセス文字列を変更したりできます。

    • [ユーザーを削除] — アカウントは、所属先のすべてのユーザーグループから削除されます。

AWS CLI でユーザーを管理するには、次の手順を使用します。

CLI を使用してユーザーを変更するには
  • modify-user コマンドを使用して、ユーザーのパスワードまたはパスワードを更新したり、ユーザーのアクセス権を変更したりします。

    ユーザーが変更されると、そのユーザーに関連付けられたユーザーグループが更新され、そのユーザーグループに関連付けられたキャッシュも更新されます。既存の接続はすべて維持されます。以下は例です。

    Linux、macOS、Unix の場合:

    aws elasticache modify-user \ --user-id user-id-1 \ --access-string "~objects:* ~items:* ~public:*" \ --no-password-required

    Windows の場合:

    aws elasticache modify-user ^ --user-id user-id-1 ^ --access-string "~objects:* ~items:* ~public:*" ^ --no-password-required
注記

nopass オプションを使用することは推奨されません。その場合、ユーザーのアクセス許可を読み取り専用に設定して、限定されたキーのセットにアクセスすることをお勧めします。

CLI を使用してサービスロールを削除するには
  • ユーザーを削除するには、delete-user コマンドを使用します。アカウントが削除され、そのアカウントが属するユーザーグループから削除されます。次に例を示します。

    Linux、macOS、Unix の場合:

    aws elasticache delete-user \ --user-id user-id-2

    Windows の場合:

    aws elasticache delete-user ^ --user-id user-id-2

ユーザーのリストを表示するには、[describe-users] オペレーションを呼び出します。

aws elasticache describe-users

コンソールおよび CLI を使用したユーザーグループの管理

次に示すように、ユーザーグループを作成して、1 つまたは複数のレプリケーショングループに対するユーザーのアクセスを分類および制御できます。

コンソールを使用してユーザーグループを管理するには、次の手順に従います。

コンソールを使用してユーザーグループを管理するには
  1. AWS Management Console にサインインして、Amazon ElastiCache コンソール (https://console.aws.amazon.com/elasticache/) を開きます。

  2. Amazon ElastiCache ダッシュボードで、[ユーザーグループの管理] を選択します。

    以下のオペレーションは、新しいユーザーグループを作成するために使用できます。

    • [作成] – ユーザーグループの作成時に、ユーザーを追加し、ユーザーグループをキャッシュに割り当てます。例えば、キャッシュで管理者ロールを持つユーザーの Admin ユーザーグループを作成できます。

      重要

      ユーザーグループを作成するときは、デフォルトユーザーを含める必要があります。

    • [ユーザーの追加] — ユーザーをユーザーグループに追加します。

    • [ユーザーの削除] — ユーザーグループからユーザーを削除します。ユーザーがユーザーグループから削除された場合、そのユーザーが確立しているキャッシュへの既存の接続はすべて終了します。

    • [削除] — ユーザーグループを削除するには、これを使用します。グループに属するユーザーではなく、ユーザーグループ自体が削除されることに注意してください。

    既存のユーザーグループでは、次のことを実行できます。

    • [ユーザーの追加] — 既存のユーザーをユーザーグループに追加します。

    • [ユーザーを削除する] — ユーザーグループから既存のユーザーを削除します。

      注記

      ユーザーはユーザーグループから削除されますが、システムからは削除されません。

次の手順で、CLI を使用してユーザーグループを管理します。

CLI を使用して新しいユーザーグループを作成し、ユーザーを追加するには
  • 次に示すように、create-user-group コマンドを使用します。

    Linux、macOS、Unix の場合:

    aws elasticache create-user-group \ --user-group-id "new-group-1" \ --engine "REDIS" \ --user-ids user-id-1, user-id-2

    Windows の場合:

    aws elasticache create-user-group ^ --user-group-id "new-group-1" ^ --engine "REDIS" ^ --user-ids user-id-1, user-id-2
CLI を使用して新しいユーザーを追加するか、現在のメンバーを削除してユーザーグループを変更するには
  • 次に示すように、modify-user-group コマンドを使用します。

    Linux、macOS、Unix の場合:

    aws elasticache modify-user-group --user-group-id new-group-1 \ --user-ids-to-add user-id-3 \ --user-ids-to-remove user-id-2

    Windows の場合:

    aws elasticache modify-user-group --user-group-id new-group-1 ^ --user-ids-to-add userid-3 ^ --user-ids-to-removere user-id-2
注記

ユーザーグループから削除されたユーザーに属する開いている接続はすべて、このコマンドによって終了します。

CLI を使用してターゲットグループを削除するには
  • 次に示すように、delete-user-group コマンドを使用します。グループに属するユーザーではなく、ユーザーグループ自体が削除されます。

    Linux、macOS、Unix の場合:

    aws elasticache delete-user-group / --user-group-id

    Windows の場合:

    aws elasticache delete-user-group ^ --user-group-id

ユーザーグループのリストを表示するには、describe-user-groups オペレーションを呼び出すことができます。

aws elasticache describe-user-groups \ --user-group-id test-group

サーバーレスキャッシュへのユーザーグループの割り当て

ユーザーグループを作成してユーザーを追加した後、RBAC の実装手順の締めくくりとして、ユーザーグループをサーバーレスキャッシュに割り当てます。

コンソールを使用したサーバーレスキャッシュへのユーザーグループの割り当て

AWS Management Console を使用してユーザーグループをサーバーレスキャッシュに追加するには、次の手順に従います。

AWS CLI を使用したサーバーレスキャッシュへのユーザーグループの割り当て

以下の AWS CLI オペレーションでは、user-group-id パラメータに値 my-user-group-id を指定して、サーバーレスキャッシュを作成します。サブネット グループ sng-test を、実存のサブネットグループに置き換えます。

主要パラメータ
  • --engineredis を指定する必要があります。

  • --user-group-id — この値には、キャッシュへの特定のアクセス許可を割り当てられたユーザーで構成されるユーザーグループの ID を指定します。

Linux、macOS、Unix の場合:

aws elasticache create-serverless-cache \ --serverless-cache-name "new-serverless-cache" \ --description "new-serverless-cache" \ --engine "redis" \ --user-group-id "new-group-1"

Windows の場合:

aws elasticache create-serverless-cache ^ --serverless-cache-name "new-serverless-cache" ^ --description "new-serverless-cache" ^ --engine "redis" ^ --user-group-id "new-group-1"

以下の AWS CLI オペレーションでは、user-group-id パラメータに値 my-user-group-id を指定して、サーバーレスキャッシュを変更します。

Linux、macOS、Unix の場合:

aws elasticache modify-serverless-cache \ --serverless-cache-name serverless-cache-1 \ --user-group-id "new-group-2"

Windows の場合:

aws elasticache modify-serverless-cache ^ --serverless-cache-name serverless-cache-1 ^ --user-group-id "new-group-2"

キャッシュに加えられた変更は、非同期で更新されます。イベントを表示して、この進行状況をモニタリングできます。詳細については、「ElastiCache イベントの表示」を参照してください。

レプリケーショングループへのユーザーグループの割り当て

ユーザーグループを作成してユーザーを追加した後、RBAC を実装する最後の手順では、ユーザーグループをレプリケーショングループに割り当てます。

コンソールを使用したレプリケーショングループへのユーザーグループの割り当て

AWS Management Console を使用してユーザーグループをレプリケーションに追加するには、以下を行います。

AWS CLI を使用したレプリケーショングループへのユーザーグループの割り当て

以下の AWS CLI オペレーションでは、転送時の暗号化 (TLS) が有効で、値 my-user-group-id を持つ user-group-ids パラメータを使用したレプリケーショングループを作成します。サブネット グループ sng-test を、実存のサブネットグループに置き換えます。

主要パラメータ
  • --engineredis を指定する必要があります。

  • --engine-version - 6.0 以降を指定する必要があります。

  • --transit-encryption-enabled — 認証およびユーザーグループの関連付けに必要です。

  • --user-group-ids — この値には、キャッシュへの特定のアクセス許可を割り当てられたユーザーで構成されるユーザーグループの ID を指定します。

  • --cache-subnet-group — ユーザーグループを関連付けるために必要です。

Linux、macOS、Unix の場合:

aws elasticache create-replication-group \ --replication-group-id "new-replication-group" \ --replication-group-description "new-replication-group" \ --engine "redis" \ --cache-node-type cache.m5.large \ --transit-encryption-enabled \ --user-group-ids "new-group-1" \ --cache-subnet-group "cache-subnet-group"

Windows の場合:

aws elasticache create-replication-group ^ --replication-group-id "new-replication-group" ^ --replication-group-description "new-replication-group" ^ --engine "redis" ^ --cache-node-type cache.m5.large ^ --transit-encryption-enabled ^ --user-group-ids "new-group-1" ^ --cache-subnet-group "cache-subnet-group"

以下の AWS CLI オペレーションでは、転送時の暗号化 (TLS) が有効で、値 my-user-group-id を持つ user-group-ids パラメータを使用したレプリケーショングループを変更します。

Linux、macOS、Unix の場合:

aws elasticache modify-replication-group \ --replication-group-id replication-group-1 \ --user-group-ids-to-remove "new-group-1" \ --user-group-ids-to-add "new-group-2"

Windows の場合:

aws elasticache modify-replication-group ^ --replication-group-id replication-group-1 ^ --user-group-ids-to-remove "new-group-1" ^ --user-group-ids-to-add "new-group-2"

応答内の PendingChanges を書き留めます。キャッシュに加えられた変更は、非同期で更新されます。イベントを表示して、この進行状況をモニタリングできます。詳細については、「ElastiCache イベントの表示」を参照してください。

Redis AUTH から RBAC への移行

Redis AUTH コマンドによる認証 で説明されているように Redis AUTHを使用していて、RBAC の使用に移行するには、次の手順を使用します。

次の手順を使用して、コンソールを使用して Redis AUTH から RBAC に移行します。

コンソールを使用して Redis AUTH から RBAC に移行するには
  1. AWS Management Console にサインインして、ElastiCache コンソール (https://console.aws.amazon.com/elasticache/) を開きます。

  2. 右上のリストから、変更対象のキャッシュが存在する AWS リージョンを選択します。

  3. ナビゲーションペインで、変更対象のキャッシュで実行されているエンジンを選択します。

    選択したエンジンのキャッシュのリストが表示されます。

  4. キャッシュのリストで、変更対象のキャッシュの名前を選択します。

  5. [アクション]、[変更] の順に選択します。

    [変更] ウィンドウが表示されます。

  6. [アクセスコントロール] で、[ユーザーグループのアクセスコントロールリスト] を選択します。

  7. [ユーザーグループのアクセスコントロールリスト] で、ユーザーグループを選択します。

  8. [変更をプレビュー] を選択し、次の画面で [変更] を選択します。

次の手順で、CLI を使用して Redis AUTH から RBAC に移行します。

CLI を使用して Redis AUTH から RBAC に移行するには
  • 次に示すように、modify-replication-group コマンドを使用します。

    Linux、macOS、Unix の場合:

    aws elasticache modify-replication-group --replication-group-id test \ --auth-token-update-strategy DELETE \ --user-group-ids-to-add user-group-1

    Windows の場合:

    aws elasticache modify-replication-group --replication-group-id test ^ --auth-token-update-strategy DELETE ^ --user-group-ids-to-add user-group-1

RBAC から Redis AUTH への移行

RBAC を使用していて、Redis AUTH に移行する場合は、「RBAC から Redis AUTH への移行」を参照してください。

注記

ElastiCache キャッシュのアクセスコントロールを無効にする必要がある場合は、AWS CLI を使用して無効にする必要があります。詳細については、「ElastiCache Redis キャッシュでのアクセス制御の無効化」を参照してください。