AWS Identity and Access Management (IAM) 認証を使用して Amazon ElastiCache Valkey や Redis OSS クラスターに接続する際、「AuthenticationError: invalid username-password pair or user is disabled (ユーザー名とパスワードのペアが無効か、ユーザーが無効化されています)」というエラーが発生します。
解決策
注: AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、「AWS CLI で発生したエラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。
ユーザーを作成する
次の手順を実行します。
- ElastiCache コンソールを開きます。
- [構成] で [ユーザー管理] を選択します。
- [ユーザーを作成] を選択し、次の情報を入力します。
[ユーザー ID] にユーザー ID を入力します。
[ユーザー名] にユーザー名を入力します。
注: IAM ユーザのユーザー ID とユーザー名は同一かつ、小文字である必要があります。
ドロップダウンリストから [エンジン] を選択します。
[認証モード] で [IAM 認証] を選択します。
[アクセス文字列] フィールドに on ~* +@all と入力します。
注: アクティブなユーザーに使用可能なすべてのキーとコマンドへのアクセスを許可するには、on ~*+@all というアクセス文字列を使用します。ユーザーに必要なアクセス許可のみを付与する、制限付きアクセス文字列を作成することをおすすめします。詳細については、「アクセス文字列を使用してアクセス許可を指定する」を参照してください。
- [作成] を選択します。
ユーザーグループを作成する
次の手順を実行します。
- ElastiCache コンソールを開きます。
- [構成] で **[ユーザーグループ管理]**を選択します。
- [ユーザーグループの作成] を選択します。
- [ユーザーグループ ID] にユーザーグループ ID を入力します。
- ドロップダウンリストの [エンジン] から該当するものを選択します。
- [選択したユーザー] セクションで [管理] を選択します。
- 先ほど作成したユーザーをユーザーのリストから選択します。
重要: [エンジン] で Redis を選択した場合は、Default という名前のユーザーを選択します。ElastiCache は、認証にパスワードを必要とせず、Redis への完全なアクセス許可を持つデフォルトユーザーを自動的に作成します。デフォルトのユーザー設定を変更する方法については、「コンソールと CLI を使用してユーザーとユーザーグループを作成する」を参照してください。
- [作成] を選択します。
IAM 認証を許可する
ElastiCache クラスターで転送中の暗号化 (TLS) を有効にします。
クラスターにロールベースのアクセス制御を設定する
次の手順を実行します。
- ElastiCache コンソールを開きます。
- クラスターリストから、該当するクラスターを選択します。
- [アクション] を選択し、[変更] を選択します。
- [アクセス制御] かde [ユーザーグループのアクセス制御リスト] を選択し、該当するユーザーグループを選択します。
- [変更をプレビュー] を選択します。
- [保存] を選択します。
IAM ポリシーを設定する
ElastiCache クラスターへの接続に使用する IAM ID に elasticache:Connect アクションを追加します。IAM ポリシーの例:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"elasticache:Connect"
],
"Resource": [
"AWS_RESOURCE_ARN_1",
"AWS_RESOURCE_ARN_2"
]
}
]
}
注: AWS_RESOURCE_ARN_1 を ElastiCache Valkey または Redis OSS クラスターの Amazon リソースネーム (ARN) に、AWS_RESOURCE_ARN_2 を ElastiCache 用の IAM ユーザーの ARN に置き換えます。
次に、IAM ロールを Amazon Elastic Compute Cloud (Amazon EC2) インスタンスまたは ElastiCache クラスターに接続する AWS Lambda 関数にアタッチします。詳細については、「IAM による認証」を参照してください。
注: 正しい IAM ポリシーを使用していても、AuthenticationError エラーが発生する場合は、組織内の他のポリシータイプに制限がないか確認してください。詳細については、「ポリシーを使用してアクセスを管理する」の「その他のポリシータイプ」を参照してください。
ネットワーク接続を確認する
ElastiCache クラスターとクライアントリソース間のネットワーク接続を検証します。
認証トークンを生成する
IAM 認証を使用して ElastiCache クラスターに接続する場合は、パスワードではなく、認証トークンを使用します。IAM 認証トークンは 15 分間有効です。
長時間接続する場合は、認証情報プロバイダーインターフェイスをサポートする Valkey または Redis OSS クライアントの使用をおすすめします。接続を 12 時間延長するには、新しいトークンを使用して AUTH または HELLO を送信します。
IAM 認証トークンを生成して ElastiCache クラスターに接続するには、次の手順を実行します。
-
デモアプリケーションを実行するための Amazon EC2 インスタンスを設定します。手順については、GitHub のウェブサイトで「Elasticache IAM 認証のデモアプリケーション」を参照してください。
-
デモアプリの使用時にトークンを生成するには、次の Java CLI コマンドを実行します。
java -cp target/ElastiCacheIAMAuthDemoApp-1.0-SNAPSHOT.jar \
com.amazon.elasticache.IAMAuthTokenGeneratorApp --region REGION --replication-group-id REPLICATION-GROUP-ID --user-id USER-ID
注: 実際のものでそれぞれ、REGION を AWS リージョンに、REPLICATION-GROUP-ID を ElastiCache レプリケーショングループの ID に、USER-ID を ElastiCache 用の IAM ユーザー ID に置き換えます。
-
トークンをパスワードとして使用して ElastiCache クラスターに接続します。ElastiCache クラスターへの接続には、Valkey または Redis CLI、またはそのクライアント API ライブラリを使用できます。
Valkey CLI のコマンド例:
valkey-cli -h PRIMARY-ENDPOINT -p 6379 --tls -c --user USER ID -a TEMPORARY-SECURITY-CREDENTIAL
Redis CLI のコマンド例:
redis6-cli -h PRIMARY-ENDPOINT -p 6379 --tls -c --user USER-ID -a TEMPORARY-SECURITY-CREDENTIAL
注: 実際のものでそれぞれ、PRIMARY-ENDPOINT を ElastiCache クラスターのプライマリエンドポイントに、USER-ID を IAM ユーザー ID に、TEMPORARY-SECURITY-CREDENTIAL を IAM 認証トークンに置き換えます。
重要: valkey-cli コマンドまたは redis-cli コマンドを使用する際は、引数 --tls と -a の両方を含める必要があります。これらの引数を指定しなかったり、入力した認証情報に誤りがあったりした場合、NOAUTH または AUTH failed というエラーメッセージが表示されます。valkey-cli または redis-cli コマンドに引数 --tls のみを指定して使用する場合は、接続後に AUTH user-id temporary-security-credential を使用して認証を完了します、。
Lettuce Redis OSS クライアントの例:
RedisURI redisURI = RedisURI.builder()
.withHost(CACHE-NAME)
.withPort(6379)
.withSsl(true)
.withAuthentication(USER-ID, TEMPORARY-SECURITY-CREDENTIAL)
.build();
return RedisClient.create(redisURI);
Redis OSS または Valkey クライアント設定のコンポーネントをレビューする
Redis OSS または Valkey クライアントで次の設定を検証します。
- Valkey または Redis OSS クライアントには、正しい ElastiCache クラスターエンドポイントとポートが設定されていること。
- Valkey または Redis OSS クライアントは SSL/TLS をサポートしていること。
- 使用するユーザー名は ElastiCache が有効な IAM ユーザーであること。
- ElastiCache クラスターの設定、エンジンタイプ、およびバージョンパラメーターと一致する最新バージョンの Valkey または Redis OSS クライアントを使用していること。クライアントバージョンが古かったり、互換性のないものであったりする場合、認証エラーの原因となります。
- 要件に合わせてクライアントのタイムアウトパラメータを設定したこと。タイムアウトを正しく設定しない場合、接続が途中で終了し、認証エラーが発生する可能性があります。
Amazon CloudWatch メトリクスを確認する
Amazon CloudWatch メトリクスを参考に、ElastiCache クラスターの状態とアクティビティを監視します。認証の問題を特定するには、次のメトリクスを監視することをおすすめします。
- CurrConnections、NewConnections などの接続メトリクスを確認します。新規接続が減少している場合、認証エラーが原因で接続が失敗したことが示唆されます。ElastiCache は、各ケースにおいて 2 ~ 6 件の接続を使用してクラスターを監視します。詳細については、「Valkey および Redis OSS のメトリクス」を参照してください。
- IamAuthenticationExpirations を確認すると、接続障害の原因となる可能性がある、期限切れの IAM 認証トークンを監視できます。
- IamAuthenticationThrottling を参照し、ElastiCache によりスロットリングされた IAM 認証情報による認証試行回数を確認します。
関連情報
IAM を使用して Amazon ElastiCache for Redis クラスターへのアクセス管理を簡素化する
ElastiCache IAM 認証デモアプリケーション (GitHub のウェブサイト)
ElastiCache IAM 認証情報プロバイダーを使用して Redis に接続する方法 (Redisson のウェブサイト)