다음을 통해 공유


수명 주기 워크플로 사용을 위한 논리 앱 구성

수명 주기 워크플로의 사용자 지정 작업 확장 기능과 함께 기존 Azure 논리 앱을 사용하려면 먼저 호환 가능해야 합니다. 이 참조 가이드는 Azure 논리 앱이 호환되도록 하기 위해 수행해야 하는 단계 목록을 제공합니다. 수명 주기 워크플로 포털을 통해 새로운 호환 가능 논리 앱을 만드는 방법에 대한 가이드는 사용자 지정 작업 확장을 기반으로 Logic Apps 트리거를 참조하세요.

사용자 지정 작업 확장의 토큰 보안 유형 확인

수명 주기 워크플로와 함께 사용할 Azure Logic App 사용자 지정 확장을 구성하기 전에 먼저 어떤 유형의 토큰 보안이 있는지 파악해야 합니다. 두 가지 토큰 보안 유형은 다음 중 하나일 수 있습니다.

  • 일반
  • POP(소유 증명)

사용자 지정 작업 확장의 보안 토큰 유형을 확인하려면 사용자 지정 확장 페이지를 확인합니다.

사용자 지정 작업 확장 및 토큰 형식의 스크린샷

참고 항목

새 사용자 지정 작업 확장에는 POP(소유 증명) 토큰 보안 유형만 포함됩니다. 소유 증명 토큰 보안 유형을 포함하기 전에 만든 작업 확장에만 일반 유형이 있습니다.

LCW 사용을 위해 기존 Logic Apps 구성

Azure 논리 앱이 사용자 지정 작업 확장과 호환되도록 하려면 다음 단계가 필요합니다.

  • 논리 앱 트리거 구성
  • 콜백 작업 구성(콜백 시나리오에만 해당)
  • 시스템 할당 관리 ID를 사용하도록 설정합니다(일반 보안 토큰 형식 확장에 항상 필요. 이는 사용자 지정 작업 확장이 있는 콜백 시나리오의 기본값이기도 합니다. 이 시나리오 및 기타 사용자 지정 작업 확장 배포 시나리오에 대한 자세한 내용은 사용자 지정 작업 확장 배포 시나리오를 참조하세요.)
  • AuthZ 정책 구성

이를 구성하려면 다음 단계를 따르세요.

  1. 수명 주기 워크플로와 함께 사용할 Azure 논리 앱을 엽니다. Logic Apps의 소개 화면이 표시되며 이는 오른쪽 상단 모서리에 있는 X로 닫을 수 있습니다.

  2. 화면 왼쪽에서 논리 앱 코드 보기를 선택합니다.

  3. 편집기에서 다음 코드를 붙여넣습니다.

    {
      "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": {}
    }
    
  4. [저장]을 선택합니다.

  5. 논리 앱 디자이너로 전환하고 구성된 트리거 및 콜백 작업을 검사합니다. 사용자 지정 비즈니스 논리를 빌드하려면 트리거와 콜백 작업 사이에 다른 작업을 추가합니다. 실행 후 잊어버리는 시나리오에만 관심이 있는 경우 콜백 작업을 제거할 수 있습니다.

  6. 화면 왼쪽에서 ID를 선택합니다.

  7. 시스템 할당 탭에서 상태를 사용하도록 설정하여 Microsoft Entra ID에 등록합니다.

  8. [저장]을 선택합니다.

POP 보안 토큰 유형으로 사용자 지정 작업 확장에 대한 권한 부여 정책 구성

사용자 지정 작업 확장에 대한 보안 토큰 유형이 POP(소유 증명)인 경우 다음 단계에 따라 권한 부여 정책을 설정합니다.

  1. 만든 논리 앱으로 이동하여 권한 부여를 선택합니다.

  2. 다음 표에 따라 권한 부여 정책을 만듭니다.

    정책 이름: POP-Policy

    정책 종류: AADPOP

    클레임
    Issuer https://sts.windows.net/(Tenant ID)/
    appid 00001111-aaaa-2222-bbbb-3333cccc44444
    게시
    u management.azure.com
    p /subscriptions/(subscriptionId)/resourceGroups/(resourceGroupName)/providers/Microsoft.Logic/workflows/(LogicApp name)
  3. 권한 부여 정책을 저장합니다.

주의

사소한 차이가 차후 문제가 될 수 있으니 주의하시기 바랍니다.

  • Issuer의 경우 테넌트 ID 뒤에 슬래시를 포함했는지 확인합니다.
  • appid의 경우 사용자 지정 클레임이 모두 소문자로 appid인지 확인합니다. appid 값은 수명 주기 워크플로를 나타내며 항상 동일합니다.

일반 보안 토큰 유형으로 사용자 지정 작업 확장에 대한 권한 부여 정책 구성

사용자 지정 작업 확장에 대한 보안 토큰 유형이 일반인 경우 다음 단계에 따라 권한 부여 정책을 설정합니다.

  1. Logic Apps 권한 부여 정책의 경우 관리 ID 애플리케이션 ID가 필요합니다. Microsoft Entra 관리 센터는 개체 ID만 표시하므로 애플리케이션 ID를 조회해야 합니다. Microsoft Entra 관리 센터의 엔터프라이즈 애플리케이션에서 개체 ID로 관리 ID를 검색하여 필요한 애플리케이션 ID를 찾을 수 있습니다.

  2. 만든 논리 앱으로 돌아가서 권한 부여을 선택합니다.

  3. 이러한 표를 기반으로 두 가지 권한 부여 정책을 만듭니다.

    정책 이름: AzureADLifecycleWorkflowsAuthPolicy

    정책 종류: AAD

    클레임
    Issuer https://sts.windows.net/(Tenant ID)/
    대상 Logic Apps 관리 ID의 애플리케이션 ID
    appid 00001111-aaaa-2222-bbbb-3333cccc44444

    정책 이름: AzureADLifecycleWorkflowsAuthPolicyV2App

    정책 종류: AAD

    클레임
    Issuer https://login.microsoftonline.com/(Tenant ID)/v2.0
    대상 Logic Apps 관리 ID의 애플리케이션 ID
    azp ce79fdc4-cd1d-4ea5-8139-e74d7dbe0bb7
  4. 권한 부여 정책을 저장합니다.

주의

사소한 차이가 차후 문제가 될 수 있으니 주의하시기 바랍니다.

  • Issuer의 경우 테넌트 ID 뒤에 슬래시를 포함했는지 확인합니다.
  • 대상 그룹의 경우 관리 ID의 개체 ID가 아니라 애플리케이션 ID를 사용하고 있는지 확인합니다.
  • appid의 경우 사용자 지정 클레임이 모두 소문자로 appid인지 확인합니다. appid 값은 수명 주기 워크플로를 나타내며 항상 동일합니다.

수명 주기 워크플로와 함께 논리 앱 사용

이제 논리 앱이 수명 주기 워크플로와 함께 사용하도록 구성되었으므로 UI 또는 API를 통해 사용자 지정 작업 확장을 만들고 수명 주기 워크플로에서 사용할 수 있습니다.

다음 단계