管理组所有者的应用同意策略

应用同意策略是管理应用访问组织中数据所需的权限的一种方式。 它们用于控制用户可以同意的应用,并确保应用在访问数据之前须满足特定条件。 这些策略可帮助组织保持对其数据的控制,并确保只有受信任的应用程序才能访问这些数据。

在本文中,了解如何管理内置的和自定义的应用同意策略,以控制何时可以授予组所有者同意。

借助 Microsoft GraphMicrosoft Graph PowerShell,可以查看和管理组所有者同意策略。

组所有者同意策略由零个或多个“包括”条件集和零个或多个“排除”条件集构成。 对于要在组所有者同意策略中考虑的事件,“包括”条件集不得与任何“排除”条件集匹配。

每个条件集包含多个条件。 若要让事件与条件集匹配,条件集中的所有条件都必须得到满足。

ID 以“microsoft-”开头的组所有者同意策略是内置策略。 例如,microsoft-pre-approval-apps-for-group 组所有者同意策略描述了管理员允许组所有者执行以下操作的条件,即同意预先批准列表中的应用程序访问其拥有的组的数据。 内置策略可用在自定义目录角色中,可用来配置用户同意设置,但你不能编辑或删除它们。

先决条件

  • 具有以下角色之一的用户或服务:
  • 若要让组所有者同意受应用同意策略的约束,必须禁用组所有者同意设置。 禁用后,将从应用同意策略中读取当前策略。 若要了解如何禁用组所有者同意,请参阅禁用组所有者同意设置

若要使用 Microsoft Graph PowerShell 管理应用程序的组所有者同意策略,请连接到 Microsoft Graph PowerShell ,并使用先决条件部分中列出的某个角色登录。 你还需要同意 Policy.ReadWrite.PermissionGrant 权限。

# change the profile to beta by using the `Select-MgProfile` command
Select-MgProfile -Name "beta"
Connect-MgGraph -Scopes "Policy.ReadWrite.PermissionGrant"

了解如何验证组所有者同意设置是否已通过其他方式获得授权。

  1. 检索组所有者同意设置的当前值

      Get-MgPolicyAuthorizationPolicy | select -ExpandProperty DefaultUserRolePermissions | ft PermissionGrantPoliciesAssigned
    

    如果在 PermissionGrantPoliciesAssigned 中返回了 ManagePermissionGrantPoliciesForOwnedResource,则组所有者同意设置可能已通过其他方式获得授权。

  2. 检查策略的适用范围是否为 group

       Get-MgPolicyPermissionGrantPolicy -PermissionGrantPolicyId {"microsoft-all-application-permissions-for-group"} | Select -ExpandProperty AdditionalProperties
    

如果为 ResourceScopeType == group,则表示组所有者同意设置已通过其他方式获得授权。 此外,如果已为组的应用同意策略分配 microsoft-pre-approval-apps-for-group,则意味着为租户启用了预批准功能。

最好先熟悉组织中现有的组所有者同意策略:

  1. 列出所有组所有者同意策略:

    Get-MgPolicyPermissionGrantPolicy | ft Id, DisplayName, Description
    
  2. 查看策略的“包括”条件集:

    Get-MgPolicyPermissionGrantPolicyInclude -PermissionGrantPolicyId {"microsoft-all-application-permissions-for-group"} | fl
    
  3. 查看“排除”条件集:

    Get-MgPolicyPermissionGrantPolicyExclude -PermissionGrantPolicyId {"microsoft-all-application-permissions-for-group"} | fl
    

按照以下步骤创建自定义组所有者同意策略:

  1. 创建新的空组所有者同意策略。

    New-MgPolicyPermissionGrantPolicy `
        -Id "my-custom-app-consent-policy-for-group" `
        -DisplayName "My first custom app consent policy for group" `
        -Description "This is a sample custom app consent policy for group." `
        -AdditionalProperties @{includeAllPreApprovedApplications = $false; resourceScopeType = "group"}
    
  2. 添加“包括”条件集。

    # Include delegated permissions classified "low", for apps from verified publishers
    New-MgPolicyPermissionGrantPolicyInclude `
        -PermissionGrantPolicyId "my-custom-app-consent-policy-for-group" `
        -PermissionType "delegated" `
        -PermissionClassification "low" `
        -ClientApplicationsFromVerifiedPublisherOnly
    

    重复此步骤来添加更多“包括”条件集。

  3. (可选)添加“排除”条件集。

    # Retrieve the service principal for the Azure Management API
    $azureApi = Get-MgServicePrincipal -Filter "servicePrincipalNames/any(n:n eq 'https://management.azure.com/')"
    
    # Exclude delegated permissions for the Azure Management API
    New-MgPolicyPermissionGrantPolicyExclude `
        -PermissionGrantPolicyId "my-custom-app-consent-policy-for-group" `
        -PermissionType "delegated" `
        -ResourceApplication $azureApi.AppId
    

    重复此步骤来添加更多“排除”条件集。

创建组的应用同意策略后,你可以根据此策略允许组所有者同意

  1. 下面展示了如何删除自定义组所有者同意策略。

    Remove-MgPolicyPermissionGrantPolicy -PermissionGrantPolicyId "my-custom-app-consent-policy-for-group"
    

若要管理组所有者同意策略,请使用先决条件部分中列出的角色之一登录到 Graph 浏览器。 你还需要同意 Policy.ReadWrite.PermissionGrant 权限。

了解如何验证组所有者同意设置是否已通过其他方式获得授权。

  1. 检索当前策略值

    GET /policies/authorizationPolicy
    

    如果显示 ManagePermissionGrantPoliciesForOwnedResource,则组所有者同意设置可能已通过其他方式获得授权。

  2. 检查策略的范围是否为 group

    GET /policies/permissionGrantPolicies/{ microsoft-all-application-permissions-for-group }
    

    如果为 resourceScopeType == group,则表示组所有者同意设置已通过其他方式获得授权。 此外,如果已为组的应用同意策略分配 microsoft-pre-approval-apps-for-group,则意味着为租户启用了预批准功能。

最好先熟悉组织中现有的组所有者同意策略:

  1. 列出所有应用同意策略:

    GET /policies/permissionGrantPolicies
    
  2. 查看策略的“包括”条件集:

    GET /policies/permissionGrantPolicies/{ microsoft-all-application-permissions-for-group }/includes
    
  3. 查看“排除”条件集:

    GET /policies/permissionGrantPolicies/{ microsoft-all-application-permissions-for-group }/excludes
    

按照以下步骤创建自定义组所有者同意策略:

  1. 创建新的空组所有者同意策略。

    POST https://graph.microsoft.com/v1.0/policies/permissionGrantPolicies
    
    {
      "id": "my-custom-app-consent-policy-for-group",
      "displayName": "My first custom app consent policy for group",
      "description": "This is a sample custom app consent policy for group",
      "includeAllPreApprovedApplications": false,
      "resourceScopeType": "group"
    }
    
  2. 添加“包括”条件集。

    包括来自已验证的发布者的应用的归类为“低”的委托的权限

    POST https://graph.microsoft.com/v1.0/policies/permissionGrantPolicies/{ my-custom-app-consent-policy-for-group }/includes
    
    {
      "permissionType": "delegated",
      "permissionClassification": "low",
      "clientApplicationsFromVerifiedPublisherOnly": true
    }
    

    重复此步骤来添加更多“包括”条件集。

  3. (可选)添加“排除”条件集。 排除 Azure 管理 API 的委托权限 (appId 00001111-aaaa-2222-bbbb-3333cccc4444)

    POST https://graph.microsoft.com/v1.0/policies/permissionGrantPolicies/{ my-custom-app-consent-policy-for-group }/excludes
    
    {
      "permissionType": "delegated",
      "resourceApplication": "00001111-aaaa-2222-bbbb-3333cccc4444 "
    }
    

    重复此步骤来添加其他“排除”条件集。

创建组所有者同意策略后,你可以根据此策略允许组所有者同意

  1. 下面展示了如何删除自定义组所有者同意策略。

    DELETE https://graph.microsoft.com/v1.0/policies/permissionGrantPolicies/ my-custom-policy
    

警告

无法还原已删除的组所有者同意策略。 如果意外删除了自定义组所有者同意策略,则需要重新创建该策略。

支持的条件

下表提供了组所有者同意策略支持的条件的列表。

条件 说明
PermissionClassification 要授予的权限的权限分类,或“all”(匹配任何权限分类,包括未分类的权限)。 默认值为“all”。
PermissionType 要授予的权限的权限类型。 使用“application”表示应用程序权限(例如应用角色),或使用“delegated”表示委托的权限。

注意:值“delegatedUserConsentable”表示 API 发布者尚未将委派的权限配置为需要管理员同意。 此值可用于内置权限授予策略,但不可用于自定义权限授予策略。 必需。
ResourceApplication 要为其授予权限的资源应用程序(例如 API)的 AppId,或“any”(匹配任何资源应用程序或 API)。 默认值为“any”。
权限 要与之匹配的特定权限的权限 ID 的列表;或其中包含单个值“all”的列表,这匹配任何权限。 默认值为单个值“all”。
- 可以在 API 的 ServicePrincipal 对象的 OAuth2Permissions 属性中找到委托的权限 ID。
- 可以在 API 的 ServicePrincipal 对象的 AppRoles 属性中找到应用程序权限 ID。
ClientApplicationIds 要与之匹配的客户端应用程序的 AppId 值的列表;或其中包含单个值“all”的列表,这匹配任何客户端应用程序。 默认值为单个值“all”。
ClientApplicationTenantIds 在其中注册了客户端应用程序的 Microsoft Entra 租户 ID 的列表;或其中包含单值“all”(用于匹配在任何租户中注册的客户端应用)的列表。 默认值为单个值“all”。
ClientApplicationPublisherIds 客户端应用程序的已验证发布者的 Microsoft 合作伙伴网络 (MPN) ID 的列表;或其中包含单个值“all”的列表,这将匹配来自任何发布者的客户端应用。 默认值为单个值“all”。
ClientApplicationsFromVerifiedPublisherOnly 将此开关设置为仅匹配具有已验证发布者的客户端应用程序。 禁用此开关 (-ClientApplicationsFromVerifiedPublisherOnly:$false) 以匹配任何客户端应用,即使它没有已验证的发布者。 默认为 $false

警告

无法还原已删除的组所有者同意策略。 如果意外删除了自定义组所有者同意策略,则需要重新创建该策略。

获取帮助或查找问题的答案: