다음을 통해 공유


Azure Pipelines를 사용하여 사용자 지정 정책 배포

중요합니다

2025년 5월 1일부터 새 고객을 위해 Azure AD B2C를 더 이상 구매할 수 없습니다. FAQ에서 자세히 알아보세요.

Azure Pipelines는 CI(연속 통합) 및 CD(지속적인 업데이트)를 지원하여 모든 대상에 대한 코드를 지속적으로 지속적으로 테스트, 빌드 및 제공합니다. 이 문서에서는 Azure Pipelines를 사용하여 Azure AD B2C(Azure Active Directory B2C) 사용자 지정 정책 의 배포 프로세스를 자동화하는 방법을 설명합니다.

중요합니다

Azure Pipelines를 사용하여 Azure AD B2C 사용자 지정 정책을 관리하는 경우 현재 Microsoft Graph API 엔드포인트에서 사용할 수 있는 /beta 작업이 사용됩니다. 프로덕션 애플리케이션에서 이러한 API의 사용은 지원되지 않습니다. 자세한 내용은 Microsoft Graph REST API 베타 엔드포인트 참조를 참조하세요.

필수 조건

관리 작업에 대한 애플리케이션 등록

PowerShell 스크립트를 사용하여 Azure AD B2C 정책을 배포합니다. PowerShell 스크립트가 Microsoft Graph API와 상호 작용하기 전에 Azure AD B2C 테넌트에 애플리케이션 등록을 만듭니다. 아직 등록하지 않은 경우 Microsoft Graph 애플리케이션을 등록합니다.

POWERShell 스크립트가 MS Graph의 데이터에 액세스하려면 등록된 애플리케이션에 관련 애플리케이션 권한을 부여합니다. 앱 등록의 API 권한 내에서 >>Policy.ReadWrite.TrustFramework 사용 권한을 부여받았습니다.

Azure 리포지토리 구성

Microsoft Graph 애플리케이션이 등록되면 정책 파일에 대한 리포지토리를 구성할 준비가 된 것입니다.

  1. Azure DevOps 조직에 로그인합니다.
  2. 새 프로젝트를 만들거나 기존 프로젝트를 선택합니다.
  3. 프로젝트에서 리포지토리로 이동하고 파일을 선택합니다.
  4. 기존 리포지토리를 선택하거나 새로 만듭니다.
  5. 리포지토리의 루트 디렉터리에서 이름이 인 B2CAssets폴더를 만듭니다. Azure AD B2C 사용자 지정 정책 파일을 B2CAssets 폴더에 추가합니다 .
  6. 리포지토리의 루트 디렉터리에서 이름이 인 Scripts폴더를 만듭니다. DeployToB2C.ps1 PowerShell 파일을 만드세요. 다음 PowerShell 스크립트를 DeployToB2C.ps1붙여넣습니다.
  7. 변경 내용을 커밋하고 푸시합니다.

다음 스크립트는 Microsoft Entra ID에서 액세스 토큰을 획득합니다. 토큰을 사용하여 스크립트는 MS Graph API를 호출하여 B2CAssets 폴더에 정책을 업로드합니다. 정책을 업로드하기 전에 정책의 콘텐츠를 변경할 수도 있습니다. 예를 들어, tenant-name.onmicrosoft.com을(를) 테넌트 이름으로 교체하세요.

[Cmdletbinding()]
Param(
    [Parameter(Mandatory = $true)][string]$ClientID,
    [Parameter(Mandatory = $true)][string]$ClientSecret,
    [Parameter(Mandatory = $true)][string]$TenantId,
    [Parameter(Mandatory = $true)][string]$Folder,
    [Parameter(Mandatory = $true)][string]$Files
)

try {
    $body = @{grant_type = "client_credentials"; scope = "https://graph.microsoft.com/.default"; client_id = $ClientID; client_secret = $ClientSecret }

    $response = Invoke-RestMethod -Uri https://login.microsoftonline.com/$TenantId/oauth2/v2.0/token -Method Post -Body $body
    $token = $response.access_token

    $headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
    $headers.Add("Content-Type", 'application/xml')
    $headers.Add("Authorization", 'Bearer ' + $token)

    # Get the list of files to upload
    $filesArray = $Files.Split(",")

    Foreach ($file in $filesArray) {

        $filePath = $Folder + $file.Trim()

        # Check if file exists
        $FileExists = Test-Path -Path $filePath -PathType Leaf

        if ($FileExists) {
            $policycontent = Get-Content $filePath -Encoding UTF8

            # Optional: Change the content of the policy. For example, replace the tenant-name with your tenant name.
            # $policycontent = $policycontent.Replace("your-tenant.onmicrosoft.com", "contoso.onmicrosoft.com")     
    
    
            # Get the policy name from the XML document
            $match = Select-String -InputObject $policycontent  -Pattern '(?<=\bPolicyId=")[^"]*'
    
            If ($match.matches.groups.count -ge 1) {
                $PolicyId = $match.matches.groups[0].value
    
                Write-Host "Uploading the" $PolicyId "policy..."
    
                $graphuri = 'https://graph.microsoft.com/beta/trustframework/policies/' + $PolicyId + '/$value'
                $content = [System.Text.Encoding]::UTF8.GetBytes($policycontent)
                $response = Invoke-RestMethod -Uri $graphuri -Method Put -Body $content -Headers $headers -ContentType "application/xml; charset=utf-8"
    
                Write-Host "Policy" $PolicyId "uploaded successfully."
            }
        }
        else {
            $warning = "File " + $filePath + " couldn't be not found."
            Write-Warning -Message $warning
        }
    }
}
catch {
    Write-Host "StatusCode:" $_.Exception.Response.StatusCode.value__

    $_

    $streamReader = [System.IO.StreamReader]::new($_.Exception.Response.GetResponseStream())
    $streamReader.BaseStream.Position = 0
    $streamReader.DiscardBufferedData()
    $errResp = $streamReader.ReadToEnd()
    $streamReader.Close()

    $ErrResp

    exit 1
}

exit 0

Azure Pipelines 구성

리포지토리가 초기화되고 사용자 지정 정책 파일로 채워지면 릴리스 파이프라인을 설정할 준비가 된 것입니다. 파이프라인을 만들려면 다음 단계를 수행합니다.

  1. 프로젝트에서 파이프라인> 릴리스새 파이프라인> 선택합니다.
  2. 템플릿 선택에서빈 작업을 선택한 다음 적용을 선택합니다.
  3. Stage 이름(예: DeployCustomPolicies)을 입력한 다음 창을 닫습니다.
  4. 아티팩트 추가를 선택하고 원본 유형에서 Azure 리포지토리를 선택합니다.
    1. 프로젝트의 경우 프로젝트를 선택합니다.
    2. Scripts 폴더가 포함된 원본(리포지토리)을 선택합니다.
    3. 기본 분기(예: 마스터)를 선택합니다.
    4. 기본 브랜치의 Latest기본 버전 설정을 그대로 둡니다.
    5. 리포지토리의 원본 별칭 을 입력합니다. 예를 들어 policyRepo입니다.
  5. 추가 선택
  6. 파이프라인의 의도를 반영하도록 이름을 변경합니다. 예를 들어 사용자 지정 정책 파이프라인을 배포합니다.
  7. 저장을 선택하여 파이프라인 구성을 저장합니다.

파이프라인 변수 구성

파이프라인 변수는 파이프라인의 다양한 부분으로 데이터의 키 비트를 가져오는 편리한 방법을 제공합니다. 다음 변수는 Azure AD B2C 환경에 대한 정보를 제공합니다.

이름 가치
clientId 이전에 등록한 애플리케이션의 애플리케이션(클라이언트) ID입니다.
clientSecret 이전에 만든 클라이언트 암호 의 값입니다.
변수 유형을 비밀 로 변경합니다(잠금 아이콘 선택).
tenantId your-b2c-tenant.onmicrosoft.com, 여기서 your-b2c-tenant는 귀하의 Azure AD B2C 테넌트 이름입니다.

파이프라인 변수를 추가하려면 다음 단계를 수행합니다.

  1. 파이프라인에서 변수 탭을 선택합니다.
  2. 파이프라인 변수에서 위의 변수를 해당 값과 함께 추가합니다.
  3. 저장을 선택하여 변수를 저장합니다.

파이프라인 작업 추가

파이프라인 작업은 작업을 수행하는 미리 패키지된 스크립트입니다. DeployToB2C.ps1 PowerShell 스크립트를 호출하는 작업을 추가합니다.

  1. 만든 파이프라인에서 작업 탭을 선택합니다.

  2. 에이전트 작업을 선택한 다음 더하기 기호(+)를 선택하여 에이전트 작업에 작업을 추가합니다.

  3. PowerShell을 검색하여 선택합니다. "Azure PowerShell", "대상 컴퓨터의 PowerShell" 또는 다른 PowerShell 항목을 선택하지 마세요.

  4. 새로 추가된 PowerShell 스크립트 작업을 선택합니다.

  5. PowerShell 스크립트 태스크에 다음 값을 입력합니다.

    • 작업 버전: 2.*

    • 표시 이름: 이 작업이 업로드해야 하는 정책의 이름입니다. 예를 들어 B2C_1A_TrustFrameworkBase.

    • 형식: 파일 경로

    • 스크립트 경로: 줄임표(...)를 선택하고 스크립트 폴더로 이동한 다음 DeployToB2C.ps1 파일을 선택합니다.

    • 인수: 다음 PowerShell 스크립트를 입력합니다.

      -ClientID $(clientId) -ClientSecret $(clientSecret) -TenantId $(tenantId) -Folder $(System.DefaultWorkingDirectory)/policyRepo/B2CAssets/ -Files "TrustFrameworkBase.xml,TrustFrameworkLocalization.xml,TrustFrameworkExtensions.xml,SignUpOrSignin.xml,ProfileEdit.xml,PasswordReset.xml"
      

      -Files 매개 변수는 배포할 정책 파일의 쉼표 구분 기호 목록입니다. 정책 파일로 목록을 업데이트합니다.

      중요합니다

      정책이 올바른 순서로 업로드되었는지 확인합니다. 먼저 기본 정책, 확장 정책, 그 다음에 신뢰 당사자 정책을 따릅니다. 예: TrustFrameworkBase.xml,TrustFrameworkLocalization.xml,TrustFrameworkExtensions.xml,SignUpOrSignin.xml.

  6. 저장을 선택하여 에이전트 작업을 저장합니다.

파이프라인 테스트

릴리스 파이프라인을 테스트하려면 다음을 수행합니다.

  1. 파이프라인을 선택한 다음 릴리스를 선택합니다.
  2. 이전에 만든 파이프라인(예: DeployCustomPolicies)을 선택합니다.
  3. 릴리스 만들기를 선택한 다음 만들기를 선택하여 릴리스를 큐에 추가합니다.

릴리스가 대기 중임을 나타내는 알림 배너가 표시됩니다. 상태를 보려면 알림 배너에서 링크를 선택하거나 릴리스 탭의 목록에서 선택합니다.

다음 단계

자세히 알아보기: