クイック スタート: マネージド ID を使用して Durable Functions を構成する

アクセス管理サービスである Microsoft Entra ID のマネージド ID を使うと、シークレットを手動で処理することなく、アプリで、Azure Storage アカウントなどの Microsoft Entra で保護された他のリソースにアクセスできます。 ID は Azure プラットフォームによって管理されるので、ユーザーがシークレットのプロビジョニングやローテーションを行う必要はありません。 Azure リソースへのアクセスを認証するための推奨される方法は、そのような ID を使うことです。

このクイックスタートでは、既定の Azure Storage プロバイダーを使用する Durable Functions アプリを、ストレージ アカウントのアクセスに ID ベースの接続を使うように構成する手順を最後まで行います。

Note

マネージド ID は、Durable Functions 拡張機能バージョン 2.7.0 以降でサポートされています。

Azure アカウントをお持ちでない場合は、開始する前に無料アカウントを作成してください。

前提条件

このクイック スタートを完了するには、次のものが必要です。

  • Azure portal で作成された既存の Durable Functions プロジェクト、または Azure にデプロイしたローカル Durable Functions プロジェクト。
  • Azure で Durable Functions アプリを実行できる知識。

Azure に既存の Durable Functions プロジェクトがデプロイされていない場合は、次のいずれかのクイック スタートから開始することをお勧めします。

ローカル開発

Azure Storage エミュレーターを使用する

ローカル環境で開発する場合は、Azure Storage のローカル エミュレーターである Azurite を使うことをお勧めします。 local.settings.jsonで "AzureWebJobsStorage": "UseDevelopmentStorage = true" を指定して、エミュレーター用にアプリを構成します。

ローカル開発のための ID ベースの接続

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

開発者の資格情報を使うと、接続は、Azure リソースにアクセスするために、次の場所からこの順序でトークンの取得を試みます。

  • Microsoft アプリケーション間で共有されるローカル キャッシュ
  • Visual Studio の現在のユーザー コンテキスト
  • Visual Studio Code の現在のユーザー コンテキスト
  • Azure CLI の現在のユーザー コンテキスト

これらのどのオプションも成功しない場合は、アプリが Azure リソース用の認証トークンを取得できないことを示すエラーが表示されます。

ローカル開発者 ID を使用するようにランタイムを構成する

  1. local.settings.json で Azure ストレージ アカウントの名前を指定します。次はその例です。

    {
       "IsEncrypted": false,
       "Values": {
          "AzureWebJobsStorage__accountName": "<<your Azure Storage account name>>",
          "FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated"
       }
    }
    
  2. Azure portal で Azure ストレージ アカウント リソースに移動し、[アクセス制御 (IAM)] タブに移動して、[ロールの割り当てを追加] をクリックします。 次のロールを見つけます。

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

    [+ メンバーの選択] をクリックし、ポップアップ ウィンドウで自分のメール アドレスを見つけて、自分にロールを割り当てます。 (このメール アドレスは、Microsoft アプリケーション、Azure CLI、または Visual Studio ファミリのエディターにログインするために使うものです)。

    ユーザーへのアクセスの割り当てを示すスクリーンショット。

Azure にデプロイされたアプリに対する ID ベースの接続

マネージド ID リソースを有効にする

開始するには、アプリケーションのマネージド ID を有効にします。 関数アプリでは、システム割り当てマネージド ID またはユーザー割り当てマネージド ID のいずれかが必要になります。 関数アプリのマネージド ID を有効にし、2 種類の ID の違いについて確認するには、マネージド ID の概要に関するページを参照してください。

マネージド ID にアクセス ロールを割り当てる

Azure portal でアプリの Azure Storage リソースに移動し、ロールベースのアクセス制御 (RBAC) の 3 つのロールをマネージド ID リソースに割り当てます。

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

自分の ID リソースを見つけるには、[アクセスの割り当て先] の [マネージド ID] を選んでから、[+ メンバーの選択] を選びます

マネージド ID へのアクセスの割り当てを示すスクリーンショット。

マネージド ID の構成をアプリに追加する

アプリのマネージド ID を使うには、その前にアプリの設定をいくつか変更する必要があります。

  1. Azure portal の関数アプリ リソースのメニューで、[設定][環境変数] を選びます。

  2. 設定の一覧で、[AzureWebJobsStorage] を見つけて、[削除] アイコンを選びます。 既定のストレージ設定のスクリーンショット。

  3. Azure ストレージ アカウントをアプリケーションにリンクする設定を追加します。

    アプリが実行されているクラウドに応じて、"次のいずれかの方法" を使用します。

    • Azure クラウド: アプリが "グローバル Azure" で実行される場合は、Azure ストレージ アカウント名を示す設定 AzureWebJobsStorage__accountName を追加します。 値の例: mystorageaccount123

    • Azure 以外のクラウド: アプリケーションが Azure の外部のクラウドで実行される場合は、アカウント名ではなく、次の 3 つの設定を追加して、ストレージ アカウントの特定のサービス URI ("エンドポイント") を追加する必要があります。

      • 設定名: 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 変数の値は、ストレージ アカウント情報の [エンドポイント] タブから入手できます。

    エンドポイントの例のスクリーンショット。

    Note

    Azure Government またはグローバル Azure とは別の他のクラウドを使っている場合は、ストレージ アカウント名だけでなく、特定のサービス URI を提供するオプションを使う必要があります。 Azure Government での Azure Storage の使用について詳しくは、Azure Government での Storage API を使用した開発に関する記事をご覧ください。

  4. マネージド ID の構成を終了します (設定を変更した後、忘れずに [適用] をクリックしてください)。

    • システム割り当て ID を使用する場合は、他の変更は行いません。

    • "ユーザー割り当て ID" を使う場合は、次の設定をアプリの構成に追加します。

      • AzureWebJobsStorage__credential: 「managedidentity」と入力します

      • AzureWebJobsStorage__clientId: この GUID 値はマネージド ID リソースから取得します

      ユーザー ID のクライアント ID のスクリーンショット。

    Note

    ユーザー割り当て ID が使われている場合、Durable Functions は managedIdentityResourceId をサポートしません。 代わりに clientId を使用してください