

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

# MemoryDB 内のデータ保護
<a name="data-protection"></a>

責任 AWS [共有モデル](https://aws.amazon.com/compliance/shared-responsibility-model/)、 でのデータ保護に適用されます。このモデルで説明されているように、 AWS はすべての を実行するグローバルインフラストラクチャを保護する責任があります AWS クラウド。ユーザーは、このインフラストラクチャでホストされるコンテンツに対する管理を維持する責任があります。また、使用する「 AWS のサービス 」のセキュリティ設定と管理タスクもユーザーの責任となります。データプライバシーの詳細については、[データプライバシーに関するよくある質問](https://aws.amazon.com/compliance/data-privacy-faq/)を参照してください。欧州でのデータ保護の詳細については、*AWS セキュリティブログ*に投稿された「[AWS 責任共有モデルおよび GDPR](https://aws.amazon.com/blogs/security/the-aws-shared-responsibility-model-and-gdpr/)」のブログ記事を参照してください。

データ保護の目的で、認証情報を保護し AWS アカウント 、 AWS IAM アイデンティティセンター または AWS Identity and Access Management (IAM) を使用して個々のユーザーを設定することをお勧めします。この方法により、それぞれのジョブを遂行するために必要な権限のみが各ユーザーに付与されます。また、次の方法でデータを保護することもお勧めします:
+ 各アカウントで多要素認証 (MFA) を使用します。
+ SSL/TLS を使用して AWS リソースと通信します。TLS 1.2 は必須ですが、TLS 1.3 を推奨します。
+ で API とユーザーアクティビティのログ記録を設定します AWS CloudTrail。CloudTrail 証跡を使用して AWS アクティビティをキャプチャする方法については、「 *AWS CloudTrail ユーザーガイド*」の[CloudTrail 証跡の使用](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-trails.html)」を参照してください。
+  AWS 暗号化ソリューションと、 内のすべてのデフォルトのセキュリティコントロールを使用します AWS のサービス。
+ Amazon Macie などの高度な管理されたセキュリティサービスを使用します。これらは、Amazon S3 に保存されている機密データの検出と保護を支援します。
+ コマンドラインインターフェイスまたは API AWS を介して にアクセスするときに FIPS 140-3 検証済み暗号化モジュールが必要な場合は、FIPS エンドポイントを使用します。利用可能な FIPS エンドポイントの詳細については、「[連邦情報処理規格 (FIPS) 140-3](https://aws.amazon.com/compliance/fips/)」を参照してください。

お客様の E メールアドレスなどの極秘または機密情報を、タグ、または **[名前]** フィールドなどの自由形式のテキストフィールドに含めないことを強くお勧めします。これは、コンソール、API、または SDK を使用して AWS CLIまたは他の AWS のサービス を操作する場合も同様です。 AWS SDKs タグ、または名前に使用される自由記述のテキストフィールドに入力したデータは、請求または診断ログに使用される場合があります。外部サーバーに URL を提供する場合、そのサーバーへのリクエストを検証できるように、認証情報を URL に含めないことを強くお勧めします。



# MemoryDB 内のデータのセキュリティ
<a name="encryption"></a>

データを安全に保つために、MemoryDB および Amazon EC2 は、サーバーのデータへの不正アクセスに対する防御メカニズムを提供します。

MemoryDB には、クラスター上のデータの暗号化機能も用意されています。
+ 転送時の暗号化では、ある場所から別の場所に移動するデータ (クラスターのノード間、クラスターとアプリケーション間など) に対して必ず暗号化が行なわれます。
+ 保管時の暗号化では、スナップショット操作中にトランザクションログとオンディスクデータが暗号化されます。

[アクセスコントロールリスト (ACL) によるユーザー認証](clusters.acls.md) を使用してクラスターへのユーザーアクセス制御も可能です。

**Topics**
+ [MemoryDB 内のデータのセキュリティ](encryption.md)
+ [MemoryDB に保存時の暗号化](at-rest-encryption.md)
+ [MemoryDBの転送時の暗号化 (TLS)](in-transit-encryption.md)
+ [アクセスコントロールリスト (ACL) によるユーザー認証](clusters.acls.md)
+ [IAM を使用した認証](auth-iam.md)

# MemoryDB に保存時の暗号化
<a name="at-rest-encryption"></a>

データを安全に保つために、MemoryDB と Amazon S3 は、クラスター内のデータへのアクセスを制限するさまざまな方法を用意しています。詳細については、「[MemoryDB と Amazon VPC](vpcs.md)」および「[MemoryDB でのアイデンティティとアクセス権の管理](iam.md)」を参照してください。

MemoryDB の保管時の暗号化は常に有効になっており、永続データを暗号化することでデータのセキュリティを強化します。以下の項目を暗号化します。
+ トランザクションログ内のデータ 
+ 同期、スナップショット、およびスワップオペレーション中のディスク 
+ Amazon S3 に保存されたバックアップ 

 MemoryDB は、保管時のデフォルト (サービス管理) の暗号化だけでなく、[‬‭AWS Key Management Service (KMS)‬](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html) で独自の対称カスタマー管理カスタマールートキーを使用する機能を提供します。

データ階層化が有効なクラスター内の SSD (ソリッドステートドライブ) に保存されたデータは、デフォルトで常時暗号化されます。

転送時の暗号化については、「[MemoryDBの転送時の暗号化 (TLS)](in-transit-encryption.md)」を参照してください。

**Topics**
+ [AWS KMS のカスタマー管理のキーの使用](#using-customer-managed-keys-for-memorydb-security)
+ [以下の資料も参照してください。](#at-rest-encryption-see-also)

## AWS KMS のカスタマー管理のキーの使用
<a name="using-customer-managed-keys-for-memorydb-security"></a>

MemoryDB は、保管時の暗号化用の対称カスタマー管理の KMS キー (KMS キー) をサポートしています。カスタマー管理の KMS キーは、AWS アカウントで作成、所有、管理される暗号化キーです。詳細については、「AWS‬Key Management Service デベロッパーガイド‭‬‬」‭の「‭[‬カスタマールートキー‭](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#root_keys)」を参照してください。キーは、MemoryDB で使用する前に AWS KMS で作成する必要があります。

AWS KMS ルートキーを作成する方法の詳細については、*AWS Key Management Service デベロッパーガイド*の「[キーの作成](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html)」を参照してください。

MemoryDB を使用すると、AWS KMS と統合できます。詳細については、*AWS Key Management Service デベロッパーガイド*の「[付与の使用](https://docs.aws.amazon.com/kms/latest/developerguide/grants.html)」を参照してください。MemoryDB と AWS KMS の統合を有効にするために、お客様の作業は必要ありません。

`kms:ViaService` 条件キーは、‭AWS KMS キーの使用を、指定された AWS サービスからのリクエストに制限します。MemoryDB で ‭`kms:ViaService`‬ を使用するには、両方のViaService 名を条件キーの値 ‭`memorydb.amazon_region.amazonaws.com` に‬含めます。‬‬‬ 詳細については、「[kms:ViaService](https://docs.aws.amazon.com/kms/latest/developerguide/policy-conditions.html#conditions-kms-via-service)」を参照してください。

[AWSCloudTrail](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-user-guide.html) を使用して、MemoryDB によってお客様に代わって AWS Key Management Service に送信されるリクエストを追跡できます。カスタマー管理のキーに関連する AWS Key Management Service へのすべての API コールには、対応する CloudTrail ログがあります。[ListGrants](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListGrants.html) KMS API コールを行うことで、MemoryDB によって作成される許可を表示することもできます。

カスタマー管理のキーを使用してクラスターが暗号化されると、クラスターのすべてのスナップショットは以下のように暗号化されます。
+ 毎日の自動スナップショットは、クラスターに関連付けられたカスタマー管理のキーを使用して暗号化されます。
+ クラスターが削除されたときに作成される最終スナップショットも、クラスターに関連付けられたカスタマー管理のキーを使用して暗号化されます。
+ 手動で作成されたスナップショットは、デフォルトで、クラスターに関連付けられた KMS キーを使用して暗号化されます。この動作は、別のカスタマー管理のキーを選択して上書きできます。
+ スナップショットをコピーするとき、デフォルトでは、ソーススナップショットに関連付けられたカスタマー管理のキーが使用されます。この動作は、別のカスタマー管理のキーを選択して上書きできます。

**注記**  
選択した Amazon S3 バケットにスナップショットをエクスポートするとき、カスタマー管理のキーは使用できません。ただし、Amazon S3 にエクスポートされたすべてのスナップショットは、‭[‬サーバー側の暗号化‭](https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingServerSideEncryption.html)‬を使用して暗号化されます。‬‬‬‬‬‬ スナップショットファイルを新しい S3 オブジェクトにコピーし、カスタマー管理の KMS キーを使用して暗号化するか、KMS キーを使用してデフォルトの暗号化が設定された別の S3 バケットにコピーするか、ファイル自体の暗号化オプションを変更するかを選択できます。
カスタマー管理のキーを使用して、暗号化にカスタマー管理のキーを使用しない手動で作成されたスナップショットを暗号化することもできます。このオプションを使用すると、データが元のクラスターで暗号化されていない場合でも、Amazon S3 に保存されているスナップショットファイルは KMS キーを使用して暗号化されます。
スナップショットから復元するときは、新しいクラスターの作成時に使用できる暗号化オプションと同様に、使用可能な暗号化オプションから選択できます。
+ キーを削除するか、キーを‭[無効化‭](https://docs.aws.amazon.com/kms/latest/developerguide/enabling-keys.html)して‬、クラスターの暗号化に使用したキーの‭[‬許可を取り消す‭](https://docs.aws.amazon.com/kms/latest/APIReference/API_RevokeGrant.html)と、クラスターは回復不可能になります。‬‬‬‬‬‬‬‬‬‬‬‬ つまり、ハードウェア障害の後に変更も回復もできなくなります。AWSルートキーは 7 日間以上の待機期間後にのみ KMS によって削除されます。キーが削除された後、別のカスタマー管理のキーを使用して、アーカイブ目的のスナップショットを作成できます。
+ 自動キー更新は AWS KMS ルートキーのプロパティを保持するため、お客様が MemoryDB データにアクセスできるかどうかには影響しません。暗号化された MemoryDB クラスターは、新しいルートキーの作成と古いキーへの参照の更新を伴う手動キーローテーションをサポートしません。詳細については、「AWS‬ Key Management Service デベロッパーガイド」の「[ Rotating Customer root Keys](https://docs.aws.amazon.com/kms/latest/developerguide/rotate-keys.html)」を参照してください。
+ KMS キーを使用して MemoryDB クラスターを暗号化するには、クラスターごとに 1 つの許可が必要です。この許可はクラスターの有効期間を通じて使用されます。さらに、スナップショットの作成時には、スナップショットごとに 1 つの権限が使用されます。この許可はスナップショットの作成後に無効になります。
+ AWS KMS の付与と制限の詳細については、「AWS Key Management Service デベロッパーガイド‭‬」の「‭[‬クォータ‭](https://docs.aws.amazon.com/kms/latest/developerguide/limits.html)」を参照してください。

## 以下の資料も参照してください。
<a name="at-rest-encryption-see-also"></a>
+ [MemoryDBの転送時の暗号化 (TLS)](in-transit-encryption.md)
+ [MemoryDB と Amazon VPC](vpcs.md)
+ [MemoryDB でのアイデンティティとアクセス権の管理](iam.md)

# MemoryDBの転送時の暗号化 (TLS)
<a name="in-transit-encryption"></a>

データを安全に保つために、MemoryDB および Amazon EC2 は、サーバーのデータへの不正アクセスに対する防御メカニズムを提供します。MemoryDB では転送時の暗号化機能を提供されるため、ある場所から別の場所に移動しているデータの保護ツールとして使用できます。例えば、クラスター内、またはクラスターとアプリケーションの間でプライマリノードからリードレプリカノードにデータを移動するとします。

**Topics**
+ [転送時の暗号化の概要](#in-transit-encryption-overview)
+ [関連情報](#in-transit-encryption-see-also)

## 転送時の暗号化の概要
<a name="in-transit-encryption-overview"></a>

MemoryDB の転送時の暗号化は、データがある場所から別の場所に転送されるときに、最も脆弱なポイントでのデータのセキュリティを強化できる機能です。

MemoryDB 転送時の暗号化では、次の機能が実装されます。
+ **暗号化接続**-サーバー接続もクライアント接続もTransport Layer Security (TLS)で暗号化されている。
+ **暗号化レプリケーション** — プライマリノードとレプリカ ノード間を移動するデータが暗号化されます。
+ **サーバー認証** — クライアントは、適切なサーバーに接続していることを認証できます。

2023 年 7 月 20 日以降、新規および既存のクラスターでサポートされる最小バージョンは TLS 1.2 です。AWS のTLS 1.2 の詳細については、こちらの「[リンク](https://aws.amazon.com/blogs/security/tls-1-2-required-for-aws-endpoints/)」を参照してください。

MemoryDB クラスターとの接続の詳細については、「[redis-cli を使用して MemoryDB ノードに接続する](getting-started.md#connect-tls)」を参照してください。

## 関連情報
<a name="in-transit-encryption-see-also"></a>
+ [MemoryDB に保存時の暗号化](at-rest-encryption.md)
+ [アクセスコントロールリスト (ACL) によるユーザー認証](https://docs.aws.amazon.com/memorydb/latest/devguide/clusters.acls.html)
+ [MemoryDB と Amazon VPC](vpcs.md)
+ [MemoryDB でのアイデンティティとアクセス権の管理](iam.md)

# アクセスコントロールリスト (ACL) によるユーザー認証
<a name="clusters.acls"></a>

アクセスコントロールリスト (ACL) を使用してユーザーを認証できます。

ACL を使用すると、ユーザーをグループ化してクラスターアクセスを制御できます。これらのアクセスコントロールリストは、クラスターへのアクセスを分類する方法として設計されています。

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

ACL は、Redis OSS 6 の [ACL](https://valkey.io/docs/topics/acl/) の導入をサポートするように設計されています。MemoryDB クラスターで ACL を使用する場合は、いくつかの制約があります。
+ アクセス文字列にパスワードを指定することはできません。パスワードは [CreateUser](https://docs.aws.amazon.com/memorydb/latest/APIReference/API_CreateUser.html) または [UpdateUser](https://docs.aws.amazon.com/memorydb/latest/APIReference/API_UpdateUser.html) コールで設定します。
+ ユーザー権限については、`on` および `off` をアクセス文字列の一部としてパスします。アクセス文字列にどちらも指定されていない場合、ユーザーには ‭`off` が割り当てられ、クラスターへのアクセス権はありません。‬‬‬‬
+ 禁止されたコマンドは使用できません。禁止されているコマンドを指定すると、例外がスローされます。これらのコマンドの一覧については、「‭[制限されるコマンド](restrictedcommands.md)‬」を参照してください。‬‬‬‬
+ `reset` コマンドを、アクセス文字列の一部として使用することはできません。API パラメータを用いてパスワードを指定すると、MemoryDB がパスワードを管理します。したがって、`reset` を使用することはできません。それによりユーザーのすべてのパスワードが削除されるからです。
+ Redis OSS 6 は、[ACL LIST](https://valkey.io/commands/acl-list) コマンドを導入します。このコマンドは、ユーザーのリストと、各ユーザーに適用される ACL ルールを返します。MemoryDB は `ACL LIST` コマンドをサポートしますが、Redis OSS のようにパスワードハッシュのサポートは含まれていません。MemoryDB を使用すると、[DescribeUsers](https://docs.aws.amazon.com/memorydb/latest/APIReference/API_DescribeUsers.html) オペレーションを使用して、アクセス文字列に含まれるルールなど、同様の情報を取得できます。ただし、[DescribeUsers](https://docs.aws.amazon.com/memorydb/latest/APIReference/API_DescribeUsers.html) は、ユーザーパスワードを取得しません。

  MemoryDB でサポートされているその他の読み取り専用コマンドには、[ACL WHOAMI](https://valkey.io/commands/acl-whoami)、[ACL USERS](https://valkey.io/commands/acl-users)、[ACL CAT](https://valkey.io/commands/acl-cat)などがあります。MemoryDB は、他の書き込みベースの ACL コマンドをサポートしていません。

MemoryDB での ACL の使用については、以下で詳しく説明します。

**Topics**
+ [アクセス文字列を使用したアクセス許可の指定](#access-string)
+ [ベクトル検索機能](#access-vss)
+ [MemoryDB のクラスターに ACL を適用します](#rbac-using)

## アクセス文字列を使用したアクセス許可の指定
<a name="access-string"></a>

MemoryDB クラスターへのアクセス許可を指定するには、 AWS CLI または を使用してアクセス文字列を作成し、ユーザーに割り当てます AWS マネジメントコンソール。

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

ACL ルールの構文の詳細については、「[ACL](https://valkey.io/topics/acl)」を参照してください。

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

 `on ~* &* +@all`

アクセス文字列の構文は、次のように分類されます。
+ `on` — ユーザーはアクティブなユーザーです。
+ `~*` — アクセス権はすべての使用可能なキーに与えられます。
+ `&*` - アクセス権はすべての pubsub チャネルに与えられます。
+ `+@all` — アクセス権はすべての使用可能なコマンドに与えられます。

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

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

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

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

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

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

アクセス文字列をユーザーに割り当てる方法については、「[コンソールと CLI を使用したユーザーおよびアクセスコントロールリストの作成](#users-management)」を参照してください。

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

## ベクトル検索機能
<a name="access-vss"></a>

[ベクトル検索](vector-search.md) では、すべての検索コマンドは `@search` カテゴリに属しており、検索コマンドを含むために既存のカテゴリ `@read`、`@write`、`@fast`、および `@slow` が更新されます。ユーザーがあるカテゴリにアクセスできない場合、そのユーザーは、そのカテゴリ内のいかなるコマンドにもアクセスできません。例えば、ユーザーが `@search` にアクセスできない場合、そのユーザーは、検索関連のいかなるコマンドも実行できません。

次の表は、適切なカテゴリへの検索コマンドのマッピングを示しています。


| VSS コマンド | @read | @write | @fast | @slow | 
| --- | --- | --- | --- | --- | 
| FT.CREATE |  | はい | Y |  | 
| FT.DROPINDEX |  | Y | Y |  | 
| FT.LIST | Y |  |  | Y | 
| FT.INFO | Y |  | Y |  | 
| FT.SEARCH | Y |  |  | Y | 
| FT.AGGREGATE | Y |  |  | Y | 
| FT.PROFILE | Y |  |  | Y | 
| FT.ALIASADD |  | Y | Y |  | 
| FT.ALIASDEL |  | Y | Y |  | 
| FT.ALIASUPDATE |  | Y | Y |  | 
| FT.\$1ALIASLIST | Y |  |  | Y | 
| FT.EXPLAIN | Y |  | Y |  | 
| FT.EXPLAINCLI | Y |  | Y |  | 
| FT.CONFIG | Y |  | はい |  | 

## MemoryDB のクラスターに ACL を適用します
<a name="rbac-using"></a>

MemoryDB ACL を使用するには、次のステップに従います。

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

1. ACL を作成し、ユーザーをリストに追加します。

1. ACL をクラスターに割り当てます。

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

**Topics**
+ [コンソールと CLI を使用したユーザーおよびアクセスコントロールリストの作成](#users-management)
+ [コンソールおよび CLI を使用したアクセスコントロールリストの管理](#user-groups)
+ [アクセスコントロールリストのクラスターへの割り当て](#users-groups-to-clusterss)

### コンソールと CLI を使用したユーザーおよびアクセスコントロールリストの作成
<a name="users-management"></a>

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

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

MemoryDB は、アカウントごとにユーザー名を使用してデフォルトユーザー `"default"` を自動的に設定します。ACL に明示的に追加しない限り、どのクラスターにも関連付けられません。このユーザーを変更または削除することはできません。このユーザーは、以前の Redis OSS バージョンのデフォルト動作との互換性を意図して作成されており、すべてのコマンドを呼び出してすべてのキーにアクセスできるようにするアクセス文字列を持っています。

デフォルトユーザーを含むすべてのアカウントに対して、不変の「オープンアクセス」ACLが作成されます。これは、デフォルトユーザーがメンバーになれる唯一の ACL です。クラスターを作成するときに、クラスター関連付けるACLを選択する必要があります。デフォルトユーザーで「オープンアクセス」ACL を適用することもできますが、ビジネスニーズに合わせて権限が制限されているユーザーを含む ACL を作成することを強くお勧めします。

TLS が有効になっていないクラスターでは、「オープンアクセス」ACL を使用してオープン認証を行う必要があります。

ACL はユーザーなしで作成できます。空の ACL はクラスターにアクセスできず、TLS 有効なクラスターにのみ関連付けることができます。

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

特に、MemoryDBでACLを使用する場合は、ユーザーパスワードの制約に注意してください：
+ パスワードは、印刷可能な 16～128 文字にする必要があります。
+ 次の英数字以外の文字は使用できません: `,` `""` `/` `@`。

#### コンソールおよび CLI を使用したユーザーの管理
<a name="users-console"></a>

##### ユーザーの作成 (コンソール)
<a name="users.Createclusters.viewdetails"></a>

**コンソールでユーザーを作成するには**

1. にサインイン AWS マネジメントコンソール し、[https://console.aws.amazon.com/memorydb/](https://console.aws.amazon.com/memorydb/) で MemoryDB コンソールを開きます。

1. 左のナビゲーションペインで、**[ユーザー]** を選択します。

1. **[ユーザーの作成]** を選択します。

1. **[ユーザーの作成]** ページで **[名前]** を入力します。

   クラスターの命名に関する制約は次のとおりです。
   + 1～40 個の英数字またはハイフンを使用する必要があります。
   + 先頭は文字を使用する必要があります。
   + 連続する 2 つのハイフンを含めることはできません。
   + ハイフンで終わることはできません。

1. **[パスワード]** には、最大 2 つのパスワードを入力できます。

1. **[アクセス文字列]** にアクセス文字列を入力します。アクセス文字列は、ユーザーが許可されたキーとコマンドのアクセス許可レベルを設定します。

1. **タグ**では、オプションでタグを適用してユーザーを検索およびフィルタリングしたり、 AWS コストを追跡したりできます。

1. **[作成]** を選択します。

##### を使用したユーザーの作成 AWS CLI
<a name="users.Create.cli"></a>

**CLI を使用してユーザーを作成するには**
+ ユーザーを作成するには、[create-user](https://docs.aws.amazon.com/cli/latest/reference/memorydb/create-user.html)コマンドを使用します。

  Linux、macOS、Unix の場合:

  ```
  aws memorydb create-user \
    --user-name user-name-1 \
    --access-string "~objects:* ~items:* ~public:*" \
    --authentication-mode \
          Passwords="abc",Type=password
  ```

  Windows の場合:

  ```
  aws memorydb create-user ^
    --user-name user-name-1 ^
    --access-string "~objects:* ~items:* ~public:*" ^
    --authentication-mode \
          Passwords="abc",Type=password
  ```

##### ユーザーの変更 (コンソール)
<a name="users.modifyclusters.viewdetails"></a>

**コンソールでユーザーに変更を加えるには**

1. にサインイン AWS マネジメントコンソール し、[https://console.aws.amazon.com/memorydb/](https://console.aws.amazon.com/memorydb/) で MemoryDB コンソールを開きます。

1. 左のナビゲーションペインで、**[ユーザー]** を選択します。

1. 変更するユーザーの横にあるラジオボタンを選択し、**[アクション]** ->**[変更]** を選択します。

1. パスワードを変更する場合は、**[パスワードの変更]** ラジオボタンを選択します。パスワードが 2 つある場合は、どちらか一方を変更するときに両方を入力する必要があることに注意してください。

1. アクセス文字列を更新する場合は、新しい文字列を入力します。

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

##### を使用したユーザーの変更 AWS CLI
<a name="users.modify.cli"></a>

**CLI を使用してユーザーを変更するには**

1. 「[ユーザーの更新](https://docs.aws.amazon.com/cli/latest/reference/memorydb/update-user.html)」コマンドを使用してユーザーを変更します。

1. ユーザーが変更されると、そのユーザーに関連付けられたアクセスコントロールリストが、ACL に関連付けられたクラスターとともに更新されます。既存の接続はすべて維持されます。以下は例です。

   Linux、macOS、Unix の場合:

   ```
   aws memorydb update-user \
     --user-name user-name-1 \
     --access-string "~objects:* ~items:* ~public:*"
   ```

   Windows の場合:

   ```
   aws memorydb update-user ^
     --user-name user-name-1 ^
     --access-string "~objects:* ~items:* ~public:*"
   ```

##### ユーザーの詳細を表示する (コンソール)
<a name="users.viewclusters.viewdetails"></a>

**コンソールでユーザーの詳細を表示するには**

1. にサインイン AWS マネジメントコンソール し、[https://console.aws.amazon.com/memorydb/](https://console.aws.amazon.com/memorydb/) で MemoryDB コンソールを開きます。

1. 左のナビゲーションペインで、**[ユーザー]** を選択します。

1. **[ユーザー名]** でユーザーを選択するか、検索ボックスを使用してユーザーを検索します。

1. **[ユーザー設定]** で、ユーザーのアクセス文字列、パスワード数、ステータス、Amazon リソースネーム (ARN) を確認できます。

1. **[アクセスコントロールリスト (ACL)]** では、ユーザーが所属する ACL を確認できます。

1. **[タグ]** では、ユーザーに関連付けられているすべてのタグを確認できます。

##### を使用したユーザーの詳細の表示 AWS CLI
<a name="user.view.cli"></a>

「[ユーザーの詳細](https://docs.aws.amazon.com/cli/latest/reference/memorydb/describe-users.html)」 コマンドを使用して、ユーザーの詳細を表示します。

```
aws memorydb describe-users \
  --user-name my-user-name
```

##### ユーザーの削除 (コンソール)
<a name="users.deleteclusters"></a>

**コンソールでユーザーを削除するには**

1. にサインイン AWS マネジメントコンソール し、[https://console.aws.amazon.com/memorydb/](https://console.aws.amazon.com/memorydb/) で MemoryDB コンソールを開きます。

1. 左のナビゲーションペインで、**[ユーザー]** を選択します。

1. 変更するユーザーの横にあるラジオボタンを選択し、**[アクション]**->**[削除]** を選択します。

1. 確認テキストボックスで、`delete` を入力し、**確認** を選択します。

1. キャンセルするには、**キャンセル** をクリックします。

##### を使用したユーザーの削除 AWS CLI
<a name="users.delete.cli"></a>

**CLI を使用してサービスロールを削除するには**
+ ユーザーを削除するには、[delete-user](https://docs.aws.amazon.com/cli/latest/reference/memorydb/delete-user.html) コマンドを使用します。

  アカウントが削除され、そのアカウントが属するアクセス制御リストから削除されます。以下に例を示します。

  Linux、macOS、Unix の場合:

  ```
  aws memorydb delete-user \
    --user-name user-name-2
  ```

  Windows の場合:

  ```
  aws memorydb delete-user ^
    --user-name user-name-2
  ```

### コンソールおよび CLI を使用したアクセスコントロールリストの管理
<a name="user-groups"></a>

次に示すように、アクセスコントロールリストを作成して、1 つ以上のクラスターに対するユーザーのアクセスを分類および制御できます。

次の手順に従って、コンソールを使用してアクセス制御リストを管理します。

#### アクセスコントロールリスト (ACL) の作成 (コンソール)
<a name="acl.createclusters.viewdetails"></a>

**コンソールを使用してアクセスコントロールリストを作成するには**

1. にサインイン AWS マネジメントコンソール し、[https://console.aws.amazon.com/memorydb/](https://console.aws.amazon.com/memorydb/) で MemoryDB コンソールを開きます。

1. 左側のナビゲーションペインで、**[アクセスコントロールリスト (ACL)]** を選択します。

1. **[ACL を作成]** を選択します。

1. **[アクセスコントロールリスト (ACL) の作成]** ページで、ACL 名を入力します。

   クラスターの命名に関する制約は次のとおりです。
   + 1～40 個の英数字またはハイフンを使用する必要があります。
   + 先頭は文字を使用する必要があります。
   + 連続する 2 つのハイフンを含めることはできません。
   + ハイフンで終わることはできません。

1. **[ユースケースを選択する]** で、次のいずれかを実行します。

   1. **[ユーザーの作成]** を選択して新規ユーザーを作成します。

   1. ユーザーを追加するには、**[管理]** を選択し、**[ユーザーの管理]** ダイアログからユーザーを選択し、**[選択]** を選択します。

1. **タグ**では、オプションでタグを適用して ACLsしたり、 AWS コストを追跡したりできます。

1. **[作成]** を選択します。

#### を使用したアクセスコントロールリスト (ACL) の作成 AWS CLI
<a name="acl.create.cli"></a>

次の手順で、CLI を使用してアクセスコントロールリストを作成します。

**CLI を使用して新しいACLを作成し、ユーザーを追加するには**
+ [create-acl](https://docs.aws.amazon.com/cli/latest/reference/memorydb/create-acl.html) コマンドを使用して ACL を作成します。

  Linux、macOS、Unix の場合:

  ```
  aws memorydb create-acl \
    --acl-name "new-acl-1" \
    --user-names "user-name-1" "user-name-2"
  ```

  Windows の場合:

  ```
  aws memorydb create-acl ^
    --acl-name "new-acl-1" ^
    --user-names "user-name-1" "user-name-2"
  ```

#### アクセスコントロールリスト (ACL) の変更 (コンソール)
<a name="acl.modifyclusters.viewdetails"></a>

**コンソールを使用してアクセスコントロールリストを変更するには**

1. にサインイン AWS マネジメントコンソール し、[https://console.aws.amazon.com/memorydb/](https://console.aws.amazon.com/memorydb/) で MemoryDB コンソールを開きます。

1. 左側のナビゲーションペインで、**[アクセスコントロールリスト (ACL)]** を選択します。

1. 変更する ACL を選択し、**[変更]** をクリックします。

1. **[変更]** ページの **[選択したユーザー]** で、次のいずれかを実行します。

   1. **[ユーザーの作成]** を選択して新しいユーザーを作成し、ACL に追加します。

   1. ユーザーを追加または削除するには、**[管理]** を選択し、**[ユーザーの管理]** ダイアログでユーザーを選択または選択解除し、**[選択]** を選択します。

1. **[アクセスコントロールリスト (ACL) の作成]** ページで、ACL 名を入力します。

   クラスターの命名に関する制約は次のとおりです。
   + 1～40 個の英数字またはハイフンを使用する必要があります。
   + 先頭は文字を使用する必要があります。
   + 連続する 2 つのハイフンを含めることはできません。
   + ハイフンで終わることはできません。

1. **[ユースケースを選択する]** で、次のいずれかを実行します。

   1. **[ユーザーの作成]** を選択して新規ユーザーを作成します。

   1. ユーザーを追加するには、**[管理]** を選択し、**[ユーザーの管理]** ダイアログからユーザーを選択し、**[選択]** を選択します。

1. **[変更]** を選択して変更を保存するか、**[キャンセル]** を選択して変更を破棄します。

#### を使用したアクセスコントロールリスト (ACL) の変更 AWS CLI
<a name="acl.modify.acl"></a>

**CLI を使用して新しいユーザーを追加するか、現在のメンバーを削除してACLを変更するには**
+ 「[ACL の更新](https://docs.aws.amazon.com/cli/latest/reference/memorydb/update-acl.html)」コマンドを使用して ACL を変更します。

  Linux、macOS、Unix の場合:

  ```
  aws memorydb update-acl --acl-name new-acl-1 \
  --user-names-to-add user-name-3 \
  --user-names-to-remove user-name-2
  ```

  Windows の場合:

  ```
  aws memorydb update-acl --acl-name new-acl-1 ^
  --user-names-to-add user-name-3 ^
  --user-names-to-remove user-name-2
  ```

**注記**  
ACLから削除されたユーザーに属するオーペン接続はすべて、このコマンドによって終了されます。

#### アクセスコントロールリスト (ACL) の詳細の表示 (コンソール)
<a name="acls.viewclusters.viewdetails"></a>

**ACL の詳細をコンソールに表示するには**

1. にサインイン AWS マネジメントコンソール し、[https://console.aws.amazon.com/memorydb/](https://console.aws.amazon.com/memorydb/) で MemoryDB コンソールを開きます。

1. 左のナビゲーションペインで、**[アクセスコントロールリスト (ACL)]** をクリックします。

1. **[ACL 名]** の下にある ACL を選択するか、検索ボックスを使用して ACL を検索します。

1. **[ユーザー]** で、ACL に関連付けられているユーザーのリストを確認できます。

1. **[関連クラスター]** で、ACL が属するクラスターを確認できます。

1. **[タグ]** では、ACL に関連付けられたすべてのタグを確認できます。

#### を使用したアクセスコントロールリスト (ACL) の表示 AWS CLI
<a name="acl.view.cli"></a>

「[ACL の詳細](https://docs.aws.amazon.com/cli/latest/reference/memorydb/describe-acls.html)」コマンドを使用して ACL の詳細を表示します。

```
aws memorydb describe-acls \
  --acl-name test-group
```

#### アクセスコントロールリスト (ACL) の削除 (コンソール)
<a name="acl.deleteacl"></a>

**コンソールを使用してアクセスコントロールリストを削除するには**

1. にサインイン AWS マネジメントコンソール し、[https://console.aws.amazon.com/memorydb/](https://console.aws.amazon.com/memorydb/) で MemoryDB コンソールを開きます。

1. 左側のナビゲーションペインで、**[アクセスコントロールリスト (ACL)]** を選択します。

1. 変更する ACL を選択し、**[削除]** を選択します

1. ACL が削除されないようにするには、**[削除]** ページで確認ボックスに `delete` を入力し、**[削除]** または **[キャンセル]** を選択します。

グループに属するユーザーではなく、ACL自体が削除されます。

#### を使用したアクセスコントロールリスト (ACL) の削除 AWS CLI
<a name="acl.delete.cli"></a>

**CLI を使用してACLを削除するには**
+ ‭[‬delete- acl](https://docs.aws.amazon.com/cli/latest/reference/memorydb/delete-acl.html)‬ コマンドを使用してACLを削除します。‬‬‬‬‬‬‬‬ 

  Linux、macOS、Unix の場合:

  ```
  aws memorydb delete-acl /
     --acl-name
  ```

  Windows の場合:

  ```
  aws memorydb delete-acl ^
     --acl-name
  ```

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

  ```
  aws memorydb delete-acl --acl-name "new-acl-1"
  {
      "ACLName": "new-acl-1",
      "Status": "deleting",
      "EngineVersion": "6.2",
      "UserNames": [
          "user-name-1", 
          "user-name-3"
      ],
      "clusters": [],
      "ARN":"arn:aws:memorydb:us-east-1:493071037918:acl/new-acl-1"
  }
  ```

### アクセスコントロールリストのクラスターへの割り当て
<a name="users-groups-to-clusterss"></a>

ACL を作成してユーザーを追加した後、ACL を実装する最後の手順では、ACL をクラスターに割り当てます。

#### コンソールを使用してクラスターにアクセスコントロールリストを割り当てます
<a name="users-groups-to-clusters-con"></a>

を使用してクラスターに ACL を追加するには AWS マネジメントコンソール、「」を参照してください[MemoryDB クラスターの作成](getting-started.md#clusters.create)。

#### を使用したクラスターへのアクセスコントロールリストの割り当て AWS CLI
<a name="users-groups-to-clusters-CLI"></a>

 次の AWS CLI オペレーションでは、転送中の暗号化 (TLS) が有効になっているクラスターと、値 を持つ **acl-name**パラメータを作成します`my-acl-name`。サブネット グループ `subnet-group` を、実存のサブネットグループに置き換えます。

**主要パラメータ**
+ **--engine-version** -「6.2」を指定してください
+ **--tls-enabled** – 認証と ACL の関連付けに使用されます。
+ **--acl-name** — この値は、クラスターに対して指定されたアクセス権限を持つユーザーで構成されるアクセス制御リストを提供します。

Linux、macOS、Unix の場合:

```
aws memorydb create-cluster \
    --cluster-name "new-cluster" \
    --description "new-cluster" \
    --engine-version "6.2" \
    --node-type db.r6g.large \
    --tls-enabled \
    --acl-name "new-acl-1" \
    --subnet-group-name "subnet-group"
```

Windows の場合:

```
aws memorydb create-cluster ^
    --cluster-name "new-cluster" ^
    --cluster-description "new-cluster" ^
    --engine-version "6.2" ^
    --node-type db.r6g.large ^
    --tls-enabled ^
    --acl-name "new-acl-1" ^
    --subnet-group-name "subnet-group"
```

次の AWS CLI オペレーションでは、転送中の暗号化 (TLS) が有効になっているクラスターと、値 を持つ **acl-name**パラメータを変更します`new-acl-2`。

Linux、macOS、Unix の場合:

```
aws memorydb update-cluster \
    --cluster-name cluster-1 \
    --acl-name "new-acl-2"
```

Windows の場合:

```
aws memorydb update-cluster ^
    --cluster-name cluster-1 ^
    --acl-name "new-acl-2"
```

# IAM を使用した認証
<a name="auth-iam"></a>

**Topics**
+ [概要:](#auth-iam-overview)
+ [制限事項](#auth-iam-limits)
+ [セットアップ](#auth-iam-setup)
+ [接続中](#auth-iam-Connecting)

## 概要:
<a name="auth-iam-overview"></a>

IAM 認証では、クラスターが Valkey または Redis OSS バージョン 7 以降を使用するように設定されている場合、IAM ID AWS を使用して MemoryDB への接続を認証できます。これにより、セキュリティモデルを強化し、多くの管理セキュリティタスクを簡素化できます。IAM 認証では、個々の MemoryDB クラスターと MemoryDB ユーザーごとにきめ細かいアクセス制御を設定し、最小特権の権限の原則に従うことができます。MemoryDB の IAM 認証は、有効期間の長い MemoryDB ユーザーパスワードの代わりに、有効期間が短い IAM 認証トークンを `AUTH` または `HELLO` コマンドで提供することにより機能します。IAM 認証トークンの詳細については、 AWS 全般のリファレンスガイドの署名[バージョン 4 の署名プロセス](https://docs.aws.amazon.com//general/latest/gr/signature-version-4.html)と、以下のコード例を参照してください。

IAM アイデンティティとそれに関連するポリシーを使用して、Valkey または Redis OSS アクセスをさらに制限できます。また、フェデレーテッド ID プロバイダーのユーザーに MemoryDB クラスターへのアクセス権を直接付与することもできます。

MemoryDB で AWS IAM を使用するには、まず認証モードを IAM に設定して MemoryDB ユーザーを作成し、IAM ID を作成または再利用する必要があります。IAM アイデンティティには、MemoryDB クラスターと MemoryDB ユーザーに `memorydb:Connect` アクションを許可するための関連ポリシーが必要です。設定したら、IAM ユーザーまたはロールの AWS 認証情報を使用して IAM 認証トークンを作成できます。最後に、MemoryDB クラスターノードに接続するときに、有効期間が短い IAM 認証トークンを Valkey または Redis OSS クライアントのパスワードとして指定する必要があります。認証情報プロバイダーをサポートしているクライアントは、新しい接続ごとに一時的な認証情報を自動的に生成できます。MemoryDB for Redis は、IAM が有効な MemoryDB ユーザーの接続リクエストに対して IAM 認証を実行し、その接続リクエストを IAM で検証します。

## 制限事項
<a name="auth-iam-limits"></a>

IAM 認証を使用する場合、以下の制限が適用されます。
+ Valkey または Redis OSS エンジンバージョン 7.0 以上を使用している場合、IAM 認証が利用できます。
+ IAM 認証トークンは 15 分間有効です。長時間接続する場合は、認証情報プロバイダーインターフェイスをサポートする Redis OSS クライアントを使用することをお勧めします。
+ MemoryDB for Redis への IAM 認証された接続は、12 時間後に自動的に切断されます。新しい IAM 認証トークンを使用して`AUTH` または `HELLO` コマンドを送信することで、接続を 12 時間延長できます。
+ IAM 認証は `MULTI EXEC` コマンドではサポートされていません。
+ 現在、IAM 認証はすべてのグローバル条件コンテキストキーをサポートしていません。グローバル条件コンテキストキーの詳細については、「IAM ユーザーガイド」の「[AWS グローバル条件コンテキストキー](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html)」を参照してください。

## セットアップ
<a name="auth-iam-setup"></a>

IAM 認証をセットアップするには:

1. クラスターを作成する

   ```
   aws memorydb create-cluster \
       --cluster-name cluster-01 \
       --description "MemoryDB IAM auth application"
       --node-type db.r6g.large \
       --engine-version 7.0 \
       --acl-name open-access
   ```

1. アカウントが新しいロールを引き継ぐことを許可するロール用の IAM 信頼ポリシードキュメントを以下に示すように作成します。ポリシーを *trust-policy.json* というファイルに保存します。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": {
           "Effect": "Allow",
           "Principal": { "AWS": "arn:aws:iam::123456789012:root" },
           "Action": "sts:AssumeRole"
       }
   }
   ```

------

1. 以下に示すように、IAM ポリシードキュメントを作成します。ポリシーを *policy.json* というファイルに保存します。

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect" : "Allow",
         "Action" : [
           "memorydb:connect"
         ],
         "Resource" : [
           "arn:aws:memorydb:us-east-1:123456789012:cluster/cluster-01",
           "arn:aws:memorydb:us-east-1:123456789012:user/iam-user-01"
         ]
       }
     ]
   }
   ```

------

1. IAM ロールを作成します。

   ```
   aws iam create-role \
     --role-name "memorydb-iam-auth-app" \
     --assume-role-policy-document file://trust-policy.json
   ```

1. IAM ポリシーを作成します。

   ```
   aws iam create-policy \
     --policy-name "memorydb-allow-all" \
     --policy-document file://policy.json
   ```

1. IAM ポリシーをロールにアタッチします。

   ```
   aws iam attach-role-policy \
    --role-name "memorydb-iam-auth-app" \
    --policy-arn "arn:aws:iam::123456789012:policy/memorydb-allow-all"
   ```

1. IAM を有効にしている新しいユーザーを作成します。

   ```
   aws memorydb create-user \
     --user-name iam-user-01 \
     --authentication-mode Type=iam \
     --access-string "on ~* +@all"
   ```

1. ACL を作成し、ユーザーをアタッチします。

   ```
   aws memorydb create-acl \
     --acl-name iam-acl-01 \
     --user-names iam-user-01
   
   aws memorydb update-cluster \
     --cluster-name cluster-01 \
     --acl-name iam-acl-01
   ```

## 接続中
<a name="auth-iam-Connecting"></a>

**トークンをパスワードとして接続**

最初に、[AWS SigV4 の署名済みリクエスト](https://docs.aws.amazon.com//general/latest/gr/sigv4-signed-request-examples.html)を使用して、有効期間が短い IAM 認証トークンを生成する必要があります。その後、以下の例に示すように、MemoryDB クラスターに接続するときに IAM 認証トークンをパスワードとして指定します。

```
String userName = "insert user name"
String clusterName = "insert cluster name"
String region = "insert region"

// Create a default AWS Credentials provider.
// This will look for AWS credentials defined in environment variables or system properties.
AWSCredentialsProvider awsCredentialsProvider = new DefaultAWSCredentialsProviderChain();

// Create an IAM authentication token request and signed it using the AWS credentials.
// The pre-signed request URL is used as an IAM authentication token for MemoryDB.
IAMAuthTokenRequest iamAuthTokenRequest = new IAMAuthTokenRequest(userName, clusterName, region);
String iamAuthToken = iamAuthTokenRequest.toSignedRequestUri(awsCredentialsProvider.getCredentials());

// Construct URL with IAM Auth credentials provider
RedisURI redisURI = RedisURI.builder()
    .withHost(host)
    .withPort(port)
    .withSsl(ssl)
    .withAuthentication(userName, iamAuthToken)
    .build();

// Create a new Lettuce client
RedisClusterClient client = RedisClusterClient.create(redisURI);
client.connect();
```

以下は `IAMAuthTokenRequest` の定義です。

```
public class IAMAuthTokenRequest {
    private static final HttpMethodName REQUEST_METHOD = HttpMethodName.GET;
    private static final String REQUEST_PROTOCOL = "http://";
    private static final String PARAM_ACTION = "Action";
    private static final String PARAM_USER = "User";
    private static final String ACTION_NAME = "connect";
    private static final String SERVICE_NAME = "memorydb";
    private static final long TOKEN_EXPIRY_SECONDS = 900;

    private final String userName;
    private final String clusterName;
    private final String region;

    public IAMAuthTokenRequest(String userName, String clusterName, String region) {
        this.userName = userName;
        this.clusterName = clusterName;
        this.region = region;
    }

    public String toSignedRequestUri(AWSCredentials credentials) throws URISyntaxException {
        Request<Void> request = getSignableRequest();
        sign(request, credentials);
        return new URIBuilder(request.getEndpoint())
            .addParameters(toNamedValuePair(request.getParameters()))
            .build()
            .toString()
            .replace(REQUEST_PROTOCOL, "");
    }

    private <T> Request<T> getSignableRequest() {
        Request<T> request  = new DefaultRequest<>(SERVICE_NAME);
        request.setHttpMethod(REQUEST_METHOD);
        request.setEndpoint(getRequestUri());
        request.addParameters(PARAM_ACTION, Collections.singletonList(ACTION_NAME));
        request.addParameters(PARAM_USER, Collections.singletonList(userName));
        return request;
    }

    private URI getRequestUri() {
        return URI.create(String.format("%s%s/", REQUEST_PROTOCOL, clusterName));
    }

    private <T> void sign(SignableRequest<T> request, AWSCredentials credentials) {
        AWS4Signer signer = new AWS4Signer();
        signer.setRegionName(region);
        signer.setServiceName(SERVICE_NAME);

        DateTime dateTime = DateTime.now();
        dateTime = dateTime.plus(Duration.standardSeconds(TOKEN_EXPIRY_SECONDS));

        signer.presignRequest(request, credentials, dateTime.toDate());
    }

    private static List<NameValuePair> toNamedValuePair(Map<String, List<String>> in) {
        return in.entrySet().stream()
            .map(e -> new BasicNameValuePair(e.getKey(), e.getValue().get(0)))
            .collect(Collectors.toList());
    }
}
```

**認証情報プロバイダーに接続**

以下のコードは、IAM 認証情報プロバイダーを使用して MemoryDB for Redis で認証する方法を示しています。

```
String userName = "insert user name"
String clusterName = "insert cluster name"
String region = "insert region"

// Create a default AWS Credentials provider.
// This will look for AWS credentials defined in environment variables or system properties.
AWSCredentialsProvider awsCredentialsProvider = new DefaultAWSCredentialsProviderChain();

// Create an IAM authentication token request. Once this request is signed it can be used as an
// IAM authentication token for MemoryDB.
IAMAuthTokenRequest iamAuthTokenRequest = new IAMAuthTokenRequest(userName, clusterName, region);

// Create a credentials provider using IAM credentials.
RedisCredentialsProvider redisCredentialsProvider = new RedisIAMAuthCredentialsProvider(
    userName, iamAuthTokenRequest, awsCredentialsProvider);
    
// Construct URL with IAM Auth credentials provider
RedisURI redisURI = RedisURI.builder()
    .withHost(host)
    .withPort(port)
    .withSsl(ssl)
    .withAuthentication(redisCredentialsProvider)
    .build();

// Create a new Lettuce cluster client
RedisClusterClient client = RedisClusterClient.create(redisURI);
client.connect();
```

以下は、IAMAuthTokenRequest を認証情報プロバイダーにラップして、必要に応じて一時的な認証情報を自動生成する Lettuce クラスタークライアントの例です。

```
public class RedisIAMAuthCredentialsProvider implements RedisCredentialsProvider {
    private static final long TOKEN_EXPIRY_SECONDS = 900;

    private final AWSCredentialsProvider awsCredentialsProvider;
    private final String userName;
    private final IAMAuthTokenRequest iamAuthTokenRequest;
    private final Supplier<String> iamAuthTokenSupplier;

    public RedisIAMAuthCredentialsProvider(String userName,
        IAMAuthTokenRequest iamAuthTokenRequest,
        AWSCredentialsProvider awsCredentialsProvider) {
        this.userName = userName;
        this.awsCredentialsProvider = awsCredentialsProvider;
        this.iamAuthTokenRequest = iamAuthTokenRequest;      
        this.iamAuthTokenSupplier = Suppliers.memoizeWithExpiration(this::getIamAuthToken, TOKEN_EXPIRY_SECONDS, TimeUnit.SECONDS);
    }

    @Override
    public Mono<RedisCredentials> resolveCredentials() {
        return Mono.just(RedisCredentials.just(userName, iamAuthTokenSupplier.get()));
    }

    private String getIamAuthToken() {
        return iamAuthTokenRequest.toSignedRequestUri(awsCredentialsProvider.getCredentials());
    }
```