Share via


Azure Event Hubs を用いたパスワードレス接続を使用するようにアプリケーションを移行する

Azure サービスへのアプリケーション要求は、アカウント アクセス キーまたはパスワードレス接続などの構成を使用して認証される必要があります。 ただしアプリケーションには、可能であればパスワードレス接続を優先的に使用することをお勧めします。 パスワードや秘密鍵を使用する従来の認証方法は、セキュリティ リスクと複雑さが生じます。 パスワードレス接続に移行する利点の詳細については、「Azure サービスのパスワードレス接続」ハブを参照してください。

次のチュートリアルでは、既存のアプリケーションを、パスワードレス接続を使用して接続するように移行する方法について説明します。 アクセス キー、接続文字列、または他のシークレットベースのアプローチのどれを使用しているかに関係なく、これと同じ移行手順が適用される必要があります。

ローカルの開発環境を構成する

パスワードレス接続は、ローカル環境と Azure ホステッド環境の両方で機能するように構成できます。 このセクションでは、ローカル開発のために個々のユーザーが Azure Event Hubs に対して認証できるようにするための構成を適用します。

ユーザーにロールを割り当てる

ローカルでの開発時には、Azure Event Hubs にアクセスしているユーザー アカウントに正しいアクセス許可があることを確認してください。 メッセージ データの読み取りと書き込みを行うには、Azure Event Hubs Data Receiver ロールと Azure Event Hubs Data Sender ロールが必要です。 このロールを自分に割り当てるには、ユーザー アクセス管理者ロール、または Microsoft.Authorization/roleAssignments/write アクションを含む別のロールに割り当てられている必要があります。 Azure portal、Azure CLI、または Azure PowerShell を使用して、ユーザーに Azure RBAC ロールを割り当てることができます。 ロールの割り当てに使用できるスコープの詳細は、スコープの概要ページを参照してください。

次の例では、Azure Event Hubs Data Sender ロールと Azure Event Hubs Data Receiver ロールをユーザー アカウントに割り当てます。 これらのロールは、イベント ハブ メッセージへの読み取りおよび書き込みアクセスを許可します。

  1. Azure portal で、メインの検索バーまたは左側のナビゲーションを使用して、お使いのイベント ハブを見つけます。

  2. イベント ハブの概要ページで、左側にあるメニューから [アクセス制御 (IAM)] を選択します。

  3. [アクセス制御 (IAM)] ページで、[ロールの割り当て] タブを選びます。

  4. 上部のメニューから [+ 追加] を選択し、次に結果のドロップダウン メニューから [ロールの割り当ての追加] を選択します。

    ロールを割り当てる方法を示すスクリーンショット。

  5. 検索ボックスを使って、結果を目的のロールに絞り込みます。 この例では、Azure Event Hubs Data Sender を検索し、一致する結果を選択した後に、[次へ] を選択します。

  6. [アクセスの割り当て先] で、[ユーザー、グループ、またはサービス プリンシパル] を選び、[+ メンバーの選択] を選びます。

  7. ダイアログで、自分の Microsoft Entra ユーザー名 (通常は user@domain メール アドレス) を検索し、ダイアログの下部にある [選択] を選びます。

  8. [レビューと割り当て] を選んで最終ページに移動し、もう一度 [レビューと割り当て] を行ってプロセスを完了します。

  9. Azure Event Hubs Data Receiver ロールに対してこれらの手順を繰り返し、アカウントにメッセージの送受信を許可します。

重要

ほとんどの場合、ロールの割り当てが Azure に反映されるまでの時間は 1 分から 2 分ですが、まれに 8 分程度までかかる場合があります。 初めてコードを実行したときに認証エラーを受け取る場合は、しばらく待ってから再試行してください。

Azure にローカルでサインインする

ローカル開発の場合は、ロールを割り当てたのと同じ Microsoft Entra アカウントで認証されていることを確認します。 Azure CLI や Azure PowerShell などの一般的な開発ツールを使用して認証できます。 認証に使用できる開発ツールは、言語によって異なります。

Azure CLI で次のコマンドを使って Azure にサインインします。

az login

パスワードレス接続を使用するようにアプリケーション コードを更新する

Azure Identity クライアント ライブラリは、次のエコシステムごとに、Azure へのパスワードレス認証を処理する DefaultAzureCredential クラスを提供します。

DefaultAzureCredential は、複数の認証方法をサポートしています。 使用するメソッドは実行時に決定されます。 このアプローチを採用すると、環境固有のコードを実装することなく、異なる環境 (ローカルと運用環境) で異なる認証方法をアプリに使用できます。 DefaultAzureCredential が資格情報を検索する順序と場所については、上記のリンクを参照してください。

  1. .NET アプリケーションで DefaultAzureCredential を使用するには、Azure.Identity パッケージをインストールします:

    dotnet add package Azure.Identity
    
  2. ファイルの先頭に、次のコードを追加します:

    using Azure.Identity;
    
  3. コード内で、Azure Event Hubs に接続するための EventHubProducerClient または EventProcessorClient オブジェクトを作成している箇所を見つけます。 次の例に合わせてコードを更新します。

    DefaultAzureCredential credential = new();
    var eventHubNamespace = $"https://{namespace}.servicebus.windows.net";
    
    // Event Hubs producer
    EventHubProducerClient producerClient = new(
        eventHubNamespace,
        eventHubName,
        credential);
    
    // Event Hubs processor
    EventProcessorClient processorClient = new(
        storageClient,
        EventHubConsumerClient.DefaultConsumerGroupName,
        eventHubNamespace,
        eventHubName,
        credential);
    
  1. EventHubProducerClient オブジェクトまたは EventProcessorClient オブジェクトの URI 内のイベント ハブ名前空間を必ず更新してください。 名前空間の名前は、Azure portal の概要ページで確認できます。

    名前空間の名前を確認する方法を示すスクリーンショット。

アプリをローカルで実行する

これらの変更をコードに対して行った後、アプリケーションをローカルで実行します。 新しい構成では、Azure CLI、Visual Studio、IntelliJ などのローカルの資格情報を取得する必要があります。 Azure でユーザーに割り当てられたロールを使用して、アプリは、Azure サービスにローカルから接続できます。

Azure ホスティング環境を構成する

パスワードレス接続を使用するようにアプリケーションを構成し、ローカルから実行しました。そのアプリケーションを Azure にデプロイすれば、同じコードで Azure サービスに対する認証を行うことができます。 以下のセクションでは、マネージド ID を使用して、デプロイ済みのアプリケーションを Azure Event Hubs に接続するように構成する方法について説明します。 マネージド ID により、Microsoft Entra ID 認証をサポートするリソースに接続するときに使用される Microsoft Entra のマネージド ID がアプリケーションに提供されます。 マネージド ID の詳細を確認してください。

マネージド ID を作成する

ユーザー割り当てマネージド ID は、Azure portal または Azure CLI を使用して作成できます。 アプリケーションでは、ID を使用して他のサービスに対する認証が行われます。

  1. Azure portal の上部で、"マネージド ID" を検索します。 [マネージド ID] の結果を選択します。
  2. [マネージド ID] 概要ページの上部にある [+ 作成] を選択します。
  3. [基本] タブで、次の値を入力します。
    • サブスクリプション: 目的のサブスクリプションを選択します。
    • リソース グループ: 目的のリソース グループを選択します。
    • リージョン: ご自分の場所に近いリージョンを選びます。
    • 名前: MigrationIdentity など、ID のわかりやすい名前を入力します。
  4. ページ下部にある [確認と作成] を選択します。
  5. 検証チェックが完了したら、[作成] を選択します。 Azure で、新しいユーザー割り当て ID が作成されます。

リソースが作成されたら、[Go to resource] (リソースに移動) を選択して、マネージド ID の詳細を表示します。

ユーザー割り当てマネージド ID の作成方法を示すスクリーンショット。

マネージド ID を Web アプリに関連付ける

作成したマネージド ID を使用するように Web アプリを構成する必要があります。 Azure portal または Azure CLI を使用して、アプリに ID を割り当てます。

ID をアプリに関連付けるには、Azure portal で次の手順を実行します。 これらの同じ手順は、次の Azure サービスに適用されます。

  • Azure Spring Apps
  • Azure Container Apps
  • Azure の仮想マシン
  • Azure Kubernetes Service
  1. Web アプリの概要ページに移動します。

  2. 左側のナビゲーションから、[ID] を選択します。

  3. [ID] ページで、[ユーザー割り当て済み] タブに切り替えます。

  4. [+ 追加] を選択して、[ユーザー割り当てマネージド ID の追加] ポップアップを開きます。

  5. ID を作成するために使用したサブスクリプションを選択します。

  6. 名前で MigrationIdentity を検索し、検索結果から選択します。

  7. [追加] を選択して、ID をアプリに関連付けます。

    ユーザー割り当て ID の作成方法を示すスクリーンショット。

マネージド ID にロールを割り当てる

次に、作成したマネージド ID に、イベント ハブへのアクセス許可を付与する必要があります。 ローカル開発ユーザーの場合と同じように、マネージド ID にロールを割り当ててアクセス許可を付与します。

  1. イベント ハブの概要ページに移動し、左側のナビゲーションから [アクセス制御 (IAM)] を選択します。

  2. [ロールの割り当ての追加] を選択します

    マネージド ID にロールを追加する方法を示すスクリーンショット。

  3. [ロール] 検索ボックスで "Azure Event Hubs データ送信者" を検索します。これはキューのデータ操作を管理するために使用される一般的なロールです。 ユース ケースに合った適切なロールであれば何でも割り当てることができます。 一覧から "Azure Event Hubs データ送信者" を選んで、[次へ] を選びます。

  4. [ロールの割り当てを追加] 画面の [アクセスの割り当て先] オプションで [マネージド ID] を選択します。 次に、[+ メンバーの選択] を選択します。

  5. ポップアップで、作成したマネージド ID を名前で検索し、結果から選択します。 [選択] を選択してポップアップ メニューを閉じます。

    割り当てられたマネージド ID の選択方法を示すスクリーンショット。

  6. [次へ] を何度か選択して [レビューと割り当て] を選択すれば、ロールの割り当ては完了です。

  7. Azure Event Hub Data Receiver ロールに対して、これらの手順を繰り返します。

アプリケーション コードを更新する

Azure にデプロイする際に作成した特定のマネージド ID を検索するように、アプリケーション コードを構成する必要があります。 シナリオによっては、アプリのマネージド ID を明示的に設定することで、他の環境 ID が誤って検出されて自動的に使用されるのを防ぐこともできます。

  1. マネージド ID の概要ページで、クライアント ID の値をクリップボードにコピーします。

  2. 次の言語固有の変更を適用します。

    DefaultAzureCredentialOptions オブジェクトを作成し、それを DefaultAzureCredential に渡します。 ManagedIdentityClientId プロパティをクライアント ID に設定します。

    DefaultAzureCredential credential = new(
        new DefaultAzureCredentialOptions
        {
            ManagedIdentityClientId = managedIdentityClientId
        });
    
  3. 構成の更新を適用するために、この変更を行った後にコードを Azure に再デプロイします。

アプリをテストする

更新したコードをデプロイしたら、ホストされているアプリケーションにブラウザーでアクセスします。 アプリはイベント ハブ に正常に接続できるはずです。 Azure 環境にロールの割り当てが反映されるまでに数分かかる場合があることに留意してください。 これでローカル環境と運用環境のどちらでも動作するようにアプリケーションが構成されました。開発者がアプリケーション自体でシークレットを管理する必要はありません。

次の手順

このチュートリアルでは、アプリケーションをパスワードレス接続に移行する方法について説明しました。

この記事で説明されている概念の詳細については、次のリソースを参照してください。