Microsoft Entra ID を使用して Durable Functions を構成する

Microsoft Entra ID (Microsoft Entra ID) は、クラウドベースの ID およびアクセス管理サービスです。 Durable Functions で ID ベースの接続を使うと、Azure Storage アカウントなどの Microsoft Entra で保護されたリソースに対して認可された要求を行うことができ、シークレットを手動で管理する必要がありません。 Durable Functions では、既定の Azure ストレージ プロバイダーを使用して、Azure ストレージ アカウントに対する認証を行う必要があります。 この記事では、マネージド ID 資格情報クライアント シークレット資格情報という 2 種類の ID ベースの接続を利用するように Durable Functions アプリを構成する方法について説明します。

アプリでマネージド ID を使うと、他の Microsoft Entra で保護されたリソース (Azure Key Vault など) に簡単にアクセスできます。 マネージド ID は、Durable Functions 拡張機能バージョン 2.7.0 以降でサポートされています。

Note

厳密に言えば、マネージド ID は、Azure での実行時にのみアプリで使用できます。 ID ベースの接続を使用するように構成されている場合、ローカルで実行されているアプリでは開発者の資格情報を利用して、Azure リソースで認証します。 その後、Azure にデプロイすると、代わりにマネージド ID 構成が利用されます。

前提条件

次の手順では、既存の Durable Functions アプリから開始し、その操作方法についてよく理解していることを前提としています。 特に、このクイックスタートでは、既に以下を実行済みであることを前提としています。

  • Azure portal で Durable Functions プロジェクトを作成したか、ローカル Durable Functions を Azure にデプロイしてある。

そうでない場合は、次のいずれかの記事から始めることをお勧めします。これらの記事に、上記のすべての要件を達成する方法の詳細な手順が示されています。

マネージド ID の有効化

関数に必要な ID は、システム割り当てマネージド ID またはユーザー割り当てマネージド ID のいずれか 1 つだけです。 関数のマネージド ID を有効にし、2 つの ID の違いの詳細を確認するには、こちらの詳細な手順を参照してください。

ロールベースのアクセス制御 (RBAC) をマネージド ID に割り当てる

Azure portal 上のアプリのストレージ リソースに移動します。 次の手順に従って、マネージド ID リソースに次のロールを割り当てます。

  • ストレージ キュー データ共同作成者
  • ストレージ BLOB データ共同作成者
  • ストレージ テーブル データ共同作成者

Azure portal でマネージド ID の構成を追加する

Azure 関数アプリの [構成] ページに移動し、次の変更を実行します。

  1. 既定値 "AzureWebJobsStorage" を削除します。

Screenshot of default storage setting.

  1. 次のいずれか 1 つの値設定を追加して、Azure ストレージ アカウントをリンクします。

    • AzureWebJobsStorage__accountName: 例: mystorageaccount123

    • AzureWebJobsStorage__blobServiceUri: 例: https://mystorageaccount123.blob.core.windows.net/

      AzureWebJobsStorage__queueServiceUri: 例: https://mystorageaccount123.queue.core.windows.net/

      AzureWebJobsStorage__tableServiceUri: 例: https://mystorageaccount123.table.core.windows.net/

      Note

      Azure Government またはグローバル Azure とは別のクラウドを使用している場合は、この 2 番目のオプションを使用して特定のサービス URL を提供する必要があります。 これらの設定の値は、ストレージ アカウントの [エンドポイント] タブにあります。Azure Government で Azure Storage を使用する方法の詳細については、Azure Government で Storage API を使用して開発するに関するドキュメントを参照してください。

    Screenshot of endpoint sample.

  2. マネージド ID の構成を最終処理します。

    • システム割り当て ID を使用する必要がある場合は、他に何も指定しないでください。

    • ユーザー割り当て ID を使用する必要がある場合は、アプリ構成に次のアプリ設定値を追加します。

      • AzureWebJobsStorage__credential: managedidentity

      • AzureWebJobsStorage__clientId: (これは、Microsoft Entra 管理センターから取得した GUID 値です)

      Screenshot of user identity client id.

クライアント シークレットの資格情報を使用するようにアプリを構成する

Microsoft Entra ID にクライアント アプリケーションを登録することは、Azure サービスへのアクセスを構成できるもう 1 つの方法です。 次の手順では、Azure Storage アカウントへの認証にクライアント シークレットの資格情報を使用する方法について説明します。 ローカルと Azure の両方で関数アプリによってこの方法を使用できます。 ただし、クライアント シークレットの資格情報は、マネージド ID よりも構成と管理が複雑で、シークレット資格情報を Azure Functions サービスと共有する必要があるため、お勧めできません

前提条件

次の手順では、既存の Durable Functions アプリから開始し、その操作方法についてよく理解していることを前提としています。 特に、このクイックスタートでは、既に以下を実行済みであることを前提としています。

  • ローカル コンピューターまたは Azure portal で Durable Functions プロジェクトを作成済みである。

Microsoft Entra ID でクライアント アプリケーションを登録する

  1. こちらの手順に従って、Azure portal で Microsoft Entra ID にクライアント アプリケーションを登録します。

  2. クライアント アプリケーションのクライアント シークレットを作成します。 登録済みアプリケーションで、次のようにします。

    1. [証明書] と [シークレット] を選択し、[新しいクライアント シークレット] を選択します

    2. [説明] に入力し、[有効期限] フィールドでシークレットの有効期間を選択します。

    3. シークレット値は慎重にコピーして保存してください。ページを離れた後に再び表示されないためです。

    Screenshot of client secret page.

ロールベースのアクセス制御 (RBAC) をクライアント アプリケーションに割り当てる

次の手順で、これら 3 つのロールをクライアント アプリケーションに割り当てます。

  • ストレージ キュー データ共同作成者
  • ストレージ BLOB データ共同作成者
  • ストレージ テーブル データ共同作成者
  1. 関数のストレージ アカウントの [アクセス制御 (IAM)] ページに移動し、新しいロールの割り当てを追加します。

    Screenshot of access control page.

  2. 必要なロールを選択し、[次へ] をクリックして、アプリケーションを検索し、確認して追加します。

    Screenshot of role assignment page.

クライアント シークレット構成を追加する

Azure で実行してテストするには、Azure portal の Azure 関数アプリの [構成] ページで次を指定します。 ローカルで実行してテストするには、関数の local.settings.json ファイルで次を指定します。

  1. 既定値 "AzureWebJobsStorage" を削除します。

  2. 次のいずれか 1 つの値設定を追加して、Azure ストレージ アカウントをリンクします。

    • AzureWebJobsStorage__accountName: 例: mystorageaccount123

    • AzureWebJobsStorage__blobServiceUri: 例: https://mystorageaccount123.blob.core.windows.net/

      AzureWebJobsStorage__queueServiceUri: 例: https://mystorageaccount123.queue.core.windows.net/

      AzureWebJobsStorage__tableServiceUri: 例: https://mystorageaccount123.table.core.windows.net/

    これらの Uri 変数の値は、ストレージ アカウントの [エンドポイント] タブにあります。

    Screenshot of endpoint sample.

  3. 次の値を指定して、クライアント シークレット資格情報を追加します。

    • AzureWebJobsStorage__clientId: (これは、Microsoft Entra アプリケーション ページにある GUID 値です)

    • AzureWebJobsStorage__ClientSecret: (これは、前の手順で Microsoft Entra 管理センターで生成されたシークレット値です)

    • AzureWebJobsStorage__tenantId: (これは、Microsoft Entra アプリケーションが登録されているテナント ID です)

    クライアント ID とテナント ID の値は、クライアント アプリケーションの [概要] ページにあります。 クライアント シークレットの値は、前の手順で慎重に保存されたものです。 ページを最新の情報に更新した後は、使用できなくなります。

    Screenshot of application's overview page.