プロビジョニングをサポートしないアプリケーションのユーザーを管理する - Microsoft PowerShell

アクセス レビューなどの Microsoft Entra ID Governance 機能でアプリケーションを使用する前に、そのアプリケーションの既存のユーザーを Microsoft Entra ID に設定する必要がある一般的なシナリオは 3 つあります。

  • アプリケーションが独自の ID プロバイダーを使用した後に Microsoft Entra ID に移行された場合
  • Microsoft Entra ID を唯一の ID プロバイダーとして使用しないアプリケーション
  • アプリケーションが ID プロバイダーとして Microsoft Entra ID を使用しておらず、プロビジョニングもサポートしていない

最初の 2 つのシナリオ (アプリケーションがプロビジョニングをサポートしている、または LDAP ディレクトリ、SQL データベースを使っている、SOAP または REST API がある、または ID プロバイダーとして Microsoft Entra ID を利用している) の詳細については、記事「アプリケーションの既存のユーザーを管理する」を参照してください。 この記事では、これらのカテゴリのアプリケーションの既存ユーザーに対して ID ガバナンス機能を使う方法について説明します。

この記事では、3 つ目のシナリオについて説明します。 レガシ アプリケーションによっては、アプリケーションから他の ID プロバイダーまたはローカル資格情報の認証を削除することや、それらのアプリケーションのプロビジョニング プロトコルのサポートを有効にすることができない場合があります。 このようなアプリケーションの場合、Microsoft Entra ID を使用してそのアプリケーションにアクセスできるユーザーをレビューしたり、そのアプリケーションからだれかのアクセス権を削除したりするには、アプリケーション ユーザーを表す割り当てを Microsoft Entra ID 内に作成する必要があります。 この記事では、ID プロバイダーとして Microsoft Entra ID を使用せず、プロビジョニングをサポートしていないアプリケーションのシナリオについて説明します。

ライセンスの要件

この機能を使用するには、Microsoft Entra ID ガバナンス ライセンスが必要です。 要件に適したライセンスを見つけるには、「Microsoft Entra ID ガバナンス ライセンスの基礎」をご覧ください。

用語

この記事では、Microsoft Graph PowerShell コマンドレットを使用して、アプリケーション ロールの割り当てを管理するためのプロセスを示しています。 ここでは、次の Microsoft Graph の用語を使用しています。

Microsoft Graph の用語を示す図。

Microsoft Entra ID では、サービス プリンシパル (ServicePrincipal) は、特定の組織のディレクトリ内のアプリケーションを表します。 ServicePrincipal には、アプリケーションがサポートするロール (Marketing specialist など) を一覧表示する AppRoles という名前のプロパティがあります。 AppRoleAssignment はユーザーをサービス プリンシパルにリンクし、そのユーザーのそのアプリケーションでのロールを指定します。

ユーザーにアプリケーションへの期間限定のアクセス権を付与するために、Microsoft Entra エンタイトルメント管理アクセス パッケージを使用することもできます。 エンタイトルメント管理では、AccessPackage に 1 つ以上のリソース ロール (複数のサービス プリンシパルの可能性もあります) が含まれています。 AccessPackage には、アクセス パッケージへのユーザーの割り当て (Assignment) も含まれています。

アクセス パッケージへのユーザーの割り当てを作成すると、Microsoft Entra エンタイトルメント管理によって、各アプリケーションへのユーザーの必要な AppRoleAssignment インスタンスが自動的に作成されます。 詳細については、PowerShell を使用してアクセス パッケージを作成する方法を示す、Microsoft Entra エンタイトルメント管理でリソースへのアクセスを管理する方法に関するページ参照してください。

開始する前に

  • テナントには次のいずれかのライセンスが必要です。

    • Microsoft Entra ID P2 または Microsoft Entra ID Governance
    • Enterprise Mobility + Security E5 ライセンス
  • 適切な管理者ロールを持っている必要があります。 これらの手順を初めて実行している場合は、テナントでの Microsoft Graph PowerShell の使用を認可するグローバル管理者ロールが必要です。

  • アプリケーションには、テナント内のサービス プリンシパルが必要です。 サービス プリンシパルがまだ存在しない場合は、それを表すアプリケーションを Microsoft Entra ID に登録します。

アプリケーションから既存のユーザーを収集する

すべてのユーザーが確実に Microsoft Entra ID に記録されるようにするための最初の手順は、アプリケーションにアクセスできる既存のユーザーのリストを収集することです。

アプリケーションによっては、現在のユーザーの一覧をデータ ストアからエクスポートするための組み込みのコマンドを備えている場合があります。 その他、アプリケーションが外部のディレクトリまたはデータベースに依存する場合もあります。

一部の環境では、アプリケーションが、Microsoft Entra ID へのアクセスを管理するために適さないネットワーク セグメントまたはシステムに配置されていることがあります。 そのため、そのアプリケーション、ディレクトリまたはデータベースからユーザーのリストを抽出し、それをファイルとして Microsoft Entra とのやり取りに使用できる別のシステムに転送することが必要になる場合があります。

アプリケーションに LDAP ディレクトリまたは SQL データベースがある場合のユーザー コレクションを抽出する方法の推奨事項については、「アプリケーションから既存のユーザーを収集する」を参照してください。

そうでない場合、つまりアプリケーションにディレクトリまたはデータベースがない場合は、アプリケーションの所有者に問い合わせて、ユーザーの一覧を提供してもらう必要があります。 これは、CSV ファイルのように 1 行に 1 ユーザーという形式の場合があります。 このファイルの各ユーザーについて、いずれかのフィールドに一意識別子 (メール アドレスなど) が含まれていることを確認します。これは Microsoft Entra ID のユーザーにも存在するものです。

このシステムに Microsoft Graph PowerShell コマンドレットがインストールされていないか、または Microsoft Entra ID への接続がない場合は、ユーザーのリストを含む CSV ファイルを Microsoft Graph PowerShell コマンドレットがインストールされているシステムに転送します。

Microsoft Entra ID にアプリケーションのユーザーに一致するユーザーが存在することを確認する

これで、アプリケーションから取得されたすべてのユーザーのリストが用意できたので、アプリケーションのデータ ストアのユーザーを Microsoft Entra ID 内のユーザーと照合します。

Microsoft Entra ID でユーザーの ID を取得する

このセクションでは、Microsoft Graph PowerShell コマンドレットを使用して Microsoft Entra ID を操作する方法を示します。

このシナリオのために組織でこれらのコマンドレットを初めて使用する場合は、テナントで 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 コマンドレット 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 属性が userPrincipalName の SAP SCIM 属性 userName です:

    $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 内のユーザーとして見つからなかったものがある場合は、どのレコードが一致しなかったのかとその理由を調査する必要があります。

    たとえば、ユーザーのメールアドレスと userPrincipalName が Microsoft Entra ID で変更されたのに、アプリケーションのデータ ソースでそれに対応する mail プロパティが更新されていない可能性があります。 または、ユーザーは既に組織を離れているが、まだアプリケーションのデータ ソースに存在する可能性があります。 あるいは、アプリケーションのデータ ソースに、Microsoft Entra ID 内のどの特定のユーザーにも対応していないベンダーまたはスーパー管理者アカウントが存在する可能性もあります。

  10. Microsoft Entra ID で見つけられなかったか、またはアクティブかつサインインできる状態でなかったユーザーが存在したが、そのアクセスをレビューしたり、その属性を SAP Cloud Identity Services、データベース、またはディレクトリで更新したい場合は、アプリケーションまたは照合ルールを更新するか、そのユーザー用の Microsoft Entra ユーザーを更新する必要があります。 どの変更を行うかの詳細については、「Microsoft Entra ID のユーザーと一致しなかったアプリケーションのマッピングとユーザー アカウントを管理する」を参照してください。

    Microsoft Entra ID でユーザーを作成するオプションを選択した場合、次のいずれかを使用してユーザーを一括で作成できます。

    これらの新しいユーザーに、Microsoft Entra ID が後でアプリケーション内の既存のユーザーと一致するために必要な属性と、Microsoft Entra ID で必要な属性 (userPrincipalNamemailNicknamedisplayName を含む) が設定されていることを確認します。 userPrincipalName は、ディレクトリ内のすべてのユーザー間で一意である必要があります。

    たとえば、EMail という名前の列の値が Microsoft Entra のユーザー プリンシパル名として使用したい値であり、列 Alias の値に Microsoft Entra ID のメール ニックネームが含まれ、列 Full name の値にユーザーの表示名が含まれているようなユーザーが、データベースに存在する場合があります。

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

    そのような場合、このスクリプトを使用して、SAP Cloud Identity Services、データベース、またはディレクトリにある Microsoft Entra ID のユーザと一致しなかったユーザに対して 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 で、すべてのユーザーがアプリケーション ロールに割り当てられていることを示している場合は、アクセス レビューを実行する前にそれ以上の変更を行う必要はありません。

    ただし、1 人以上のユーザーが現在アプリケーション ロールに割り当てられていない場合は、手順を続行して、それらをいずれかのアプリケーションのロールに追加する必要があります。

  4. 残りのユーザーを割り当てるアプリケーション ロールを選択します。

    1 つのアプリケーションに複数のロールがある可能性があります。 次のコマンドを使用して、使用可能なロールを一覧表示します。

    $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 監査ログで前のステップのエラーを確認します。

適切なレビュー担当者を選択する

各アクセス レビューを作成するとき、管理者は 1 人以上のレビュー担当者を選ぶことができます。 レビュー担当者は、レビューを実行し、リソースに継続的にアクセスするユーザーを選択または削除することができます。

通常は、リソースの所有者がレビューの実行を担当します。 パターン B で統合されたアプリケーションのアクセス レビューの一環として、グループのレビューを作成する場合は、グループ所有者をレビュー担当者として選択できます。 Microsoft Entra ID のアプリケーションには所有者がいるとは限らないため、アプリケーションの所有者をレビュー担当者として選択することはできません。 代わりに、レビューを作成するときに、アプリケーション所有者の名前をレビュー担当者として指定できます。

グループまたはアプリケーションのレビューを作成するときに、複数ステージのレビューの作成を選ぶこともできます。 たとえば、割り当てられた各ユーザーのマネージャーがレビューの最初のステージを実行し、リソース所有者が 2 番目のステージを実行するようにできます。 こうすることで、リソース所有者は、マネージャーによって既に承認されているユーザーに集中できます。

レビューを作成する前に、テナントに十分な 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 チケットを自動的に作成できます。

次のステップ