教程:将目录读取者角色分配到 Microsoft Entra 组并管理角色分配

适用于:Azure SQL 数据库Azure SQL 托管实例Azure Synapse Analytics

本文介绍如何在 Microsoft Entra ID(以前为 Azure Active Directory)中创建组,并向该组分配目录读取者角色 通过目录读取者权限,组所有者能够将其他成员添加到组中,如 Azure SQL 数据库托管标识Azure SQL 托管实例Azure Synapse Analytics。 这就不需要全局管理员特权角色管理员来为租户中的每个逻辑服务器标识直接分配目录读取者角色。

注意

Microsoft Entra ID 以前称为 Azure Active Directory (Azure AD)。

本教程使用使用 Microsoft Entra 组来管理角色分配中引入的功能。

有关将目录读取者角色分配给 Azure SQL Microsoft Entra 组的优势的详细信息,请参阅 Azure SQL 的 Microsoft Entra ID 中的目录读取者角色

注意

借助 Azure SQL 的 Microsoft Graph 支持,可以使用较低级别的权限替换“目录读取者”角色。 有关详细信息,请参阅 Microsoft Entra ID 中适用于 Azure SQL 的用户分配的托管标识

先决条件

使用 Azure 门户的目录读取者角色分配

创建新组并分配所有者和角色

  1. 此初始设置需要具有全局管理员特权角色管理员权限的用户。

  2. 让特权用户登录到 Azure 门户

  3. 转到“Microsoft Entra ID”。 在“托管”下,转到“组” 。 选择“新建组”以创建一个新组。

  4. 选择“安全”作为组类型,并填充其余字段。 确保将“Microsoft Entra 角色可以分配给组”设置切换为“是”。 然后,将 Microsoft Entra ID 目录读取者角色分配给组。

  5. 将 Microsoft Entra 用户作为所有者分配给创建的组。 组所有者可以是未分配任何 Microsoft Entra 管理角色的常规 AD 用户。 所有者应该是管理 SQL 数据库、SQL 托管实例或 Azure Synapse 的用户。

    Microsoft Entra ID-new-group

  6. 选择“创建”

检查创建的组

注意

确保“组类型”为“安全” 。 Azure SQL 不支持 Microsoft 365 组。

若要检查和管理已创建的组,请返回到 Azure 门户中的“组”窗格,并搜索组名称。 选择组后,可以在“管理”设置的“所有者”和“成员”菜单下添加其他所有者和成员 。 还可查看组的“已分配角色”。

“组”窗格的屏幕截图,其中突出显示了用于打开成员、所有者和已分配角色“设置”菜单的链接。

向组添加 Azure SQL 托管标识

注意

虽然我们在此示例中使用 SQL 托管实例,但可以对 SQL 数据库或 Azure Synapse 应用类似的步骤,以获得相同的结果。

在后续步骤中,不再需要全局管理员或特权角色管理员用户。

  1. 以管理 SQL 托管实例的用户身份登录 Azure 门户,并且是之前创建的组的所有者。

  2. 在 Azure 门户中查找 SQL 托管实例资源的名称。

    “SQL 托管实例”屏幕的屏幕截图,其中突出显示了 SQL 实例名称“ssomitest”和子网名称“ManagedInstance”。

    在 SQL 托管实例预配期间,将为实例创建 Microsoft Entra 标识,并将其注册为 Microsoft Entra 应用程序。 标识与 SQL 托管实例名称的前缀同名。 通过执行以下步骤,可查找 SQL 托管实例的标识(也称为服务主体):

    • 转到“Microsoft Entra ID”。 在“管理”设置下,选择“企业应用程序” 。 对象 ID 是实例的标识。

    Microsoft Entra ID 资源的“企业应用程序”页的屏幕截图,其中突出显示了 SQL 托管实例的对象 ID。

  3. 转到“Microsoft Entra ID”。 在“托管”下,转到“组” 。 选择所创建的组。 在组的“托管”设置下,选择“成员” 。 选择“添加成员”,并通过搜索上面找到的名称,将 SQL 托管实例服务主体添加为组的成员。

    Microsoft Entra 资源的“成员”页的屏幕截图,其中突出显示了用于将 SQL 托管实例添加为新成员的选项。

注意

通过 Azure 系统传播服务主体权限并允许访问 Microsoft 图形 API 可能需要几分钟时间。 在为 SQL 托管实例预配 Microsoft Entra 管理员之前,可能需要等待几分钟。

注解

对于 SQL 数据库和 Azure Synapse,可以在创建逻辑服务器期间或创建服务器之后创建服务器标识。 有关如何在 SQL 数据库或 Azure Synapse 中创建或设置服务器标识的详细信息,请参阅使服务主体能够创建 Microsoft Entra 用户

对于 SQL 托管实例,必须先将目录读取者角色分配给托管实例标识,然后才能为托管实例设置 Microsoft Entra 管理员

为逻辑服务器设置 Microsoft Entra 管理员时,SQL 数据库或 Azure Synapse 不需要向服务器标识分配目录读取者角色。 但是,要在 SQL 数据库或 Azure Synapse 中代表 Microsoft Entra 应用程序实现 Microsoft Entra 对象创建,则需要目录读取者角色。 如果未将该角色分配给逻辑服务器标识,则将无法在 Azure SQL 中创建 Microsoft Entra 用户。 有关详细信息,请参阅使用 Azure SQL 的 Microsoft Entra 服务主体

使用 PowerShell 的目录读取者角色分配

重要

全局管理员特权角色管理员需要运行这些初始步骤。 除 PowerShell 外,Microsoft Entra ID 还提供 Microsoft Graph API 以在 Microsoft Entra ID 中创建可分配角色的组。

  1. 使用以下命令下载 Microsoft Graph PowerShell 模块。 可能需要以管理员身份运行 PowerShell。

    Install-Module Microsoft.Graph.Authentication
    Import-Module Microsoft.Graph.Authentication
    # To verify that the module is ready to use, run the following command:
    Get-Module Microsoft.Graph.Authentication
    
  2. 连接 Microsoft Entra 租户。

    Connect-MgGraph -Environment China
    
  3. 创建安全组以分配目录读取者角色。

    • DirectoryReaderGroupDirectory Reader GroupDirRead 可根据你的喜好进行更改。
    $group = New-MgGroup -DisplayName "DirectoryReaderGroup" -Description "Directory Reader Group" -SecurityEnabled:$true -IsAssignableToRole:$true -MailEnabled:$false -MailNickname "DirRead"
    $group
    
  4. 将目录读取者角色分配给组。

    # Displays the Directory Readers role information
    $roleDefinition = Get-MgRoleManagementDirectoryRoleDefinition -Filter "DisplayName eq 'Directory Readers'"
    $roleDefinition
    
    # Assigns the Directory Readers role to the group
    $roleAssignment = New-MgRoleManagementDirectoryRoleAssignment -DirectoryScopeId '/' -RoleDefinitionId $roleDefinition.Id -PrincipalId $group.Id
    $roleAssignment
    
  5. 将所有者分配给组。

    • <username> 替换为你想要其拥有该组的用户。 通过重复这些步骤来添加多个所有者。
    $newGroupOwner = Get-MgUser -UserId "<username>"
    $newGroupOwner
    
    $GrOwner = New-MgGroupOwnerByRef -GroupId $group.Id -DirectoryObjectId $newGroupOwner.Id
    

    检查组的所有者:

    Get-MgGroupOwner -GroupId $group.Id
    

    还可在 Azure 门户中验证组的所有者。 执行检查创建的组中的步骤。

将服务主体分配为组的成员

在后续步骤中,不再需要全局管理员或特权角色管理员用户。

  1. 使用也可管理 Azure SQL 资源的组所有者,运行以下命令以连接到 Microsoft Entra ID。

    Connect-MgGraph -Environment China
    
  2. 将服务主体分配为所创建组的成员。

    # Returns the service principal of your Azure SQL resource
    $managedIdentity = Get-MgServicePrincipal -Filter "displayName eq '<ServerName>'"
    $managedIdentity
    
    # Adds the service principal to the group
    New-MgGroupMember -GroupId $group.Id -DirectoryObjectId $managedIdentity.Id
    

    以下命令将返回服务主体对象 ID,指示已将其添加到组:

    Get-MgGroupMember -GroupId $group.Id -Filter "Id eq '$($managedIdentity.Id)'"
    

后续步骤