다음을 통해 공유


프로비전을 지원하지 않는 애플리케이션의 사용자 관리 - Microsoft PowerShell

애플리케이션을 액세스 검토와 같은 Microsoft Entra ID 거버넌스 기능과 함께 사용하기 전에 애플리케이션의 기존 사용자로 Microsoft Entra ID를 채워야 하는 세 가지 일반적인 시나리오가 있습니다.

  • 자체 ID 공급자 사용 후 Microsoft Entra ID로 마이그레이션된 애플리케이션
  • Microsoft Entra ID를 유일한 ID 공급자로 사용하지 않는 애플리케이션
  • 애플리케이션은 Microsoft Entra ID를 ID 공급자로 사용하지 않으며 프로비전을 지원하지 않습니다.

애플리케이션이 프로비전을 지원하거나, LDAP 디렉터리인 SQL 데이터베이스를 사용하거나, SOAP 또는 REST API가 있거나, ID 공급자로 Microsoft Entra ID를 사용하는 처음 두 시나리오에 대한 자세한 내용은 애플리케이션의 기존 사용자 관리 문서를 참조하세요. 이 문서에서는 이러한 애플리케이션 범주의 기존 사용자에 대한 ID 거버넌스 기능을 사용하는 방법을 설명합니다.

이 문서에서는 세 번째 시나리오에 대해 설명합니다. 일부 레거시 애플리케이션의 경우 애플리케이션에서 다른 ID 공급자 또는 로컬 자격 증명 인증을 제거하거나 해당 애플리케이션에 대한 프로비전 프로토콜 지원을 사용하도록 설정하는 것이 불가능할 수 있습니다. 이러한 애플리케이션의 경우 Microsoft Entra ID를 사용하여 해당 애플리케이션에 대한 액세스 권한이 있는 사용자를 검토하거나 해당 애플리케이션에서 다른 사용자의 액세스를 제거하면 Microsoft Entra ID에서 애플리케이션 사용자를 나타내는 할당을 만들어야 합니다. 이 문서에서는 Microsoft Entra ID를 ID 공급자로 사용하지 않고 프로비전을 지원하지 않는 애플리케이션의 시나리오에 대해 설명합니다.

라이선스 요구 사항

이 기능을 사용하려면 Microsoft Entra ID Governance 라이선스가 필요합니다. 요구 사항에 적합한 라이선스를 찾으려면 Microsoft Entra ID Governance 라이선스 기본 사항을 참조하세요.

용어

이 문서에서는 Microsoft Graph PowerShell cmdlet을 사용하여 애플리케이션 역할 할당을 관리하는 프로세스를 설명합니다. 다음 Microsoft Graph 용어를 사용합니다.

Microsoft Graph 용어를 보여 주는 다이어그램

Microsoft Entra ID에서 서비스 주체(ServicePrincipal)는 특정 조직의 디렉터리에 있는 애플리케이션을 나타냅니다. ServicePrincipal에는 애플리케이션에서 지원하는 역할(예: Marketing specialist)을 나열하는 AppRoles라는 속성이 있습니다. AppRoleAssignment는 서비스 주체에 사용자를 연결하고 해당 애플리케이션에서 사용자의 역할을 지정합니다.

Microsoft Entra 권한 관리 액세스 패키지를 사용하여 사용자에게 애플리케이션에 대한 시간 제한 액세스를 제공할 수도 있습니다. 권한 관리에서 AccessPackage에는 잠재적으로 여러 서비스 주체의 리소스 역할이 하나 이상 포함됩니다. AccessPackage에는 액세스 패키지에 대한 사용자 할당(Assignment)도 있습니다.

액세스 패키지에 대한 사용자 할당을 만들 때 Microsoft Entra 권한 관리는 각 애플리케이션에 필요한 사용자의 AppRoleAssignment 인스턴스를 자동으로 만듭니다. 자세한 내용은 PowerShell을 통해 액세스 패키지를 만드는 방법에 대한 Microsoft Entra 권한 관리에서 리소스에 대한 액세스 관리 자습서를 참조하세요.

시작하기 전에

  • 테넌트에 다음 라이선스 중 하나가 있어야 합니다.

    • Microsoft Entra ID P2 또는 Microsoft Entra ID 거버넌스
    • Enterprise Mobility + Security E5 라이선스
  • 적절한 관리 역할이 있어야 합니다. 이러한 단계를 처음 수행하는 경우 테넌트에서 Microsoft Graph PowerShell 사용을 승인할 수 있는 전역 관리자 역할이 필요합니다.

  • 애플리케이션의 테넌트에 서비스 사용자가 필요합니다. 서비스 사용자가 아직 없는 경우 애플리케이션을 등록하여 Microsoft Entra ID에 표시할 수 있습니다.

애플리케이션에서 기존 사용자 수집

모든 사용자를 Microsoft Entra ID에 기록하기 위한 첫 번째 단계는 애플리케이션에 대한 액세스 권한이 있는 기존 사용자의 목록을 수집하는 것입니다.

일부 애플리케이션에는 데이터 저장소에서 현재 사용자 목록을 내보내는 기본 제공 명령이 있을 수 있습니다. 다른 경우에는 애플리케이션에서 외부 디렉터리나 데이터베이스를 사용할 수 있습니다.

일부 환경에서는 애플리케이션이 Microsoft Entra ID에 대한 액세스를 관리하는 데 부적절한 네트워크 세그먼트나 시스템에 있을 수 있습니다. 따라서 해당 애플리케이션, 디렉터리 또는 데이터베이스에서 사용자 목록을 추출한 다음, 파일로 Microsoft Entra와 상호 작용하는 데 사용할 수 있는 다른 시스템으로 전송해야 합니다.

애플리케이션에 LDAP 디렉터리 또는 SQL 데이터베이스가 있는 경우 사용자 컬렉션을 추출하는 방법에 대한 권장 사항은 애플리케이션에서 기존 사용자 수집을 참조하세요.

그렇지 않으면 애플리케이션에 디렉터리 또는 데이터베이스가 없는 경우 애플리케이션 소유자에게 연락하여 사용자 목록을 제공해야 합니다. 사용자당 한 줄씩 CSV 파일과 같은 형식일 수 있습니다. 파일에 있는 각 사용자의 한 필드에 Microsoft Entra ID의 사용자에게도 있는 이메일 주소와 같은 고유 식별자가 포함되어 있는지 확인합니다.

이 시스템에 Microsoft Graph PowerShell cmdlet이 설치되어 있지 않거나 시스템이 Microsoft Entra ID에 연결되지 않은 경우 사용자 목록이 포함된 CSV 파일을 Microsoft Graph PowerShell cmdlet이 설치된 시스템으로 전송합니다.

애플리케이션의 사용자와 일치하는 사용자가 Microsoft Entra ID에 있는지 확인

이제 애플리케이션에서 가져온 모든 사용자 목록이 있으므로 애플리케이션 데이터 저장소의 해당 사용자를 Microsoft Entra ID의 사용자와 일치시킵니다.

Microsoft Entra ID에서 사용자의 ID를 검색합니다.

이 섹션에서는 Microsoft Graph PowerShell cmdlet을 사용하여 Microsoft Entra ID와 상호 작용하는 방법을 보여 줍니다.

조직에서 이 시나리오에 이러한 cmdlet을 처음 사용하는 경우 테넌트에서 Microsoft Graph PowerShell을 사용할 수 있도록 허용하는 전역 관리자 역할이 필요합니다. 후속 상호 작용에서 다음과 같은 낮은 권한 있는 역할을 사용할 수 있습니다.

  • 사용자 관리자(새 사용자를 만들 것으로 예상되는 경우)
  • 애플리케이션 관리자 또는 ID 거버넌스 관리자(애플리케이션 역할 할당만 관리하는 경우)
  1. PowerShell을 엽니다.

  2. Microsoft Graph PowerShell 모듈을 아직 설치하지 않았으면 이 명령을 사용하여 Microsoft.Graph.Users 모듈과 다른 모듈을 설치합니다.

    Install-Module Microsoft.Graph
    

    모듈이 이미 설치되어 있으면 최신 버전을 사용하고 있는지 확인합니다.

    Update-Module microsoft.graph.users,microsoft.graph.identity.governance,microsoft.graph.applications
    
  3. Microsoft Entra ID에 연결합니다.

    $msg = Connect-MgGraph -ContextScope Process -Scopes "User.ReadWrite.All,Application.ReadWrite.All,AppRoleAssignment.ReadWrite.All,EntitlementManagement.ReadWrite.All"
    
  4. 이 명령을 처음 사용하는 경우 Microsoft Graph 명령줄 도구에 이러한 사용 권한이 있도록 허용하는 데 동의해야 할 수 있습니다.

  5. 애플리케이션의 데이터 저장소에서 가져온 사용자 목록을 PowerShell 세션으로 읽어 들입니다. 사용자 목록이 CSV 파일에 있으면 PowerShell cmdlet Import-Csv를 사용하고 이전 섹션의 파일 이름을 인수로 제공할 수 있습니다.

    예를 들어 SAP Cloud Identity Services에서 가져온 파일의 이름이 Users-exported-from-sap.csv 현재 디렉터리에 있는 경우 이 명령을 입력합니다.

    $filename = ".\Users-exported-from-sap.csv"
    $dbusers = Import-Csv -Path $filename -Encoding UTF8
    

    데이터베이스 또는 디렉터리를 사용하는 경우 파일 이름이 users.csv 현재 디렉터리에 있는 경우 다음 명령을 입력합니다.

    $filename = ".\users.csv"
    $dbusers = Import-Csv -Path $filename -Encoding UTF8
    
  6. Microsoft Entra ID의 사용자 특성과 일치할 users.csv 파일의 열을 선택합니다.

    SAP Cloud Identity Services를 사용하는 경우 기본 매핑은 Microsoft Entra ID 특성을 userName 사용하는 SAP SCIM 특성 userPrincipalName입니다.

    $db_match_column_name = "userName"
    $azuread_match_attr_name = "userPrincipalName"
    

    데이터베이스 또는 디렉터리를 사용하는 경우 이름이 지정된 EMail 열의 값이 Microsoft Entra 특성 userPrincipalName과 동일한 값인 데이터베이스에 사용자가 있을 수 있습니다.

    $db_match_column_name = "EMail"
    $azuread_match_attr_name = "userPrincipalName"
    
  7. Microsoft Entra ID에서 해당 사용자의 ID를 검색합니다.

    다음 PowerShell 스크립트에서는 앞에서 지정한 $dbusers, $db_match_column_name$azuread_match_attr_name 값을 사용합니다. Microsoft Entra ID를 쿼리하여 원본 파일의 각 레코드에 대해 일치하는 값을 가진 특성을 가진 사용자를 찾습니다. 원본 SAP Cloud Identity Services, 데이터베이스 또는 디렉터리에서 가져온 파일에 많은 사용자가 있는 경우 이 스크립트를 완료하는 데 몇 분 정도 걸릴 수 있습니다. 값이 있는 Microsoft Entra ID 특성이 없고 contains 또는 다른 필터 식을 사용해야 하는 경우 이 스크립트를 사용자 지정하고 다음 11단계에서 다른 필터 식을 사용해야 합니다.

    $dbu_not_queried_list = @()
    $dbu_not_matched_list = @()
    $dbu_match_ambiguous_list = @()
    $dbu_query_failed_list = @()
    $azuread_match_id_list = @()
    $azuread_not_enabled_list = @()
    $dbu_values = @()
    $dbu_duplicate_list = @()
    
    foreach ($dbu in $dbusers) { 
       if ($null -ne $dbu.$db_match_column_name -and $dbu.$db_match_column_name.Length -gt 0) { 
          $val = $dbu.$db_match_column_name
          $escval = $val -replace "'","''"
          if ($dbu_values -contains $escval) { $dbu_duplicate_list += $dbu; continue } else { $dbu_values += $escval }
          $filter = $azuread_match_attr_name + " eq '" + $escval + "'"
          try {
             $ul = @(Get-MgUser -Filter $filter -All -Property Id,accountEnabled -ErrorAction Stop)
             if ($ul.length -eq 0) { $dbu_not_matched_list += $dbu; } elseif ($ul.length -gt 1) {$dbu_match_ambiguous_list += $dbu } else {
                $id = $ul[0].id; 
                $azuread_match_id_list += $id;
                if ($ul[0].accountEnabled -eq $false) {$azuread_not_enabled_list += $id }
             } 
          } catch { $dbu_query_failed_list += $dbu } 
        } else { $dbu_not_queried_list += $dbu }
    }
    
    
  8. 이전 쿼리의 결과를 봅니다. 오류 또는 누락된 일치 항목으로 인해 SAP Cloud Identity Services, 데이터베이스 또는 디렉터리의 사용자를 Microsoft Entra ID에 배치할 수 없는지 확인합니다.

    다음 PowerShell 스크립트에 찾지 못한 레코드 수가 표시됩니다.

    $dbu_not_queried_count = $dbu_not_queried_list.Count
    if ($dbu_not_queried_count -ne 0) {
      Write-Error "Unable to query for $dbu_not_queried_count records as rows lacked values for $db_match_column_name."
    }
    $dbu_duplicate_count = $dbu_duplicate_list.Count
    if ($dbu_duplicate_count -ne 0) {
      Write-Error "Unable to locate Microsoft Entra ID users for $dbu_duplicate_count rows as multiple rows have the same value"
    }
    $dbu_not_matched_count = $dbu_not_matched_list.Count
    if ($dbu_not_matched_count -ne 0) {
      Write-Error "Unable to locate $dbu_not_matched_count records in Microsoft Entra ID by querying for $db_match_column_name values in $azuread_match_attr_name."
    }
    $dbu_match_ambiguous_count = $dbu_match_ambiguous_list.Count
    if ($dbu_match_ambiguous_count -ne 0) {
      Write-Error "Unable to locate $dbu_match_ambiguous_count records in Microsoft Entra ID as attribute match ambiguous."
    }
    $dbu_query_failed_count = $dbu_query_failed_list.Count
    if ($dbu_query_failed_count -ne 0) {
      Write-Error "Unable to locate $dbu_query_failed_count records in Microsoft Entra ID as queries returned errors."
    }
    $azuread_not_enabled_count = $azuread_not_enabled_list.Count
    if ($azuread_not_enabled_count -ne 0) {
     Write-Error "$azuread_not_enabled_count users in Microsoft Entra ID are blocked from sign-in."
    }
    if ($dbu_not_queried_count -ne 0 -or $dbu_duplicate_count -ne 0 -or $dbu_not_matched_count -ne 0 -or $dbu_match_ambiguous_count -ne 0 -or $dbu_query_failed_count -ne 0 -or $azuread_not_enabled_count) {
     Write-Output "You will need to resolve those issues before access of all existing users can be reviewed."
    }
    $azuread_match_count = $azuread_match_id_list.Count
    Write-Output "Users corresponding to $azuread_match_count records were located in Microsoft Entra ID." 
    
  9. 스크립트가 완료되면 데이터 원본의 레코드가 Microsoft Entra ID에 없는 경우 오류가 표시됩니다. 애플리케이션 데이터 저장소의 사용자에 대한 모든 레코드를 Microsoft Entra ID의 사용자로 찾을 수 없는 경우 일치하지 않는 레코드와 그 이유를 조사해야 합니다.

    예를 들어, 애플리케이션의 데이터 원본에서 해당 mail 속성이 업데이트되지 않은 상태에서 누군가의 이메일 주소와 userPrincipalName이 Microsoft Entra ID에서 변경되었을 수 있습니다. 또는 사용자가 이미 조직을 떠났지만 여전히 애플리케이션의 데이터 원본에 있을 수 있습니다. 또는 Microsoft Entra ID의 특정 개인과 일치하지 않는 애플리케이션의 데이터 원본에 공급업체 또는 최고 관리자 계정이 있을 수 있습니다.

  10. Microsoft Entra ID에 위치할 수 없거나 활성 상태이며 로그인할 수 없는 사용자가 있지만 SAP Cloud Identity Services, 데이터베이스 또는 디렉터리에서 해당 액세스 권한을 검토하거나 해당 특성을 업데이트하려는 경우 애플리케이션, 일치 규칙을 업데이트하거나 Microsoft Entra 사용자를 업데이트하거나 만들어야 합니다. 변경할 내용 에 대한 자세한 내용은 Microsoft Entra ID의 사용자와 일치하지 않는 애플리케이션의 매핑 및 사용자 계정 관리를 참조하세요.

    Microsoft Entra ID에서 사용자를 만드는 옵션을 선택하는 경우 다음 중 하나를 사용하여 사용자를 대량으로 만들 수 있습니다.

    이러한 새 사용자가 나중에 애플리케이션의 기존 사용자와 일치하도록 Microsoft Entra ID에 필요한 특성과 userPrincipalName, mailNicknamedisplayName을 포함하여 Microsoft Entra ID에 필요한 특성으로 채워졌는지 확인합니다. userPrincipalName은 디렉터리의 모든 사용자 중에서 고유해야 합니다.

    예를 들어 이름이 지정된 EMail 열의 값이 Microsoft Entra 사용자 계정 이름으로 사용할 값이고, 열의 값에 Microsoft Entra ID 메일 애칭이 포함되고, 열 AliasFull name 의 값에 사용자의 표시 이름이 포함된 데이터베이스에 사용자가 있을 수 있습니다.

    $db_display_name_column_name = "Full name"
    $db_user_principal_name_column_name = "Email"
    $db_mail_nickname_column_name = "Alias"
    

    그런 다음 이 스크립트를 사용하여 MICROSOFT Entra ID의 사용자와 일치하지 않는 SAP Cloud Identity Services, 데이터베이스 또는 디렉터리에 있는 사용자를 위한 Microsoft Entra 사용자를 만들 수 있습니다. 조직에 필요한 Microsoft Entra 특성을 추가하거나 $azuread_match_attr_namemailNickname도 아니고 userPrincipalName도 아닌 경우 해당 Microsoft Entra 특성을 제공하려면 이 스크립트를 수정해야 할 수도 있습니다.

    $dbu_missing_columns_list = @()
    $dbu_creation_failed_list = @()
    foreach ($dbu in $dbu_not_matched_list) {
       if (($null -ne $dbu.$db_display_name_column_name -and $dbu.$db_display_name_column_name.Length -gt 0) -and
           ($null -ne $dbu.$db_user_principal_name_column_name -and $dbu.$db_user_principal_name_column_name.Length -gt 0) -and
           ($null -ne $dbu.$db_mail_nickname_column_name -and $dbu.$db_mail_nickname_column_name.Length -gt 0)) {
          $params = @{
             accountEnabled = $false
             displayName = $dbu.$db_display_name_column_name
             mailNickname = $dbu.$db_mail_nickname_column_name
             userPrincipalName = $dbu.$db_user_principal_name_column_name
             passwordProfile = @{
               Password = -join (((48..90) + (96..122)) * 16 | Get-Random -Count 16 | % {[char]$_})
             }
          }
          try {
            New-MgUser -BodyParameter $params
          } catch { $dbu_creation_failed_list += $dbu; throw }
       } else {
          $dbu_missing_columns_list += $dbu
       }
    }
    
  11. 누락된 사용자를 Microsoft Entra ID에 추가한 후 7단계에서 스크립트를 다시 실행합니다. 그런 다음, 8단계에서 스크립트를 실행합니다. 오류가 보고되지 않는지 확인합니다.

    $dbu_not_queried_list = @()
    $dbu_not_matched_list = @()
    $dbu_match_ambiguous_list = @()
    $dbu_query_failed_list = @()
    $azuread_match_id_list = @()
    $azuread_not_enabled_list = @()
    $dbu_values = @()
    $dbu_duplicate_list = @()
    
    foreach ($dbu in $dbusers) { 
       if ($null -ne $dbu.$db_match_column_name -and $dbu.$db_match_column_name.Length -gt 0) { 
          $val = $dbu.$db_match_column_name
          $escval = $val -replace "'","''"
          if ($dbu_values -contains $escval) { $dbu_duplicate_list += $dbu; continue } else { $dbu_values += $escval }
          $filter = $azuread_match_attr_name + " eq '" + $escval + "'"
          try {
             $ul = @(Get-MgUser -Filter $filter -All -Property Id,accountEnabled -ErrorAction Stop)
             if ($ul.length -eq 0) { $dbu_not_matched_list += $dbu; } elseif ($ul.length -gt 1) {$dbu_match_ambiguous_list += $dbu } else {
                $id = $ul[0].id; 
                $azuread_match_id_list += $id;
                if ($ul[0].accountEnabled -eq $false) {$azuread_not_enabled_list += $id }
             } 
          } catch { $dbu_query_failed_list += $dbu } 
        } else { $dbu_not_queried_list += $dbu }
    }
    
    $dbu_not_queried_count = $dbu_not_queried_list.Count
    if ($dbu_not_queried_count -ne 0) {
      Write-Error "Unable to query for $dbu_not_queried_count records as rows lacked values for $db_match_column_name."
    }
    $dbu_duplicate_count = $dbu_duplicate_list.Count
    if ($dbu_duplicate_count -ne 0) {
      Write-Error "Unable to locate Microsoft Entra ID users for $dbu_duplicate_count rows as multiple rows have the same value"
    }
    $dbu_not_matched_count = $dbu_not_matched_list.Count
    if ($dbu_not_matched_count -ne 0) {
      Write-Error "Unable to locate $dbu_not_matched_count records in Microsoft Entra ID by querying for $db_match_column_name values in $azuread_match_attr_name."
    }
    $dbu_match_ambiguous_count = $dbu_match_ambiguous_list.Count
    if ($dbu_match_ambiguous_count -ne 0) {
      Write-Error "Unable to locate $dbu_match_ambiguous_count records in Microsoft Entra ID as attribute match ambiguous."
    }
    $dbu_query_failed_count = $dbu_query_failed_list.Count
    if ($dbu_query_failed_count -ne 0) {
      Write-Error "Unable to locate $dbu_query_failed_count records in Microsoft Entra ID as queries returned errors."
    }
    $azuread_not_enabled_count = $azuread_not_enabled_list.Count
    if ($azuread_not_enabled_count -ne 0) {
     Write-Warning "$azuread_not_enabled_count users in Microsoft Entra ID are blocked from sign-in."
    }
    if ($dbu_not_queried_count -ne 0 -or $dbu_duplicate_count -ne 0 -or $dbu_not_matched_count -ne 0 -or $dbu_match_ambiguous_count -ne 0 -or $dbu_query_failed_count -ne 0 -or $azuread_not_enabled_count -ne 0) {
     Write-Output "You will need to resolve those issues before access of all existing users can be reviewed."
    }
    $azuread_match_count = $azuread_match_id_list.Count
    Write-Output "Users corresponding to $azuread_match_count records were located in Microsoft Entra ID." 
    

응용 프로그램 등록

애플리케이션이 이미 Microsoft Entra ID에 등록되어 있으면 다음 단계를 계속 진행합니다.

사용 중인 계정에는 Microsoft Entra ID에서 애플리케이션을 관리할 수 있는 권한이 있어야 합니다. 다음 Microsoft Entra 역할에는 필요한 권한이 포함됩니다.

  1. 애플리케이션 및 서비스 사용자를 만듭니다.

    예를 들어 엔터프라이즈 애플리케이션 이름이 CORPDB1이면 다음 명령을 입력합니다.

    $azuread_app_name = "CORPDB1"
    $azuread_app = New-MgApplication -DisplayName $azuread_app_name
    $azuread_sp = New-MgServicePrincipal -DisplayName $azuread_app_name -AppId $azuread_app.AppId
    
  2. 애플리케이션에 역할을 추가하고 할당을 검토할 수 있도록 애플리케이션을 Microsoft Entra ID와 통합된 것으로 태그를 지정합니다. 예를 들어 역할 이름이 General이면 다음 PowerShell 명령에 해당 값을 제공합니다.

    $ar0 = New-Object Microsoft.Graph.PowerShell.Models.MicrosoftGraphAppRole
    $ar0.AllowedMemberTypes += "User"
    $ar0.Description = "General role"
    $ar0.DisplayName = "General"
    $ar0.id = New-Guid
    $ar0.IsEnabled = $true
    $ar0.Value = "General"
    $ara = @()
    $ara += $ar0
    
    $azuread_app_tags = @()
    $azuread_app_tags += "WindowsAzureActiveDirectoryIntegratedApp"
    
    $azuread_app_update = Update-MgApplication -ApplicationId $azuread_app.Id -AppRoles $ara -Tags $azuread_app_tags
    

애플리케이션에 아직 할당되지 않은 사용자 확인

이전 단계에서는 애플리케이션의 데이터 저장소에 있는 모든 사용자가 Microsoft Entra ID에 사용자로 있음을 확인했습니다. 그러나 현재 Microsoft Entra ID의 애플리케이션 역할에 모두 할당되어 있지 않을 수 있습니다. 따라서 다음 단계는 애플리케이션 역할에 대한 할당이 없는 사용자를 확인하는 것입니다.

  1. 애플리케이션의 서비스 사용자에 대한 서비스 사용자 ID를 찾습니다.

    예를 들어 엔터프라이즈 애플리케이션 이름이 CORPDB1이면 다음 명령을 입력합니다.

    $azuread_app_name = "CORPDB1"
    $azuread_sp_filter = "displayName eq '" + ($azuread_app_name -replace "'","''") + "'"
    $azuread_sp = Get-MgServicePrincipal -Filter $azuread_sp_filter -All
    
  2. 현재 애플리케이션에 할당된 사용자를 Microsoft Entra ID에서 검색합니다.

    이는 이전 명령에서 설정된 $azuread_sp 변수를 기반으로 합니다.

    $azuread_existing_assignments = @(Get-MgServicePrincipalAppRoleAssignedTo -ServicePrincipalId $azuread_sp.Id -All)
    
  3. 이전 섹션의 사용자 ID 목록을 현재 애플리케이션에 할당된 사용자와 비교합니다.

    $azuread_not_in_role_list = @()
    foreach ($id in $azuread_match_id_list) {
       $found = $false
       foreach ($existing in $azuread_existing_assignments) {
          if ($existing.principalId -eq $id) {
             $found = $true; break;
          }
       }
       if ($found -eq $false) { $azuread_not_in_role_list += $id }
    }
    $azuread_not_in_role_count = $azuread_not_in_role_list.Count
    Write-Output "$azuread_not_in_role_count users in the application's data store are not assigned to the application roles."
    

    애플리케이션 역할에 할당되지 않은 사용자가 0명인 경우 이는 모든 사용자가 애플리케이션 역할에 할당된 것이며 액세스 검토를 수행하기 전에 추가 변경이 필요하지 않습니다.

    그러나 현재 애플리케이션 역할에 할당되지 않은 사용자가 한 명 이상이면 절차를 계속 진행하여 애플리케이션 역할 중 하나에 추가해야 합니다.

  4. 나머지 사용자를 할당할 애플리케이션의 역할을 선택합니다.

    애플리케이션에 역할이 두 개 이상 있을 수 있습니다. 이 명령을 사용하여 사용 가능한 역할을 나열합니다.

    $azuread_sp.AppRoles | where-object {$_.AllowedMemberTypes -contains "User"} | ft DisplayName,Id
    

    목록에서 적절한 역할을 선택하고 해당 역할 ID를 가져옵니다. 예를 들어 역할 이름이 General이면 다음 PowerShell 명령에 해당 값을 제공합니다.

    $azuread_app_role_name = "General"
    $azuread_app_role_id = ($azuread_sp.AppRoles | where-object {$_.AllowedMemberTypes -contains "User" -and $_.DisplayName -eq $azuread_app_role_name}).Id
    if ($null -eq $azuread_app_role_id) { write-error "role $azuread_app_role_name not located in application manifest"}
    

Microsoft Entra ID에서 앱 역할 할당 만들기

Microsoft Entra ID가 애플리케이션의 사용자를 Microsoft Entra ID의 사용자와 일치시키려면 Microsoft Entra ID에 애플리케이션 역할 할당을 만들어야 합니다.

애플리케이션에 대한 사용자를 위해 Microsoft Entra ID에서 애플리케이션 역할 할당이 만들어지고 애플리케이션이 프로비전을 지원하지 않는 경우

  • 사용자는 Microsoft Entra ID 외부에서 업데이트되지 않은 경우 또는 Microsoft Entra ID에서 할당이 제거될 때까지 애플리케이션에 무기한 유지됩니다.
  • 사용자는 해당 애플리케이션의 역할 할당에 대한 다음 검토에 포함됩니다.
  • 액세스 검토에서 사용자가 거부되면 애플리케이션 역할 할당이 제거됩니다.
  1. 현재 역할 할당이 없는 사용자에 대한 애플리케이션 역할 할당을 만듭니다.

    foreach ($u in $azuread_not_in_role_list) {
       $res = New-MgServicePrincipalAppRoleAssignedTo -ServicePrincipalId $azuread_sp.Id -AppRoleId $azuread_app_role_id -PrincipalId $u -ResourceId $azuread_sp.Id 
    }
    
  2. 변경 사항이 Microsoft Entra ID 내에 전파되도록 1분 정도 기다립니다.

  3. Microsoft Entra ID를 쿼리하여 업데이트된 역할 할당 목록을 가져옵니다.

    $azuread_existing_assignments = @(Get-MgServicePrincipalAppRoleAssignedTo -ServicePrincipalId $azuread_sp.Id -All)
    
  4. 이전 섹션의 사용자 ID 목록을 현재 애플리케이션에 할당된 사용자와 비교합니다.

    $azuread_still_not_in_role_list = @()
    foreach ($id in $azuread_match_id_list) {
       $found = $false
       foreach ($existing in $azuread_existing_assignments) {
          if ($existing.principalId -eq $id) {
             $found = $true; break;
          }
       }
       if ($found -eq $false) { $azuread_still_not_in_role_list += $id }
    }
    $azuread_still_not_in_role_count = $azuread_still_not_in_role_list.Count
    if ($azuread_still_not_in_role_count -gt 0) {
       Write-Output "$azuread_still_not_in_role_count users in the application's data store are not assigned to the application roles."
    }
    

    애플리케이션 역할에 할당된 사용자가 없는 경우 Microsoft Entra 감사 로그에서 이전 단계의 오류를 확인합니다.

적절한 검토자 선택

각 액세스 검토를 만들 때 관리자는 한 명 이상의 검토자를 선택할 수 있습니다. 검토자는 리소스에 계속 액세스할 사용자를 선택하거나 제거하여 검토를 수행할 수 있습니다.

일반적으로 리소스 소유자는 검토를 수행할 책임이 있습니다. 그룹 검토를 만드는 경우 패턴 B에 통합된 애플리케이션에 대한 검토 액세스의 일환으로 그룹 소유자를 검토자로 선택할 수 있습니다. Microsoft Entra ID의 애플리케이션에는 반드시 소유자가 있는 것은 아니므로 애플리케이션 소유자를 검토자로 선택하는 옵션은 불가능합니다. 대신 검토를 만들 때 검토자가 될 애플리케이션 소유자의 이름을 제공할 수 있습니다.

또한 그룹 또는 애플리케이션에 대한 검토를 만들 때 다단계 검토를 선택할 수 있습니다. 예를 들어 할당된 각 사용자의 관리자가 검토의 첫 번째 단계를 수행하고 리소스 소유자가 두 번째 단계를 수행하도록 선택할 수 있습니다. 이렇게 하면 리소스 소유자가 관리자의 승인을 받은 사용자에게 집중할 수 있습니다.

검토를 만들기 전에 테넌트에 충분한 Microsoft Entra ID P2 또는 Microsoft Entra ID 거버넌스 SKU 사용자가 있는지 확인합니다. 또한 모든 검토자가 이메일 주소를 가진 활성 사용자인지 확인합니다. 액세스 검토가 시작되면 각각 Microsoft Entra ID에서 보낸 이메일을 검토합니다. 검토자에게 사서함이 없는 경우 검토가 시작될 때 이메일 또는 이메일 미리 알림을 받지 못합니다. 또한, Microsoft Entra ID 로그인이 차단된 경우에는 검토를 수행할 수 없습니다.

애플리케이션 역할 할당 검토 만들기

사용자가 애플리케이션 역할에 있고 검토자가 식별되면 검토를 시작하도록 Microsoft Entra ID를 구성할 수 있습니다.

그룹 또는 애플리케이션에 대한 액세스 검토 만들기 가이드의 지침에 따라 애플리케이션의 역할 할당에 대한 검토를 만듭니다. 완료되면 결과를 적용하도록 검토를 구성합니다.

검토가 완료되면 업데이트되는 할당 검색

  1. 검토가 완료되면 애플리케이션 역할 할당을 사용하여 업데이트된 사용자 목록을 검색할 수 있습니다.

    $res = (Get-MgServicePrincipalAppRoleAssignedTo -ServicePrincipalId $azuread_sp.Id -All)
    
  2. PrincipalDisplayNamePrincipalId 열에는 애플리케이션 역할 할당을 유지하는 각 사용자의 표시 이름 및 Microsoft Entra 사용자 ID가 포함됩니다.

티켓팅을 위해 ServiceNow와 권한 관리 통합 구성(선택 사항)

ServiceNow가 있는 경우 Logic Apps를 통해 권한 관리 통합을 사용하여 자동 ServiceNow 티켓 만들기를 선택적으로 구성할 수 있습니다. 해당 시나리오에서 권한 관리는 액세스 패키지 할당을 받은 사용자의 수동 프로비전을 위한 ServiceNow 티켓을 자동으로 만들 수 있습니다.

다음 단계