アプリケーションへのユーザーとグループの割り当てを管理する
この記事では、PowerShell を使用して Microsoft Entra ID でエンタープライズ アプリケーションにユーザーとグループを割り当てる方法を示します。 アプリケーションにユーザーを割り当てると、そのアプリケーションが、簡単にアクセスできるようにユーザーの [マイ アプリ] ポータルに表示されます。 アプリケーションでアプリ ロールが公開されている場合は、ユーザーに特定のアプリ ロールを割り当てることもできます。
グループをアプリケーションに割り当てると、そのグループ内のユーザーのみがアクセスできます。 割り当ては、入れ子になったグループにはカスケードされません。
グループベースの割り当てには、Microsoft Entra ID P1 または P2 エディションが必要です。 グループベースの割り当ては、SecurityEnabled
設定が True
に設定されているセキュリティ グループ、Microsoft 365 グループ、および配布グループのみに対してサポートされます。 入れ子になったグループ メンバーシップは現在サポートされていません。 この記事で説明されている機能のライセンス要件の詳細については、Microsoft Entra の価格のページを参照してください。
制御を強化するために、ユーザー割り当てを必要とするように、特定の種類のエンタープライズ アプリケーションを構成できます。 アプリにユーザー割り当てを要求する方法の詳細については、「アプリケーションへのアクセスの管理」を参照してください。
Note
ユーザーをアプリケーションに割り当てる必要があるアプリケーションでは、ディレクトリのユーザー同意ポリシーでユーザーが自分の代わりに同意できる場合でも、管理者がアクセス許可を付与する必要があります。
前提条件
エンタープライズ アプリケーションにユーザーを割り当てるには、次のものが必要です。
- アクティブなサブスクリプションを持つ Microsoft Entra アカウント。 まだアカウントがない場合は、無料でアカウントを作成することができます。
- 次のいずれかのロール: クラウド アプリケーション管理者、アプリケーション管理者、サービス プリンシパルの所有者。
- グループベースの割り当て用の Microsoft Entra ID P1 または P2。 この記事で説明されている機能のライセンス要件の詳細については、Microsoft Entra の価格のページを参照してください。
ヒント
この記事の手順は、開始するポータルに応じて若干異なる場合があります。
Microsoft Entra 管理センターを使用してアプリケーションにユーザーとグループを割り当てる
エンタープライズ アプリケーションにユーザーまたはグループ アカウントを割り当てるには:
クラウド アプリケーション管理者以上として Microsoft Entra 管理センターにサインインします。
[ID]>[アプリケーション]>[エンタープライズ アプリケーション]>[すべてのアプリケーション] に移動します。
検索ボックスに既存のアプリケーションの名前を入力し、検索結果からアプリケーションを選択します。
[ユーザーとグループ]、[ユーザー/グループの追加] の順に選択します。
[割り当ての追加] ペインで [ユーザーとグループ] の [選択されていません] を選択します。
アプリケーションに割り当てるユーザーまたはグループを見つけて選択します。 たとえば、
contosouser1@contoso.com
またはcontosoteam1@contoso.com
です。[選択] を選択します。
[ロールの選択] の下で、ユーザーまたはグループに割り当てるロールを選択します。 ロールをまだ定義していない場合、既定のロールは既定のアクセスです。
[割り当ての追加] ウィンドウで、[割り当て] を選択して、アプリケーションにユーザーまたはグループを割り当てます。
アプリケーションからユーザーとグループの割り当てを解除する
- 「アプリケーションにユーザーとグループを割り当てる」セクションの手順に従って、[ユーザーとグループ] ペインに移動します。
- アプリケーションから割り当てを解除したいユーザーまたはグループを探して選択します。
- [削除] を選択して、アプリケーションからユーザーまたはグループの割り当てを解除します。
Azure AD PowerShell を使用してアプリケーションにユーザーとグループを割り当てる
管理者特権での Windows PowerShell コマンド プロンプトを開きます。
Connect-AzureAD
を実行して少なくともクラウド アプリケーション管理者としてサインインします。次のスクリプトを使用して、アプリケーションにユーザーを割り当てます。
# Assign the values to the variables $username = "<Your user's UPN>" $app_name = "<Your App's display name>" $app_role_name = "<App role display name>" # Get the user to assign, and the service principal for the app to assign to $user = Get-AzureADUser -ObjectId "$username" $sp = Get-AzureADServicePrincipal -Filter "displayName eq '$app_name'" $appRole = $sp.AppRoles | Where-Object { $_.DisplayName -eq $app_role_name } # Assign the user to the app role New-AzureADUserAppRoleAssignment -ObjectId $user.ObjectId -PrincipalId $user.ObjectId -ResourceId $sp.ObjectId -Id $appRole.Id
例
この例では PowerShell を使用して、ユーザー Britta Simon を Microsoft Workplace Analytics アプリケーションに割り当てます。
PowerShell で、対応する値を変数
$username
、$app_name
、$app_role_name
に割り当てます。$username = "britta.simon@contoso.com" $app_name = "Workplace Analytics"
この例では、Britta Simon に割り当てるアプリケーション ロールの正確な名前はわかりません。 次のコマンドを実行し、ユーザーの UPN とサービス プリンシパル表示名を使用してユーザー (
$user
) とサービス プリンシパル ($sp
) を取得します。$user = Get-AzureADUser -ObjectId "$username" $sp = Get-AzureADServicePrincipal -Filter "displayName eq '$app_name'"
次のコマンドを実行して、サービス プリンシパルによって公開されているアプリ ロールを見つけます
$appRoles = $sp.AppRoles # Display the app roles $appRoles | ForEach-Object { Write-Output "AppRole: $($_.DisplayName) - ID: $($_.Id)"
Note
既定の AppRole ID は
00000000-0000-0000-0000-000000000000
です。 このロールは、サービス プリンシパルに対して特定の AppRole が定義されていない場合に割り当てられます。$app_role_name
変数に AppRole 名を割り当てます。 この例では、Britta Simon にアナリスト (制限付きアクセス) のロールを割り当てます。$app_role_name = "Analyst (Limited access)" $appRole = $sp.AppRoles | Where-Object { $_.DisplayName -eq $app_role_name }
次のコマンドを実行して、アプリのロールにユーザーを割り当てます。
New-AzureADUserAppRoleAssignment -ObjectId $user.ObjectId -PrincipalId $user.ObjectId -ResourceId $sp.ObjectId -Id $appRole.Id
グループをエンタープライズ アプリに割り当てるには、Get-AzureADUser
を Get-AzureADGroup
に置き換え、New-AzureADUserAppRoleAssignment
を New-AzureADGroupAppRoleAssignment
に置き換えます。
アプリケーション ロールにグループを割り当てる方法の詳細については、「New-AzureADGroupAppRoleAssignment」のドキュメントをご覧ください。
Azure AD PowerShell を使用してアプリケーションからユーザーとグループの割り当てを解除する
管理者特権での Windows PowerShell コマンド プロンプトを開きます。
Connect-AzureAD
を実行して少なくともクラウド アプリケーション管理者としてサインインします。次のスクリプトを使用して、アプリケーションからユーザーとロールを削除します。
# Store the proper parameters $user = get-azureaduser -ObjectId <objectId> $spo = Get-AzureADServicePrincipal -ObjectId <objectId> #Get the ID of role assignment $assignments = Get-AzureADServiceAppRoleAssignment -ObjectId $spo.ObjectId | Where {$_.PrincipalDisplayName -eq $user.DisplayName} #if you run the following, it will show you what is assigned what $assignments | Select * #To remove the App role assignment run the following command. Remove-AzureADServiceAppRoleAssignment -ObjectId $spo.ObjectId -AppRoleAssignmentId $assignments[assignment number].ObjectId
Azure AD PowerShell を使用してアプリケーションに割り当てられているすべてのユーザーを削除する
- 管理者特権での Windows PowerShell コマンド プロンプトを開きます。
次のスクリプトを使って、アプリケーションに割り当てられているすべてのユーザーとグループを削除します。
#Retrieve the service principal object ID.
$app_name = "<Your App's display name>"
$sp = Get-AzureADServicePrincipal -Filter "displayName eq '$app_name'"
$sp.ObjectId
# Get Service Principal using objectId
$sp = Get-AzureADServicePrincipal -ObjectId "<ServicePrincipal objectID>"
# Get Azure AD App role assignments using objectId of the Service Principal
$assignments = Get-AzureADServiceAppRoleAssignment -ObjectId $sp.ObjectId -All $true
# Remove all users and groups assigned to the application
$assignments | ForEach-Object {
if ($_.PrincipalType -eq "User") {
Remove-AzureADUserAppRoleAssignment -ObjectId $_.PrincipalId -AppRoleAssignmentId $_.ObjectId
} elseif ($_.PrincipalType -eq "Group") {
Remove-AzureADGroupAppRoleAssignment -ObjectId $_.PrincipalId -AppRoleAssignmentId $_.ObjectId
}
}
Microsoft Graph PowerShell を使用してアプリケーションにユーザーとグループを割り当てる
管理者特権での Windows PowerShell コマンド プロンプトを開きます。
Connect-MgGraph -Scopes "Application.ReadWrite.All", "Directory.ReadWrite.All", "AppRoleAssignment.ReadWrite.All"
を実行して少なくともクラウド アプリケーション管理者としてサインインします。次のスクリプトを使用して、アプリケーションにユーザーを割り当てます。
#Assign the values to the variables $userId = "<Your user's ID>" $app_name = "<Your App's display name>" $app_role_name = "<App role display name>" $sp = Get-MgServicePrincipal -Filter "displayName eq '$app_name'" #Get the user, the service principal and appRole. $params = @{ "PrincipalId" =$userId "ResourceId" =$sp.Id "AppRoleId" =($sp.AppRoles | Where-Object { $_.DisplayName -eq $app_role_name }).Id } #Assign the user to the AppRole New-MgUserAppRoleAssignment -UserId $userId -BodyParameter $params | Format-List Id, AppRoleId, CreationTime, PrincipalDisplayName, PrincipalId, PrincipalType, ResourceDisplayName, ResourceId
例
この例では Microsoft Graph PowerShell を使用して、ユーザー Britta Simon を Microsoft Workplace Analytics アプリケーションに割り当てます。
PowerShell で、対応する値を変数
$userId
、$app_name
、$app_role_name
に割り当てます。# Assign the values to the variables $userId = "<Britta Simon's user ID>" $app_name = "Workplace Analytics"
この例では、Britta Simon に割り当てるアプリケーション ロールの正確な名前は不明です。 次のコマンドを実行して、サービス プリンシパルの表示名を使用してサービス プリンシパル ($sp) を取得します。
# Get the service principal for the app $sp = Get-MgServicePrincipal -Filter "displayName eq '$app_name'"
次のコマンドを実行して、サービス プリンシパルによって公開されているアプリ ロールを見つけます。
# Get the app roles exposed by the service principal $appRoles = $sp.AppRoles # Display the app roles $appRoles | ForEach-Object { Write-Output "AppRole: $($_.DisplayName) - ID: $($_.Id)" }
Note
既定の AppRole ID は
00000000-0000-0000-0000-000000000000
です。 このロールは、サービス プリンシパルに対して特定の AppRole が定義されていない場合に割り当てられます。$app_role_name
変数にロール名を割り当てます。 この例では、Britta Simon にアナリスト (制限付きアクセス) のロールを割り当てます。# Assign the values to the variables $app_role_name = "Analyst (Limited access)" $appRoleId = ($sp.AppRoles | Where-Object { $_.DisplayName -eq $app_role_name }).Id
パラメーターを準備し、次のコマンドを実行して、ユーザーをアプリ ロールに割り当てます。
# Prepare parameters for the role assignment $params = @{ "PrincipalId" = $userId "ResourceId" = $sp.Id "AppRoleId" = $appRoleId } # Assign the user to the app role New-MgUserAppRoleAssignment -UserId $userId -BodyParameter $params | Format-List Id, AppRoleId, CreationTime, PrincipalDisplayName, PrincipalId, PrincipalType, ResourceDisplayName, ResourceId
グループをエンタープライズ アプリに割り当てるには、Get-MgUser
を Get-MgGroup
に置き換え、New-MgUserAppRoleAssignment
を New-MgGroupAppRoleAssignment
に置き換えます。
アプリケーション ロールにグループを割り当てる方法の詳細については、「New-MgGroupAppRoleAssignment」のドキュメントをご覧ください。
Microsoft Graph PowerShell を使用してアプリケーションからユーザーとグループの割り当てを解除する
管理者特権での Windows PowerShell コマンド プロンプトを開きます。
Connect-MgGraph -Scopes "Application.ReadWrite.All", "Directory.ReadWrite.All", "AppRoleAssignment.ReadWrite.All"
を実行して少なくともクラウド アプリケーション管理者としてサインインします。ユーザーとサービス プリンシパルを取得する
$user = Get-MgUser -UserId <userid> $sp = Get-MgServicePrincipal -ServicePrincipalId <ServicePrincipalId>
ロールの割り当ての ID を取得する
$assignments = Get-MgServicePrincipalAppRoleAssignedTo -ServicePrincipalId $sp.Id | Where {$_.PrincipalDisplayName -eq $user.DisplayName}
次のコマンドを実行して、アプリケーションに割り当てられているユーザーの一覧を表示します
$assignments | Select *
次のコマンドを実行して、AppRole の割り当てを削除します。
Remove-MgServicePrincipalAppRoleAssignedTo -AppRoleAssignmentId '<AppRoleAssignment-id>' -ServicePrincipalId $sp.Id
Microsoft Graph PowerShell を使用してアプリケーションに割り当てられているすべてのユーザーとグループを削除する
次のコマンドを実行して、アプリケーションに割り当てられているすべてのユーザーとグループを削除します。
$assignments | ForEach-Object {
if ($_.PrincipalType -in ("user", "Group")) {
Remove-MgServicePrincipalAppRoleAssignedTo -ServicePrincipalId $sp.Id -AppRoleAssignmentId $_.Id }
}
Microsoft Graph API を使用してアプリケーションにユーザーとグループを割り当てる
ユーザーとグループをアプリケーションに割り当てるには、少なくともクラウド アプリケーション管理者として Graph エクスプローラーにサインインします。
次のアクセス許可に同意する必要があります。
Application.ReadWrite.All
、Directory.ReadWrite.All
、およびAppRoleAssignment.ReadWrite.All
。アプリのロールの割り当てを許可するには、以下の 3 つの識別子が必要です。
principalId
: アプリのロールを割り当てるユーザーまたはグループの ID。resourceId
: アプリのロールを定義するリソース servicePrincipal の ID。appRoleId
: ユーザーまたはグループに割り当てる appRole (リソース サービス プリンシパルで定義される) の ID。
エンタープライズ アプリケーションを取得します。
DisplayName
でフィルター処理します。GET https://graph.microsoft.com/v1.0/servicePrincipals?$filter=displayName eq '{appDisplayName}'
応答本文から以下の値を記録します。
- エンタープライズ アプリケーションのオブジェクト ID
- ユーザーに割り当てる AppRole ID。 アプリケーションでロールが公開されていない場合、ユーザーには既定のアクセス ロールが割り当てられます。
Note
既定の AppRole ID は
00000000-0000-0000-0000-000000000000
です。 このロールは、サービス プリンシパルに対して特定の AppRole が定義されていない場合に割り当てられます。ユーザーのプリンシパル名でフィルター処理して、ユーザーを取得します。 ユーザーのオブジェクト ID を記録します。
GET https://graph.microsoft.com/v1.0/users/{userPrincipalName}
アプリケーションにユーザーを割り当ててください。
POST https://graph.microsoft.com/v1.0/servicePrincipals/{resource-servicePrincipal-id}/appRoleAssignedTo { "principalId": "aaaaaaaa-bbbb-cccc-1111-222222222222", "resourceId": "a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1", "appRoleId": "00000000-0000-0000-0000-000000000000" }
この例では、
resource-servicePrincipal-id
とresourceId
の両方がエンタープライズ アプリケーションを表しています。
Microsoft Graph API を使用してアプリケーションからユーザーとグループの割り当てを解除する
アプリケーションからすべてのユーザーとグループの割り当てを解除するには、次のクエリを実行します。
エンタープライズ アプリケーションを取得します。
displayName
でフィルター処理します。GET https://graph.microsoft.com/v1.0/servicePrincipals?$filter=displayName eq '{appDisplayName}'
アプリケーションの
appRoleAssignments
の一覧を取得します。GET https://graph.microsoft.com/v1.0/servicePrincipals/{id}/appRoleAssignedTo
appRoleAssignment
ID を指定して、appRoleAssignments
を削除します。DELETE https://graph.microsoft.com/v1.0/servicePrincipals/{resource-servicePrincipal-id}/appRoleAssignedTo/{appRoleAssignment-id}
Microsoft Graph エクスプローラーでは、アプリ ロールの割り当ての一括削除は直接サポートされていません。 各割り当てを個別に削除する必要があります。 ただし、Microsoft Graph PowerShell を使用してこのプロセスを自動化し、各割り当てを反復処理して削除することができます