ロールベースのアクセスコントロール (RBAC) を使用したユーザーの認証 - Amazon ElastiCache for Redis

ロールベースのアクセスコントロール (RBAC) を使用したユーザーの認証

Redis AUTH コマンドによるユーザーの認証 で説明されているように、Redis 6.0 以降では、Redis AUTH コマンドを使用してユーザーを認証する代わりに、ロールベースのアクセス制御 (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
    ユーザー数 1000
    ユーザーグループの数 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 を呼び出すことでアクセス権を取得して、ユーザーおよびパスワードハッシュを除外できます。

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. ナビゲーションペインで、[Redis] を選択します。

  3. [ユーザーグループの管理] を選択します。

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

  5. [デフォルトの入れ替え] を選択します。

  6. [デフォルトの入れ替え] ウィンドウで、[デフォルトユーザー] では、デフォルトユーザーとして使用するユーザーを選択します。

  7. [Swap] を選択します。これを行うと、元のデフォルトユーザーが持っていたレプリケーショングループへの既存の接続はすべて終了します。

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

    上記の例では、次の応答を返します。

    { "UserId": "user-id-1", "UserName": "user-name-1", "Status": "modifying", "Engine": "redis", "AccessString": "off ~objects:* ~items:* ~public:* -@all", "UserGroupIds": [ "new-group-1" ], "Authentication": { "Type": "no-password" }, "ARN": "arn:aws:elasticache:us-east-1:493071037918:user:user-id-1" }
注記

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

    上記の例では、次の応答を返します。

    { "UserId": "user-id-2", "UserName": "user-name-2", "Status": "deleting", "Engine": "redis", "AccessString": "on ~keys* -@all +get", "UserGroupIds": [ "new-group-1" ], "Authentication": { "Type": "password", "PasswordCount": 1 }, "ARN": "arn:aws:elasticache:us-east-1:493071037918:user:user-id-2" }

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

aws elasticache describe-users { "Users": [ { "UserId": "user-id-1", "UserName": "user-id-1", "Status": "active", "Engine": "redis", "AccessString": "+get ~keys*", "UserGroupIds": [], "Authentication": { "Type": "password", "PasswordCount": 1 } } ] }

コンソールおよび 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

    上記の例では、次の応答を返します。

    { "UserGroupId": "new-group-1", "Status": "creating", "Engine": "redis", "UserIds": [ "user-id-1", "user-id-2" ], "ReplicationGroups": [], "ARN": "arn:aws:elasticache:us-east-1:493071037918:usergroup:new-group-1" }

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-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

    上記の例では、次の応答を返します。

    { "UserGroupId": "new-group-1", "Status": "modifying", "Engine": "redis", "UserIds": [ "user-id-1", "user-id-2" ], "PendingChanges": { "UserIdsToRemove": [ "user-id-2" ], "UserIdsToAdd": [ "user-id-3" ] }, "ReplicationGroups": [], "ARN": "arn:aws:elasticache:us-east-1:493071037918:usergroup:new-group-1" }
注記

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

CLI を使用してターゲットグループを削除するには

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

    Linux、macOS、Unix の場合:

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

    Windows の場合:

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

    上記の例では、次の応答を返します。

    aws elasticache delete-user-group --user-group-id "new-group-1" { "UserGroupId": "new-group-1", "Status": "deleting", "Engine": "redis", "UserIds": [ "user-id-1", "user-id-3" ], "ReplicationGroups": [], "ARN": "arn:aws:elasticache:us-east-1:493071037918:usergroup:new-group-1" }

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

aws elasticache describe-user-groups \ --user-group-id test-group
{ "UserGroups": [{ "UserGroupId": "test-group", "Status": "creating", "Engine": "redis", "UserIds": [ "defaut", "test-user-1" ], "ReplicationGroups": [] }] }

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

ユーザーグループを作成してユーザーを追加した後、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 — この値は、ユーザーで構成されるユーザーグループにクラスターで指定されたアクセス許可を提供します。

  • --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" \ --engine-version "6.0" \ --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" ^ --engine-version "6.0" ^ --cache-node-type cache.m5.large ^ --transit-encryption-enabled ^ --user-group-ids "new-group-1" ^ --cache-subnet-group "cache-subnet-group"

上記のコードは、次の応答を返します。

{ "ReplicationGroup": { "ReplicationGroupId": "new-replication-group", "Description": "new-replication-group", "Status": "creating", "PendingModifiedValues": {}, "MemberClusters": [ "new-replication-group-001" ], "AutomaticFailover": "disabled", "SnapshotRetentionLimit": 0, "SnapshotWindow": "10:30-11:30", "ClusterEnabled": false, "UserGroupIds": ["new-group-1"] "CacheNodeType": "cache.m5.large", "DataTiering": "disabled" "TransitEncryptionEnabled": true, "AtRestEncryptionEnabled": false } }

以下の 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"

上記のコードは、次の応答 (省略形) を返します。

{ "ReplicationGroupId": "replication-group-1", "PendingChanges": { "UserGroups": { "UserGroupIdsToRemove": ["new-group-1"], "UserGroupIdsToAdd": ["new-group-2"] } } . . . "UserGroupIds": ["new-group-1"] }
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" { "ReplicationGroupId": "replication-group-1", "PendingChanges": { "UserGroups": { "UserGroupIdsToRemove": ["new-group-1"], "UserGroupIdsToAdd": ["new-group-2"] } } . . . "UserGroupIds": ["new-group-1"] }

応答内の 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. [アクション]、[変更] の順に選択します。

    [Modify Cluster] ウィンドウが表示されます。

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

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

  8. [Modify] を選択します。

次の手順で、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 への移行」を参照してください。