다음을 통해 공유


PowerShell 스크립트를 사용한 API 기반 인바운드 프로비저닝

이 자습서에서는 PowerShell 스크립트를 사용하여 Microsoft Entra ID API 기반 인바운드 프로비전을 구현하는 방법을 설명합니다. 이 자습서의 단계를 사용하여 HR 데이터가 포함된 CSV 파일을 대량 요청 페이로드로 변환하고 Microsoft Entra 프로비전 /bulkUpload API 엔드포인트로 보낼 수 있습니다. 또한 이 문서에서는 동일한 통합 패턴을 모든 기록 시스템에서 사용할 수 있는 방법에 대한 지침도 제공합니다.

통합 시나리오

비즈니스 요구 사항

기록 시스템은 작업자 데이터가 포함된 CSV 파일 내보내기를 주기적으로 생성합니다. CSV 파일에서 데이터를 읽고 대상 디렉터리(하이브리드 사용자의 경우 온-프레미스 Active Directory, 클라우드 전용 사용자의 경우 Microsoft Entra ID)에서 사용자 계정을 자동으로 프로비전하는 통합을 구현하려고 합니다.

구현 요구 사항

구현 관점에서 보면:

  • 무인 PowerShell 스크립트를 사용하여 CSV 파일 내보내기에서 데이터를 읽고 이를 인바운드 프로비전 API 엔드포인트로 보내려고 합니다.
  • PowerShell 스크립트에서는 레코드 시스템과 대상 디렉터리 간의 ID 데이터를 비교하는 복잡한 논리를 구현하려고 하지 않습니다.
  • Microsoft Entra 프로비전 서비스를 사용하여 IT 관리형 프로비전 규칙을 적용하여 대상 디렉터리(온-프레미스 Active Directory 또는 Microsoft Entra ID)에서 계정을 자동으로 생성/업데이트/사용/사용하지 않도록 설정하려고 합니다.

PowerShell 기반 통합 그래픽

통합 시나리오 변형

이 자습서에서는 CSV 파일을 기록 시스템으로 사용하지만 샘플 PowerShell 스크립트를 사용자 지정하여 모든 기록 시스템에서 데이터를 읽을 수 있습니다. 다음은 PowerShell 스크립트를 사용하여 API 기반 인바운드 프로비전을 구현할 수 있는 엔터프라이즈 통합 시나리오 변형 목록입니다.

# 기록 시스템 PowerShell을 사용하여 원본 데이터를 읽는 방법에 대한 통합 지침
1 데이터베이스 테이블 Azure SQL Database 또는 온-프레미스 SQL Server를 사용하는 경우 Read-SqlTableData cmdlet을 사용하여 SQL 데이터베이스 테이블에 저장된 데이터를 읽을 수 있습니다. Invoke-SqlCmd cmdlet을 사용하여 Transact-SQL 또는 XQuery 스크립트를 실행할 수 있습니다.
Oracle/MySQL/Postgres 데이터베이스를 사용하는 경우 공급업체에서 게시하거나 PowerShell 갤러리에서 사용 가능한 PowerShell 모듈을 찾을 수 있습니다. 모듈을 사용하여 데이터베이스 테이블에서 데이터를 읽습니다.
2 LDAP 서버 System.DirectoryServices.Protocols .NET API 또는 PowerShell 갤러리에서 제공되는 LDAP 모듈 중 하나를 사용하여 LDAP 서버를 쿼리합니다. LDAP 서버에서 사용자 데이터를 검색하기 위한 LDAP 스키마 및 계층 구조를 이해합니다.
3 REST API를 노출하는 모든 시스템 PowerShell을 사용하여 REST API 엔드포인트에서 데이터를 읽으려면 Microsoft.PowerShell.Utility 모듈에서 Invoke-RestMethod cmdlet을 사용할 수 있습니다. REST API의 설명서를 확인하고 예상되는 매개 변수와 헤더, 반환되는 형식, 사용하는 인증 방법을 알아봅니다. 그런 다음 그에 따라 Invoke-RestMethod 명령을 조정할 수 있습니다.
4 SOAP API를 노출하는 모든 시스템 PowerShell을 사용하여 SOAP API 엔드포인트에서 데이터를 읽으려면 Microsoft.PowerShell.Management 모듈에서 New-WebServiceProxy cmdlet을 사용할 수 있습니다. SOAP API의 설명서를 확인하고 예상되는 매개 변수와 헤더, 반환되는 형식, 사용하는 인증 방법을 알아봅니다. 그런 다음 그에 따라 New-WebServiceProxy 명령을 조정할 수 있습니다.

원본 데이터를 읽은 후 전처리 규칙을 적용하고 레코드 시스템의 출력을 Microsoft Entra 프로비전 bulkUpload API 엔드포인트로 보낼 수 있는 대량 요청으로 변환합니다.

Important

PowerShell 통합 스크립트를 커뮤니티와 공유하려는 경우 이를 PowerShell 갤러리에 게시하고 GitHub 리포지토리 entra-id-inbound-provisioning에 알려 주면 참조를 추가할 수 있습니다.

이 자습서의 사용 방법

Microsoft Entra 인바운드 프로비전 GitHub 리포지토리에 게시된 PowerShell 샘플 스크립트는 여러 작업을 자동화합니다. 여기에는 대용량 CSV 파일을 처리하고 대량 요청을 청크하여 각 요청에 50개의 레코드를 보내는 논리가 있습니다. 이를 테스트하고 통합 요구 사항에 따라 사용자 지정하는 방법은 다음과 같습니다.

참고 항목

샘플 PowerShell 스크립트는 구현 참조를 위해 "있는 그대로" 제공됩니다. 스크립트와 관련된 질문이 있거나 스크립트를 개선하려는 경우 GitHub 프로젝트 리포지토리를 사용하세요.

# 자동화 업무 구현 지침 고급 사용자 지정
1 CSV 파일에서 작업자 데이터를 읽습니다. PowerShell 스크립트를 다운로드합니다. 모든 CSV 파일에서 데이터를 읽을 수 있는 기본 논리가 있습니다. 이 스크립트의 다양한 실행 모드에 대해 알아보려면 CSV2SCIM PowerShell 사용 세부 정보를 참조하세요. 기록 시스템이 다른 경우 PowerShell 스크립트를 사용자 지정하는 방법에 대한 통합 시나리오 변형 섹션에 제공된 지침을 확인합니다.
2 데이터를 전처리하고 SCIM 형식으로 변환합니다. 기본적으로 PowerShell 스크립트는 CSV 파일의 각 레코드를 SCIM 코어 사용자 + 엔터프라이즈 사용자 표현으로 변환합니다. 이 프로세스에 익숙해지려면 표준 스키마를 사용하여 대량 요청 페이로드 생성 섹션의 단계를 따릅니다. CSV 파일에 다른 필드가 있는 경우 AttributeMapping.psd 파일을 조정하여 유효한 SCIM 사용자를 생성합니다. 사용자 지정 SCIM 스키마를 사용하여 대량 요청을 생성할 수도 있습니다. 사용자 지정 CSV 데이터 유효성 검사 논리를 포함하도록 PowerShell 스크립트를 업데이트합니다.
3 Microsoft Entra ID 인증을 위해 인증서를 사용합니다. 인바운드 프로비전 API에 액세스할 수 있는 서비스 주체를 만듭니다. 인증을 위해 클라이언트 인증서를 사용하는 방법을 알아보려면 서비스 주체 인증을 위한 클라이언트 인증서 구성 섹션의 단계를 참조하세요. 인증을 위해 서비스 주체 대신 관리 ID를 사용하려면 샘플 스크립트에서 Connect-MgGraph 사용을 검토하고 관리 ID를 사용하도록 업데이트합니다.
4 온-프레미스 Active Directory 또는 Microsoft Entra ID에 계정을 프로비전합니다. API 기반 인바운드 프로비전 앱을 구성합니다. 그러면 고유한 /bulkUpload API 엔드포인트가 생성됩니다. 인증서 기반 인증에서 서비스 주체를 사용하여 스크립트를 실행하려면 클라이언트 인증서 인증을 사용하여 대량 요청 페이로드 업로드 섹션의 단계를 참조하세요. 특성 흐름의 유효성을 검사하고 통합 요구 사항에 따라 특성 매핑을 사용자 지정합니다. 사용자 지정 SCIM 스키마와 함께 대량 요청을 사용하려는 경우 사용자 지정 SCIM 스키마 요소를 포함하도록 프로비전 앱 스키마를 확장합니다.
5 프로비전 로그를 검사하고 실패한 기록이 있는지 프로비전을 다시 시도합니다. 프로비전 로그 데이터를 가져오고 분석하는 방법을 알아보려면 최신 동기화 주기의 프로비전 로그 페치 섹션의 단계를 참조하세요. 실패한 사용자 기록을 식별하고 다음 업로드 주기에 포함합니다. -
6 PowerShell 기반 자동화를 프로덕션에 배포합니다. API 기반 프로비전 흐름을 확인하고 요구 사항에 맞게 PowerShell 스크립트를 사용자 지정한 후에는 자동화를 Azure Automation의 PowerShell Workflow Runbook 또는 Windows 서버에서 실행되도록 예약된 서버 프로세스로 배포할 수 있습니다. -

PowerShell 스크립트 다운로드

  1. GitHub 리포지토리 entra-id-inbound-provisioning에 액세스합니다.
  2. 코드 ->복제 또는 코드 ->ZIP 다운로드 옵션을 사용하여 이 리포지토리의 콘텐츠를 로컬에 복사합니다.
  3. PowerShell/CSV2SCIM 폴더로 이동합니다. 다음과 같은 디렉터리 구조를 가지고 있습니다.
    • src
      • CSV2SCIM.ps1(주 스크립트)
      • ScimSchemaRepresentations(AttributeMapping.psd1 파일의 유효성을 검사하기 위한 표준 SCIM 스키마 정의가 포함된 폴더)
        • EnterpriseUser.json, Group.json, Schema.json, User.json
    • 샘플
      • AttributeMapping.psd1(표준 SCIM 특성에 대한 CSV 파일의 열 매핑 샘플)
      • csv-with-2-records.csv(2개의 레코드가 포함된 샘플 CSV 파일)
      • csv-with-1000-records.csv(1000개 레코드가 포함된 샘플 CSV 파일)
      • Test-ScriptCommands.ps1(샘플 사용 명령)
      • UseClientCertificate.ps1(자체 서명된 인증서를 생성하고 이를 OAuth 흐름에서 사용할 서비스 주체 자격 증명으로 업로드하는 스크립트)
      • Sample1(CSV 파일 열을 SCIM 표준 특성에 매핑할 수 있는 방법에 대한 더 많은 예가 포함된 폴더입니다. 직원, 계약자, 인턴에 대해 서로 다른 CSV 파일을 가져오는 경우 각 엔터티에 대해 별도의 AttributeMapping.psd1 파일을 만들 수 있습니다.)
  4. 최신 버전의 PowerShell을 다운로드하여 설치합니다.
  5. 원격 서명 스크립트 실행을 사용하도록 설정하려면 다음 명령을 실행합니다.
    set-executionpolicy remotesigned
    
  6. 다음 필수 구성 요소 모듈을 설치합니다.
    Install-Module -Name Microsoft.Graph.Applications,Microsoft.Graph.Reports
    

표준 스키마를 사용하여 대량 요청 페이로드 생성

이 섹션에서는 CSV 파일에서 표준 SCIM 코어 사용자 및 기업 사용자 특성을 사용하여 대량 요청 페이로드를 생성하는 방법을 설명합니다. 절차를 설명하기 위해 CSV 파일 Samples/csv-with-2-records.csv를 사용해 보겠습니다.

  1. Notepad++ 또는 Excel에서 CSV 파일 Samples/csv-with-2-records.csv를 열어 파일에 있는 열을 확인합니다. Excel의 열 스크린샷.

  2. Notepad++ 또는 Visual Studio Code와 같은 소스 코드 편집기에서 CSV 파일 열을 SCIM 표준 스키마 특성에 매핑할 수 있는 PowerShell 데이터 파일 Samples/AttributeMapping.psd1을 엽니다. 기본적으로 제공되는 파일에는 해당 SCIM 스키마 특성에 대한 CSV 파일 열의 매핑이 이미 사전 구성되어 있습니다.

        @{
        externalId   = 'WorkerID'
        name         = @{
            familyName = 'LastName'
            givenName  = 'FirstName'
        }
        active       = { $_.'WorkerStatus' -eq 'Active' }
        userName     = 'UserID'
        displayName  = 'FullName'
        nickName     = 'UserID'
        userType     = 'WorkerType'
        title        = 'JobTitle'
        addresses    = @(
            @{
                type          = { 'work' }
                streetAddress = 'StreetAddress'
                locality      = 'City'
                postalCode    = 'ZipCode'
                country       = 'CountryCode'
            }
        )
        phoneNumbers = @(
            @{
                type  = { 'work' }
                value = 'OfficePhone'
            }
        )
        "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User" = @{
            employeeNumber = 'WorkerID'
            costCenter     = 'CostCenter'
            organization   = 'Company'
            division       = 'Division'
            department     = 'Department'
            manager        = @{
                value = 'ManagerID'
            }
        }
    }
    
  3. PowerShell을 열고 CSV2SCIM\src 디렉터리로 변경합니다.

  4. 다음 명령을 실행하여 AttributeMapping 변수를 초기화합니다.

    $AttributeMapping = Import-PowerShellDataFile '..\Samples\AttributeMapping.psd1'
    
  5. 다음 명령을 실행하여 AttributeMapping 파일에 유효한 SCIM 스키마 특성이 있는지 유효성을 검사합니다. 이 명령은 유효성 검사에 성공하면 True를 반환합니다.

    .\CSV2SCIM.ps1 -Path '..\Samples\csv-with-2-records.csv' -AttributeMapping $AttributeMapping -ValidateAttributeMapping
    
  6. AttributeMapping 파일에 userId라는 잘못된 SCIM 특성이 있으면 ValidateAttributeMapping 모드에서 다음 오류를 표시한다고 가정해 보겠습니다.

    매핑 오류 스크린샷.

  7. AttributeMapping 파일이 유효한지 확인한 후 다음 명령을 실행하여 CSV 파일에 있는 두 개의 레코드를 포함하는 파일 BulkRequestPayload.json에 대량 요청을 생성합니다.

    .\CSV2SCIM.ps1 -Path '..\Samples\csv-with-2-records.csv' -AttributeMapping $AttributeMapping > BulkRequestPayload.json
    
  8. BulkRequestPayload.json 파일의 콘텐츠를 열어 SCIM 특성이 AttributeMapping.psd1 파일에 정의된 매핑에 따라 설정되었는지 확인할 수 있습니다.

  9. Graph Explorer 또는 cURL을 사용하여 프로비저닝 앱과 연결된 /bulkUpload API 엔드포인트에 위에서 생성된 파일을 있는 그대로 게시할 수 있습니다. 참조:

  10. 동일한 PowerShell 스크립트를 사용하여 생성된 페이로드를 API 엔드포인트에 직접 업로드하려면 다음 섹션을 참조하세요.

서비스 주체 인증을 위한 클라이언트 인증서 구성

참고 항목

여기 지침은 자체 서명된 인증서를 생성하는 방법을 보여 줍니다. 자체 서명된 인증서는 기본적으로 신뢰할 수 없으며 관리하기 어려울 수 있습니다. 또한 강력하지 않을 수 있는 오래된 해시 및 암호 그룹을 사용할 수 있습니다. 보안 향상을 위해 잘 알려진 인증 기관에서 서명한 인증서를 구매합니다.

  1. 다음 PowerShell 스크립트를 실행하여 새로운 자체 서명된 인증서를 생성합니다. 잘 알려진 인증 기관에서 서명한 인증서를 구입한 경우 이 단계를 건너뛸 수 있습니다.
    $ClientCertificate = New-SelfSignedCertificate -Subject 'CN=CSV2SCIM' -KeyExportPolicy 'NonExportable' -CertStoreLocation Cert:\CurrentUser\My
    $ThumbPrint = $ClientCertificate.ThumbPrint
    
    생성된 인증서는 현재 User\Personal\Certificates에 저장됩니다. 제어판 ->사용자 인증서 관리 옵션을 사용하여 볼 수 있습니다.
  2. 이 인증서를 유효한 서비스 주체와 연결하려면 Microsoft Entra 관리 센터에 애플리케이션 관리자로 로그인합니다.
  3. 앱 등록에서 구성한 서비스 주체를 엽니다.
  4. 개요 블레이드에서 개체 ID를 복사합니다. 이 값을 사용하여 문자열 <AppObjectId>를 바꿉니다. 애플리케이션(클라이언트) ID를 복사합니다. 나중에 사용할 것이며 <AppClientId>로 참조됩니다.
  5. 다음 명령을 실행하여 등록된 서비스 주체에 인증서를 업로드합니다.
    Connect-MgGraph -Scopes "Application.ReadWrite.All"
    Update-MgApplication -ApplicationId '<AppObjectId>' -KeyCredentials @{
       Type = "AsymmetricX509Cert"
       Usage = "Verify"
       Key = $ClientCertificate.RawData
    }
    
    등록된 앱의 인증서 및 비밀 블레이드 아래에 인증서가 표시됩니다. 클라이언트 인증서 스크린샷.
  6. 서비스 주체 앱에 다음 두 가지 애플리케이션 권한 범위(Application.Read.AllSynchronization.Read.All)를 추가합니다. 이는 PowerShell 스크립트가 ServicePrincipalId를 통해 프로비전 앱을 조회하고 프로비전 JobId를 가져오는 데 필요합니다.

클라이언트 인증서 인증을 사용하여 대량 요청 페이로드 업로드

이 섹션에서는 신뢰할 수 있는 클라이언트 인증서를 사용하여 생성된 대량 요청 페이로드를 인바운드 프로비전 API 엔드포인트로 보내는 방법을 설명합니다.

  1. 구성한 API 기반 프로비전 앱을 엽니다. 프로비전 앱>속성>개체 ID에서 프로비전 앱과 연결된 ServicePrincipalId를 복사합니다.

    개체 ID 스크린샷.

  2. ServicePrincipalId, ClientIdTenantId에 올바른 값을 제공하여 다음 명령을 실행합니다.

    $ClientCertificate = Get-ChildItem -Path cert:\CurrentUser\my\ | Where-Object {$_.Subject -eq "CN=CSV2SCIM"}  
    $ThumbPrint = $ClientCertificate.ThumbPrint
    
    .\CSV2SCIM.ps1 -Path '..\Samples\csv-with-2-records.csv' -AttributeMapping $AttributeMapping -TenantId "contoso.onmicrosoft.com" -ServicePrincipalId "<ProvisioningAppObjectId>" -ClientId "<AppClientId>" -ClientCertificate (Get-ChildItem Cert:\CurrentUser\My\$ThumbPrint)
    
  3. 위 요청이 처리되었는지 확인하려면 프로비전 앱의 프로비전 로그 블레이드를 방문하세요.

사용자 지정 SCIM 스키마를 사용하여 대량 요청 생성

이 섹션에서는 CSV 파일의 필드로 구성된 사용자 지정 SCIM 스키마 네임스페이스를 사용하여 대량 요청을 생성하는 방법을 설명합니다.

  1. Notepad++ 또는 Visual Studio Code와 같은 소스 코드 편집기에서 CSV 파일 열을 SCIM 표준 스키마 특성에 매핑할 수 있는 PowerShell 데이터 파일 Samples/AttributeMapping.psd1을 엽니다. 기본적으로 제공되는 파일에는 해당 SCIM 스키마 특성에 대한 CSV 파일 열의 매핑이 이미 사전 구성되어 있습니다.

  2. PowerShell을 열고 CSV2SCIM\src 디렉터리로 변경합니다.

  3. 다음 명령을 실행하여 AttributeMapping 변수를 초기화합니다.

    $AttributeMapping = Import-PowerShellDataFile '..\Samples\AttributeMapping.psd1'
    
  4. 다음 명령을 실행하여 AttributeMapping 파일에 유효한 SCIM 스키마 특성이 있는지 유효성을 검사합니다. 이 명령은 유효성 검사에 성공하면 True를 반환합니다.

    .\CSV2SCIM.ps1 -Path '..\Samples\csv-with-2-records.csv' -AttributeMapping $AttributeMapping -ValidateAttributeMapping
    
  5. SCIM 코어 사용자 및 엔터프라이즈 사용자 특성 외에도 사용자 지정 SCIM 스키마 네임스페이스 urn:ietf:params:scim:schemas:extension:contoso:1.0:User 아래의 모든 CSV 필드의 단순 목록을 가져오려면 다음 명령을 실행합니다.

     .\CSV2SCIM.ps1 -Path '..\Samples\csv-with-2-records.csv' -AttributeMapping $AttributeMapping -ScimSchemaNamespace "urn:ietf:params:scim:schemas:extension:contoso:1.0:User"  > BulkRequestPayloadWithCustomNamespace.json
    

    CSV 필드는 사용자 지정 SCIM 스키마 네임스페이스 아래에 표시됩니다. 사용자 지정 스키마에 따른 사용자 세부 정보 스크린샷.

프로비전 작업 스키마 확장

HR 팀에서 전송한 데이터 파일에는 표준 SCIM 스키마에 직접적으로 표시되지 않는 추가 특성이 포함되어 있는 경우가 많습니다. 이러한 특성을 나타내려면 SCIM 확장 스키마를 만들고 이 네임스페이스 아래에 특성을 추가하는 것이 좋습니다.

CSV2SCIM 스크립트는 CSV 파일의 모든 열을 읽고 확장 스키마 네임스페이스에 추가하며 프로비전 앱 스키마를 업데이트하는 UpdateSchema라는 실행 모드를 제공합니다.

참고 항목

프로비전 앱 스키마에 특성 확장이 이미 있는 경우 이 모드는 특성 확장이 이미 존재한다는 경고만 표시합니다. 따라서 새 필드가 CSV 파일에 추가되고 이를 확장으로 추가하려는 경우 UpdateSchema 모드에서 CSV2SCIM 스크립트를 실행하는 데 문제가 없습니다.

절차를 설명하기 위해 CSV2SCIM 폴더에 있는 CSV 파일 Samples/csv-with-2-records.csv를 사용할 예정입니다.

  1. 메모장, Excel 또는 TextPad에서 CSV 파일 Samples/csv-with-2-records.csv를 열어 파일에 있는 열을 확인합니다.

    CSV 열 확인 방법 스크린샷.

  2. 다음 명령을 실행합니다.

    .\CSV2SCIM.ps1 -Path '..\Samples\csv-with-2-records.csv' -UpdateSchema -ServicePrincipalId <servicePrincipalId> -TenantId "contoso.onmicrosoft.com" -ScimSchemaNamespace "urn:ietf:params:scim:schemas:extension:contoso:1.0:User"
    
  3. 특성 매핑 페이지를 열고 고급 옵션 아래의 API 특성 목록 편집 옵션에 액세스하여 프로비전 앱 스키마에 대한 업데이트를 확인할 수 있습니다.

  4. 특성 목록에는 새 네임스페이스 아래의 특성이 표시됩니다.

최신 동기화 주기의 프로비전 로그 가져오기

대량 요청을 보낸 후 Microsoft Entra ID에서 처리된 최신 동기화 주기의 로그를 쿼리할 수 있습니다. PowerShell 스크립트를 사용하여 동기화 통계 및 처리 세부 정보를 검색하고 분석을 위해 저장할 수 있습니다.

  1. 콘솔에서 로그 세부 정보와 동기화 통계를 보려면 다음 명령을 실행합니다.

    .\CSV2SCIM.ps1 -ServicePrincipalId <servicePrincipalId> -TenantId "contoso.onmicrosoft.com" -GetPreviousCycleLogs -NumberOfCycles 1
    

    동기화 통계 스크린샷.

    참고 항목

    NumberOfCycles는 기본적으로 1입니다. 더 많은 동기화 주기를 검색하려면 숫자를 지정합니다.

  2. 콘솔에서 동기화 통계를 보고 로그 세부 정보를 변수에 저장하려면 다음 명령을 실행합니다.

    $logs=.\CSV2SCIM.ps1 -ServicePrincipalId <servicePrincipalId> -TenantId "contoso.onmicrosoft.com" -GetPreviousCycleLogs
    

    클라이언트 인증서 인증을 사용하여 명령을 실행하려면 ServicePrincipalId, ClientIdTenantId에 올바른 값을 제공하여 명령을 실행합니다.

    $ClientCertificate = Get-ChildItem -Path cert:\CurrentUser\my\ | Where-Object {$_.Subject -eq "CN=CSV2SCIM"}  
    $ThumbPrint = $ClientCertificate.ThumbPrint
    
    $logs=.\CSV2SCIM.ps1 -ServicePrincipalId "<ProvisioningAppObjectId>" -TenantId "contoso.onmicrosoft.com" -ClientId "<AppClientId>" -ClientCertificate (Get-ChildItem Cert:\CurrentUser\My\$ThumbPrint) -GetPreviousCycleLogs -NumberOfCycles 1
    
    • 특정 레코드의 세부 정보를 보려면 컬렉션을 반복하거나 컬렉션의 특정 인덱스를 선택할 수 있습니다. 예: $logs[0]

      선택한 인덱스의 스크린샷.

    • 또한 where-object 문을 사용하여 sourceID 또는 DisplayName을 사용하여 특정 레코드를 검색할 수도 있습니다. ProvisioningLogs 속성에서 해당 특정 레코드에 대해 수행된 작업의 모든 세부 정보를 찾을 수 있습니다.

      $user = $logs | where sourceId -eq '1222'
      $user.ProvisioningLogs | fl
      

      프로비전 로그 스크린샷.

    • ModifiedProperties 특성에서 특정 사용자가 영향을 받는 특성을 확인할 수 있습니다. $user.ProvisioningLogs.ModifiedProperties

      속성 창의 스크린샷

부록

CSV2SCIM PowerShell 사용 세부 정보

다음은 CSV2SCIM PowerShell 스크립트에서 허용하는 명령줄 매개 변수 목록입니다.

PS > CSV2SCIM.ps1 -Path <path-to-csv-file> 
[-ScimSchemaNamespace <customSCIMSchemaNamespace>] 
[-AttributeMapping $AttributeMapping] 
[-ServicePrincipalId <spn-guid>] 
[-ValidateAttributeMapping]
[-UpdateSchema]
[-ClientId <client-id>]
[-ClientCertificate <certificate-object>]
[-RestartService]

참고 항목

AttributeMappingValidateAttributeMapping 명령줄 매개 변수는 표준 SCIM 스키마 요소에 대한 CSV 열 특성의 매핑을 참조하세요. 원본 SCIM 스키마 요소와 대상 Microsoft Entra/온-프레미스 Active Directory 특성 간에 Microsoft Entra 관리 센터 프로비전 앱에서 수행하는 특성 매핑을 참조하지 않습니다.

매개 변수 설명 처리 설명
Path CSV 파일의 전체 또는 상대 경로입니다. 예: .\Samples\csv-with-1000-records.csv 필수: 예
ScimSchemaNamespace CSV 파일의 모든 열을 특정 네임스페이스에 속하는 사용자 지정 SCIM 특성으로 보내는 데 사용하는 사용자 지정 SCIM 스키마 네임스페이스입니다. 예를 들어 urn:ietf:params:scim:schemas:extension:csv:1.0:User 필수: 원하는 경우에만 다음을 수행합니다.
- 프로비전 앱 스키마를 업데이트하거나
페이로드에 사용자 지정 SCIM 특성을 포함하려는 경우에 해당합니다.
AttributeMapping CSV 파일의 열을 SCIM 코어 사용자 및 엔터프라이즈 사용자 특성에 매핑하는 PowerShell 데이터(.psd1 확장자) 파일을 가리킵니다.
예: CSV2SCIM 스크립트용 AttributeMapping.psd 파일을 참조하세요.
예를 들면 다음과 같습니다. powershell $AttributeMapping = Import-PowerShellDataFile '.\Samples\AttributeMapping.psd1'`-AttributeMapping $AttributeMapping
필수: 예
UpdateSchema 스위치를 사용할 때 이를 지정할 필요가 없는 유일한 시나리오입니다.
ValidateAttributeMapping 이 스위치 플래그를 사용하여 AttributeMapping 파일에 SCIM Core 및 Enterprise 사용자 스키마를 준수하는 특성이 포함되어 있는지 유효성을 검사합니다. 필수: 아니요
규정 준수를 위해 사용하는 것이 좋습니다.
ServicePrincipalId 프로비전 앱>속성>개체 ID에서 검색할 수 있는 프로비전 앱 서비스 주체 ID의 GUID 값입니다. 필수: 원하는 경우에만 다음을 수행합니다.
- 프로비전 앱 스키마 업데이트 또는
- 생성된 대량 요청을 API 엔드포인트로 보냅니다.
UpdateSchema 이 스위치를 사용하면 스크립트에 CSV 열을 읽고 이를 프로비전 앱 스키마에 사용자 지정 SCIM 특성으로 추가하도록 지시할 수 있습니다.
ClientId OAuth 인증 흐름에 사용할 Microsoft Entra 등록 앱의 클라이언트 ID입니다. 이 앱에는 유효한 인증서 자격 증명이 있어야 합니다. 필수: 인증서 기반 인증을 수행하는 경우에만 해당됩니다.
ClientCertificate OAuth 흐름 중에 사용할 클라이언트 인증 인증서입니다. 필수: 인증서 기반 인증을 수행하는 경우에만 해당됩니다.
GetPreviousCycleLogs 최신 동기화 주기의 프로비전 로그를 가져옵니다.
NumberOfCycles 검색해야 하는 동기화 주기 수를 지정합니다. 이 값은 기본적으로 1입니다.
RestartService 이 옵션을 사용하면 스크립트는 데이터를 업로드하기 전에 프로비전 작업을 일시적으로 일시 중지하고, 데이터를 업로드한 다음 작업을 다시 시작하여 페이로드가 즉시 처리되도록 합니다. 이 옵션은 테스트 중에만 사용합니다.

AttributeMapping.psd 파일

이 파일은 CSV 파일의 열을 표준 SCIM 코어 사용자 및 엔터프라이즈 사용자 특성 스키마 요소에 매핑하는 데 사용됩니다. 또한 이 파일은 대량 요청 페이로드로 CSV 파일 콘텐츠의 적절한 표현을 생성합니다.

다음 예에서는 CSV 파일의 다음 열을 해당하는 SCIM 코어 사용자 및 엔터프라이즈 사용자 특성에 매핑했습니다.

매핑된 특성에 대한 CSV 열의 스크린샷.

    @{
    externalId   = 'WorkerID'
    name         = @{
        familyName = 'LastName'
        givenName  = 'FirstName'
    }
    active       = { $_.'WorkerStatus' -eq 'Active' }
    userName     = 'UserID'
    displayName  = 'FullName'
    nickName     = 'UserID'
    userType     = 'WorkerType'
    title        = 'JobTitle'
    addresses    = @(
        @{
            type          = { 'work' }
            streetAddress = 'StreetAddress'
            locality      = 'City'
            postalCode    = 'ZipCode'
            country       = 'CountryCode'
        }
    )
    phoneNumbers = @(
        @{
            type  = { 'work' }
            value = 'OfficePhone'
        }
    )
    "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User" = @{
        employeeNumber = 'WorkerID'
        costCenter     = 'CostCenter'
        organization   = 'Company'
        division       = 'Division'
        department     = 'Department'
        manager        = @{
            value = 'ManagerID'
        }
    }
}

다음 단계