Durable Task Scheduler のマネージド ID を構成する

Durable Task Scheduler では、認証にマネージド ID が使用されます。 ユーザー割り当てマネージド ID またはシステム割り当てマネージド ID を使用できます。 ユーザー割り当て ID はアプリ のライフサイクルに関連付けられていないため、アプリのプロビジョニング解除後に再利用できるため、推奨されます。

この記事では、マネージド ID を構成する 2 つの方法について説明します。

前提条件

  • アクティブなサブスクリプションを持つ Azure アカウント。 無料でアカウントを作成できます
  • Durable Task Scheduler とタスク ハブ リソースは既にプロビジョニングされています。
  • Azure CLIdurabletask 拡張機能がインストールされています (az extension add --name durabletask)。
  • スケジューラ リソースの所有者またはユーザー アクセス管理者ロール (ロールの割り当てを作成するために必要)。

永続タスク スケジューラー RBAC ロール

次の Durable Task Scheduler 関連ロールを ID に付与できます。

役割 説明
永続タスク データ共同作成者 すべてのデータ アクセス操作のロール。 このロールは、他のすべてのロールのスーパーセットです。
耐久性タスクワーカー(Durable Task Worker) ワーカー アプリケーションが Durable Task Scheduler と対話するために使用するロール。 アプリがオーケストレーション、アクティビティ、エンティティの処理 にのみ 使用される場合は、このロールを割り当てます。
耐久タスクデータリーダー Durable Task Scheduler のすべてのデータを読み取るロール。 オーケストレーションの一覧表示とエンティティ ペイロードの読み取りのみが必要な場合は、このロールを割り当てます。

ほとんどのアプリには、 Durable Task Data Contributor ロールが必要です。

az durabletask scheduler attach を使ったクイックセットアップ

az durabletask scheduler attach コマンドは、ロールの割り当て、ID の添付ファイル、環境変数の構成を 1 つのコマンドで自動化します。

次の例では、 Durable Task Data Contributor ロールを持つユーザー割り当てマネージド ID を使用して、スケジューラを Function App にアタッチします。

az durabletask scheduler attach \
  --resource-group RESOURCE_GROUP_NAME \
  --name SCHEDULER_NAME \
  --task-hub-name TASKHUB_NAME \
  --role-type contributor \
  --target /subscriptions/SUBSCRIPTION_ID/resourceGroups/RESOURCE_GROUP_NAME/providers/Microsoft.Web/sites/FUNCTION_APP_NAME \
  --identity /subscriptions/SUBSCRIPTION_ID/resourceGroups/RESOURCE_GROUP_NAME/providers/Microsoft.ManagedIdentity/userAssignedIdentities/IDENTITY_NAME

コンテナー アプリの場合:

az durabletask scheduler attach \
  --resource-group RESOURCE_GROUP_NAME \
  --name SCHEDULER_NAME \
  --task-hub-name TASKHUB_NAME \
  --role-type contributor \
  --target /subscriptions/SUBSCRIPTION_ID/resourceGroups/RESOURCE_GROUP_NAME/providers/Microsoft.App/containerApps/CONTAINER_APP_NAME \
  --identity /subscriptions/SUBSCRIPTION_ID/resourceGroups/RESOURCE_GROUP_NAME/providers/Microsoft.ManagedIdentity/userAssignedIdentities/IDENTITY_NAME

--identity パラメーターを省略すると、代わりにシステム割り当てマネージド ID が使用されます。

詳細については、「 az durabletask scheduler attach」を参照してください。

手動セットアップ

各手順を細かく制御する必要がある場合は、以下の手動の手順に従って RBAC を割り当て、ID をアタッチし、環境変数を個別に構成します。

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

  1. ユーザー割り当てマネージド ID を作成する

    az identity create -g RESOURCE_GROUP_NAME -n IDENTITY_NAME
    
  2. 作成された ID リソースに割り当て先を設定する

    assignee=$(az identity show --name IDENTITY_NAME --resource-group RESOURCE_GROUP_NAME --query 'clientId' --output tsv) 
    
  3. スコープを設定します。 最小特権アクセスには 、タスク ハブ スコープ を使用します。 スケジューラ スコープは、ID がスケジューラ内のすべてのタスク ハブにアクセスする必要がある場合にのみ使用します。

    タスク ハブのスコープ (推奨)

    scope="/subscriptions/SUBSCRIPTION_ID/resourceGroups/RESOURCE_GROUP_NAME/providers/Microsoft.DurableTask/schedulers/SCHEDULER_NAME/taskHubs/TASKHUB_NAME"
    

    スケジューラ スコープ (すべてのタスク ハブ)

    scope="/subscriptions/SUBSCRIPTION_ID/resourceGroups/RESOURCE_GROUP_NAME/providers/Microsoft.DurableTask/schedulers/SCHEDULER_NAME"
    
  4. アクセス権を付与します。 次のコマンドを実行して、ロールの割り当てを作成し、アクセス権を付与します。

    az role assignment create \
      --assignee "$assignee" \
      --role "Durable Task Data Contributor" \
      --scope "$scope"
    

    想定される出力

    次の出力例は、 スケジューラ レベルで Durable Task Data Contributor ロールが割り当てられた開発者 ID を示しています。

    {
      "condition": null,
      "conditionVersion": null,
      "createdBy": "YOUR_DEVELOPER_CREDENTIAL_ID",
      "createdOn": "2024-12-20T01:36:45.022356+00:00",
      "delegatedManagedIdentityResourceId": null,
      "description": null,
      "id": "/subscriptions/YOUR_SUBSCRIPTION_ID/resourceGroups/YOUR_RESOURCE_GROUP/providers/Microsoft.DurableTask/schedulers/YOUR_DTS_NAME/providers/Microsoft.Authorization/roleAssignments/ROLE_ASSIGNMENT_ID",
      "name": "ROLE_ASSIGNMENT_ID",
      "principalId": "YOUR_DEVELOPER_CREDENTIAL_ID",
      "principalName": "YOUR_EMAIL",
      "principalType": "User",
      "resourceGroup": "YOUR_RESOURCE_GROUP",
      "roleDefinitionId": "/subscriptions/YOUR_SUBSCRIPTION/providers/Microsoft.Authorization/roleDefinitions/ROLE_DEFINITION_ID",
      "roleDefinitionName": "Durable Task Data Contributor",
      "scope": "/subscriptions/YOUR_SUBSCRIPTION/resourceGroups/YOUR_RESOURCE_GROUP/providers/Microsoft.DurableTask/schedulers/YOUR_DTS_NAME",
      "type": "Microsoft.Authorization/roleAssignments",
      "updatedBy": "YOUR_DEVELOPER_CREDENTIAL_ID",
      "updatedOn": "2024-12-20T01:36:45.022356+00:00"
    }
    

次の手順は、特定のタスク ハブを対象としたロールの割り当てを示しています。 スケジューラ 内のすべての タスク ハブにアクセスする必要がある場合は、スケジューラ レベルで割り当てを実行します。

  1. ユーザー割り当てマネージド ID を作成する

  2. ポータルで Durable Task Scheduler リソースに移動します。

  3. タスク ハブ名を選択します。

  4. 左側のメニューで [アクセス制御 (IAM)] を選択します。

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

    ポータルのAccess Control ペインにロールの割り当てを追加する画面。

  6. [永続タスク データ共同作成者] を検索して選択します。 次へを選択します。

    ポータルで Durable Task Data Contributor ロールの割り当てを選択するスクリーンショット。

  7. [ メンバー ] タブの [ アクセスの割り当て] で、[ マネージド ID] を選択します。

  8. [メンバー] で、[+ メンバーの選択] を選択します

  9. [ マネージド ID の選択 ] ウィンドウで、[ マネージド ID ] ドロップダウンを展開し、[ ユーザー割り当てマネージド ID] を選択します。

    ポータルで使用するユーザー割り当てマネージド ID の種類を選択するスクリーンショット。

  10. 以前に作成したユーザーマネージド ID を選択し、[選択] を 選択します。

  11. [ 確認と割り当て] を選択してロールの割り当てを完了します。

アプリにマネージド ID を割り当てる

ID に Durable Task Scheduler にアクセスするために必要な RBAC が割り当てられたので、アプリに割り当てる必要があります。

  1. マネージド ID のリソース ID を取得します。

    resource_id=$(az resource show --resource-group RESOURCE_GROUP_NAME --name IDENTITY_NAME --resource-type Microsoft.ManagedIdentity/userAssignedIdentities --query id --output tsv)
    
  2. アプリに ID を割り当てます。

    az functionapp identity assign --resource-group RESOURCE_GROUP_NAME --name FUNCTION_APP_NAME --identities "$resource_id"
    
  1. ポータルでアプリから 、[設定]>[Identity] を選択します。

  2. [ユーザー割り当て済み] タブを選択します。

  3. [ + 追加] を選択し、最後のセクションで作成した ID を選択します。 [] を選択し、[] を追加します。

    ポータルで関数アプリにユーザー割り当てマネージド ID を追加するスクリーンショット。

アプリに環境変数を追加する

次の 2 つの環境変数をアプリに追加します。

環境変数 Value
DURABLE_TASK_SCHEDULER_CONNECTION_STRING Endpoint=<SCHEDULER_ENDPOINT>;Authentication=ManagedIdentity;ClientID=<IDENTITY_CLIENT_ID> Endpoint=https://myscheduler.westus2.durabletask.io;Authentication=ManagedIdentity;ClientID=00000000-0000-0000-0000-000000000000
TASKHUB_NAME タスク ハブの名前 my-task-hub

system-assigned ID を使用する場合は、接続文字列: ClientID から "Endpoint=<SCHEDULER_ENDPOINT>;Authentication=ManagedIdentity" パラメーターを省略します。

  1. 接続文字列に必要な情報を取得します。

    スケジューラ エンドポイントを取得します。

    az durabletask scheduler show --resource-group RESOURCE_GROUP_NAME --name SCHEDULER_NAME --query 'properties.endpoint' --output tsv
    

    マネージド ID のクライアント ID を取得します。

    az identity show --name IDENTITY_NAME --resource-group RESOURCE_GROUP_NAME --query 'clientId' --output tsv
    
  2. アプリで両方の環境変数を設定します。

    az functionapp config appsettings set \
      --resource-group RESOURCE_GROUP_NAME \
      --name FUNCTION_APP_NAME \
      --settings \
        DURABLE_TASK_SCHEDULER_CONNECTION_STRING="Endpoint=<SCHEDULER_ENDPOINT>;Authentication=ManagedIdentity;ClientID=<IDENTITY_CLIENT_ID>" \
        TASKHUB_NAME="<TASKHUB_NAME>"
    
  1. 接続文字列に必要な情報を取得します。

    スケジューラ エンドポイントを取得するには、スケジューラ リソースの [概要] タブに移動し、[要点] セクションで [エンドポイント] を見つけます。

    マネージド ID クライアント ID を取得するには、マネージド ID リソースの [概要] タブに移動し、[要点] セクションで [クライアント ID] を見つけます。

    Azure ポータルでクライアント ID の場所を示す、マネージド ID の概要ページのスクリーンショット

  2. ポータルでアプリに移動します。

  3. 左側のメニューで、 設定>Environment 変数を選択します。

  4. DURABLE_TASK_SCHEDULER_CONNECTION_STRING値を持つ Endpoint=<SCHEDULER_ENDPOINT>;Authentication=ManagedIdentity;ClientID=<IDENTITY_CLIENT_ID> という名前の環境変数を追加します。

  5. タスク ハブの名前を持つ TASKHUB_NAME という名前の環境変数を追加します。

  6. [ 適用] を選択し、[ 確認] を選択して変数を保存します。