既存の Azure ロジック アプリをライフサイクル ワークフローのカスタム タスク拡張機能で使う前に、まず互換性を持たせる必要があります。 このリファレンス ガイドでは、Azure ロジック アプリに互換性を持たせるために必要な手順の一覧を示します。 ライフサイクル ワークフロー ポータルを使って新しい互換性のあるロジック アプリを作成するためのガイドについては、「カスタム タスク拡張機能に基づいて Logic Apps をトリガーする」を参照してください。
カスタム タスク拡張機能のトークン セキュリティの種類を決定する
ライフサイクル ワークフローで使用する Azure ロジック アプリ カスタム拡張機能を構成する前に、まず、そのトークン セキュリティの種類を把握する必要があります。 2 つのトークン セキュリティの種類は、次のいずれかになります。
- 標準
- 所有証明 (PoP)
カスタム タスク拡張機能のセキュリティ トークンの種類を確認するには、[カスタム拡張機能] ページをチェックします。
注
新しいカスタム タスク拡張機能には、所有証明 (POP) トークンのセキュリティの種類のみが含まれます。 所有証明トークンのセキュリティの種類を含める前に作成されたタスク拡張機能のみが、標準の種類になります。
LCW を使用するために既存のロジック アプリを構成する
Azure ロジック アプリをカスタム タスク拡張機能で実行できるように互換性を持たせるには、次の手順が必要です。
- ロジック アプリのトリガーを構成する
- コールバック アクションを構成する (コールバック シナリオにのみ適用されます)。
- システム割り当てマネージド ID を有効にします (通常のセキュリティ トークンの種類の拡張機能には常に必要です。これは、カスタム タスク拡張機能を使用するコールバック シナリオの既定値でもあります。この詳細、および他のカスタム タスク拡張機能の展開シナリオについては、「カスタム タスク拡張機能のデプロイ シナリオ」を参照してください。
- AuthZ ポリシーを構成します。
これらを構成するには、次の手順を実行します。
ライフサイクル ワークフローで使う Azure ロジック アプリを開きます。 ロジック アプリの紹介画面が表示されることがありますが、右上隅の [X] を選んで閉じることができます。
画面の左側にある [ロジック アプリ コード ビュー] を選びます。
エディターに次のコードを貼り付けます。
{ "definition": { "$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#", "actions": { "HTTP": { "inputs": { "authentication": { "audience": "https://graph.microsoft.com", "type": "ManagedServiceIdentity" }, "body": { "data": { "operationStatus": "Completed" }, "source": "sample", "type": "lifecycleEvent" }, "method": "POST", "uri": "https://graph.microsoft.com/beta@{triggerBody()?['data']?['callbackUriPath']}" }, "runAfter": {}, "type": "Http" } }, "contentVersion": "1.0.0.0", "outputs": {}, "parameters": {}, "triggers": { "manual": { "inputs": { "schema": { "properties": { "data": { "properties": { "callbackUriPath": { "description": "CallbackUriPath used for Resume Action", "title": "Data.CallbackUriPath", "type": "string" }, "subject": { "properties": { "displayName": { "description": "DisplayName of the Subject", "title": "Subject.DisplayName", "type": "string" }, "email": { "description": "Email of the Subject", "title": "Subject.Email", "type": "string" }, "id": { "description": "Id of the Subject", "title": "Subject.Id", "type": "string" }, "manager": { "properties": { "displayName": { "description": "DisplayName parameter for Manager", "title": "Manager.DisplayName", "type": "string" }, "email": { "description": "Mail parameter for Manager", "title": "Manager.Mail", "type": "string" }, "id": { "description": "Id parameter for Manager", "title": "Manager.Id", "type": "string" } }, "type": "object" }, "userPrincipalName": { "description": "UserPrincipalName of the Subject", "title": "Subject.UserPrincipalName", "type": "string" } }, "type": "object" }, "task": { "properties": { "displayName": { "description": "DisplayName for Task Object", "title": "Task.DisplayName", "type": "string" }, "id": { "description": "Id for Task Object", "title": "Task.Id", "type": "string" } }, "type": "object" }, "taskProcessingResult": { "properties": { "createdDateTime": { "description": "CreatedDateTime for TaskProcessingResult Object", "title": "TaskProcessingResult.CreatedDateTime", "type": "string" }, "id": { "description": "Id for TaskProcessingResult Object", "title": "TaskProcessingResult.Id", "type": "string" } }, "type": "object" }, "workflow": { "properties": { "displayName": { "description": "DisplayName for Workflow Object", "title": "Workflow.DisplayName", "type": "string" }, "id": { "description": "Id for Workflow Object", "title": "Workflow.Id", "type": "string" }, "workflowVersion": { "description": "WorkflowVersion for Workflow Object", "title": "Workflow.WorkflowVersion", "type": "integer" } }, "type": "object" } }, "type": "object" }, "source": { "description": "Context in which an event happened", "title": "Request.Source", "type": "string" }, "type": { "description": "Value describing the type of event related to the originating occurrence.", "title": "Request.Type", "type": "string" } }, "type": "object" } }, "kind": "Http", "type": "Request" } } }, "parameters": {} }
[保存] を選択します。
[ロジック アプリ デザイナー] に切り替え、構成したトリガーとコールバック アクションを確認します。 カスタム ビジネス ロジックを構築するには、トリガーとコールバック アクションの間に他のアクションを追加します。 ファイア アンド フォーゲット シナリオのみに関心がある場合は、このコールバック アクションを削除できます。
画面の左側にある [ID] を選びます。
[システム割り当て済み] タブで、状態を有効にして Microsoft Entra ID に登録します。
[保存] を選択します。
POP セキュリティ トークンの種類を使用してカスタム タスク拡張機能の認可ポリシーを構成する
カスタム タスク拡張機能のセキュリティ トークンの種類が所有証明 (POP) の場合は、次の手順に従って認可ポリシーを設定します。
作成したロジック アプリに移動し、[認可] を選びます。
次の表に基づいて、認可ポリシーを作成します。
ポリシー名:
AzureADLifecycleWorkflowsAuthPOPAuthPolicy
ポリシーの種類:
AADPOP
要求 価値 発行者 https://sts.windows.net/(Tenant ID)/ appid 00001111-aaaa-2222-bbbb-3333cccc4444 m POST u management.azure.com p /subscriptions/(subscriptionId)/resourceGroups/(resourceGroupName)/providers/Microsoft.Logic/workflows/(LogicApp name) 承認ポリシーを保存します。
注意事項
些細な違いが後々問題になる可能性があるため、細心の注意を払ってください。
Issuer
については、テナント ID の後にスラッシュが含まれていることを確認します。appid
のカスタム要求が、すべて小文字のappid
になっていることを確認します。appid
の値はライフサイクル ワークフローを表し、常に同じです。
通常のセキュリティ トークンの種類を使用してカスタム タスク拡張機能の認可ポリシーを構成する
カスタム タスク拡張機能のセキュリティ トークンの種類が通常の場合は、次の手順に従って認可ポリシーを設定します。
Logic Apps の認可ポリシーには、マネージド ID のアプリケーション ID が必要です。 Microsoft Entra 管理センターには [オブジェクト ID] しか表示されないので、アプリケーション ID を調べる必要があります。 Microsoft Entra の管理センターの [エンタープライズ アプリケーション] で、オブジェクト ID でマネージド ID を検索することで、必要なアプリケーション ID を見つけることができます。
作成したロジック アプリに戻り、[承認] を選びます。
次の表に基づいて、2 つの認可ポリシーを作成します。
ポリシー名:
AzureADLifecycleWorkflowsAuthPolicy
ポリシーの種類:
AAD
要求 価値 発行者 https://sts.windows.net/(Tenant ID)/ 対象ユーザー ロジックアプリのマネージドアイデンティティのアプリケーション ID appid 00001111-aaaa-2222-bbbb-3333cccc4444 ポリシー名:
AzureADLifecycleWorkflowsAuthPolicyV2App
ポリシーの種類:
AAD
要求 価値 発行者 https://login.microsoftonline.com/(Tenant ID)/v2.0 対象ユーザー ロジックアプリのマネージドアイデンティティのアプリケーション ID azp ce79fdc4-cd1d-4ea5-8139-e74d7dbe0bb7 承認ポリシーを保存します。
注意事項
些細な違いが後々問題になる可能性があるため、細心の注意を払ってください。
Issuer
については、テナント ID の後にスラッシュが含まれていることを確認します。- 対象ユーザーのマネージド ID には、オブジェクト ID ではなく、アプリケーション ID を使っていることを確認します。
appid
のカスタム要求が、すべて小文字のappid
になっていることを確認します。appid
の値はライフサイクル ワークフローを表し、常に同じです。
ライフサイクル ワークフローでのロジック アプリの使用
ライフサイクル ワークフローで使用するようにロジック アプリが構成されたので、UI または API を使用してカスタム タスク拡張機能を作成し、ライフサイクル ワークフローで使用することができます。