Azure Managed Redis offers two methods to authenticate to your cache instance: access keys and Microsoft Entra. Azure Managed Redis Cache では、既定でマネージド ID が使用されます。 新しいキャッシュを作成すると、マネージド ID が有効になります。
アクセス キー認証はシンプルですが、セキュリティとパスワードの管理に関する一連の課題がつきまといます。 対照的に、この記事では、キャッシュ認証に Microsoft Entra トークンを使用する方法について学習します。
Azure Managed Redis offers a password-free authentication mechanism by integrating with Microsoft Entra. Azure Managed Redis に接続するように構成された Entra ID には、アクセス キーを使用する場合と同じアクセス許可が割り当てられます。
この記事では、サービス プリンシパルまたはマネージド ID を使って Redis インスタンスに接続する方法について説明します。
前提条件と制限事項
- Microsoft Entra 認証は、SSL 接続でのみサポートされています。
- 一部の Redis コマンドはブロックされています。 ブロックされているコマンドの完全な一覧については、「Azure Managed Redis でサポートされない Redis コマンド」をご覧ください。
Important
Microsoft Entra トークンを使用して接続が確立された後、クライアント アプリケーションは有効期限が切れる前に Microsoft Entra トークンを定期的に更新する必要があります。 その後、アプリは接続を中断しないように、AUTH
コマンドを Redis サーバーに送信する必要があります。 詳しくは、「Microsoft Entra を使用するように Redis クライアントを構成する」を参照してください。
キャッシュでアクセス キー認証を無効にする
Microsoft Entra を使用すると、キャッシュを安全に接続できます。 Microsoft Entra を使用し、アクセス キーを無効にすることをお勧めします。
Redis インスタンスのアクセス キー認証を無効にすると、アクセス キーまたは Microsoft Entra ID 認証のどちらを使っているかに関係なく、既存のすべてのクライアント接続が終了されます。 推奨される Redis クライアントのベスト プラクティスに従って、Microsoft Entra ベースの接続 (存在する場合) を再接続するための適切な再試行メカニズムを実装することをお勧めします。
アクセス キーを無効にする前に:
Microsoft Entra 認証を有効にする必要があります。
geo レプリケートされたキャッシュの場合は、次の操作を行う必要があります。
- キャッシュのリンクを解除します。
- アクセス キーを無効にする。
- キャッシュを再リンクします。
アクセス キーを無効にするキャッシュがある場合は、次の手順に従います。
Azure portal で、アクセス キーを無効にする Azure Managed Redis インスタンスを選びます。
On the Resource menu, select Authentication.
On the working pane, select Access keys.
アクセス キーを無効にするには、[ アクセス キー認証 ] コントロールを選択します。
Confirm that you want to update your configuration by selecting Yes.
Important
キャッシュの [アクセス キー認証を無効にする] 設定が変更されると、アクセス キーまたは Microsoft Entra を使用するすべての既存のクライアント接続が終了します。 ベスト プラクティスに従って、Microsoft Entra ベースの接続を再接続するための適切な再試行メカニズムを実装します。 For more information, see Connection resilience.
Microsoft Entra を使用するように Redis クライアントを構成する
ほとんどの Azure Managed Redis クライアントは、認証にパスワードとアクセス キーが使われることを想定しているため、Microsoft Entra を使った認証をサポートするには、クライアント ワークフローの更新が必要になる場合があります。 このセクションでは、Microsoft Entra トークンを使って Azure Managed Redis に接続するようにクライアント アプリケーションを構成する方法について説明します。
キャッシュにユーザーまたはシステム プリンシパルを追加する
Azure portal でキャッシュに接続する
On the Resource menu, select Authentication.
[Microsoft Entra Authentication]\(Microsoft Entra 認証\) タブで、[ユーザーまたはサービス プリンシパル] を選択し、[+ メンバーの選択] を選択します。
プログラムを実行するユーザーの名前を入力します。 Select the user to add in the list and Select. ユーザーが Redis ユーザーの一覧に追加されます。
Microsoft Entra クライアント ワークフロー
Microsoft
https://redis.azure.com/.default
を使用して、スコープ、acca5fbb-b7e4-4009-81f1-37e38fd66d78/.default
、またはの Microsoft Entra トークンを取得するようにクライアント アプリケーションを構成します。次の
User
とPassword
を使用するように Redis 接続ロジックを更新します。User
= マネージド ID またはサービス プリンシパルのオブジェクト IDPassword
= MSAL を使用して取得した Microsoft Entra トークン
Ensure that your client executes a Redis AUTH command automatically before your Microsoft Entra token expires by using:
User
= マネージド ID またはサービス プリンシパルのオブジェクト IDPassword
= 定期的に更新される Microsoft Entra トークン
クライアント ライブラリのサポート
ライブラリ Microsoft.Azure.StackExchangeRedis
は StackExchange.Redis
の拡張機能であり、これを使うと、Microsoft Entra を使って Redis クライアント アプリケーションから Azure Managed Redis への接続の認証を行うことができます。 この拡張機能は、有効期限が切れる前にトークンを前もって更新し、複数日にわたって持続的な Redis 接続を維持するなど、認証トークンの管理を行います。
このサンプル コードでは、Microsoft.Azure.StackExchangeRedis
NuGet パッケージを使用して、Microsoft Entra を使って Azure Managed Redis インスタンスに接続する方法が示されています。
次の表には、サンプル コードへのリンクが含まれています。 Microsoft Entra トークンを使って Azure Managed Redis インスタンスに接続する方法が示されています。 さまざまなクライアント ライブラリが複数の言語で含まれています。
Client library | Language | サンプル コードへのリンク |
---|---|---|
StackExchange.Redis | .NET | StackExchange.Redis コード サンプル |
redis-py | Python | redis-py サンプル コード |
Jedis | Java | Jedis コード サンプル |
Lettuce | Java | Lettuce コード サンプル |
node-redis | Node.js | node-redis コード サンプル |
go-redis | Go | go コード サンプル |
Microsoft Entra 認証のベスト プラクティス
- サービス拒否攻撃からキャッシュを保護するために、プライベート リンクまたはファイアウォール規則を構成する。
- 接続の中断を回避するために、トークンの有効期限が切れる少なくとも 3 分前までにクライアント アプリケーションから新しい Microsoft Entra トークンが送信されるようにする。
- Redis サーバーの
AUTH
コマンドを定期的に呼び出す場合は、AUTH
コマンドが互い違いになるようにジッターを追加することを検討する。 この方法で、Redis サーバーが同時にAUTH
コマンドを大量に受信することがなくなります。