你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

使用 Microsoft Entra ID 在 Azure 中进行身份验证

Microsoft Entra ID 服务支持多种管理任务,例如用户管理、域管理和单一登录配置。 本文介绍如何使用 Azure 自动化中的 Microsoft Entra ID 作为向 Azure 进行身份验证的提供程序。

安装 Microsoft Entra 模块

可以通过以下 PowerShell 模块启用 Microsoft Entra ID:

  • 用于 Graph 的 Azure Active Directory PowerShell(AzureRM 和 Az 模块)。 Azure 自动化随附了 AzureRM 模块及其最新的升级,Az 模块。 功能包括使用基于 Microsoft Entra 用户 (OrgId) 凭据的身份验证向 Azure 进行非交互式身份验证。 请参阅 Microsoft Entra ID 2.0.2.76

  • 适用于 Windows PowerShell 的 Microsoft Entra ID(MSOnline 模块)。 此模块可启用与 Microsoft Online(包括 Office 365)的交互。

注意

PowerShell Core 不支持 MSOnline 模块。 若要使用模块 cmdlet,必须从 Windows PowerShell 运行这些 cmdlet。 建议使用较新的用于 Graph 的 Azure Active Directory PowerShell 模块,而不是使用 MSOnline 模块。

预安装

在计算机上安装 Microsoft Entra 模块之前,请执行以下操作:

  • 卸载任何以前版本的 AzureRM/Az 模块和 MSOnline 模块。

  • 卸载 Microsoft Online Services 登录助手以确保正确操作新的 PowerShell 模块。

安装 AzureRM 和 Az 模块

注意

若要使用这些模块,必须将 PowerShell 版本 5.1 或更高版本与 64 位版本 Windows 一起使用。

  1. 安装 Windows Management Framework (WMF) 5.1。 请参阅安装和配置 WMF 5.1

  2. 请按照使用 PowerShellGet 在 Windows 上安装 Azure PowerShell 中的说明安装 AzureRM 和/或 Az。

安装 MSOnline 模块

注意

要安装 MSOnline 模块,必须是管理员角色的成员。 请参阅关于管理员角色

  1. 请确保已在计算机上启用 Microsoft .NET Framework 3.5.x 功能。 计算机可能已安装较新版本,但可启用或禁用较旧版本的 .NET Framework 的后向兼容性。

  2. 安装 64 位版本的 Microsoft Online Services 登录助手

  3. 以管理员身份运行 Windows PowerShell,创建提升的 Windows PowerShell 命令提示符。

  4. MSOnline 1.0 部署 Microsoft Entra ID。

  5. 如果系统提示安装 NuGet 提供程序,请键入“Y”,然后按 Enter。

  6. 如果系统提示从 PSGallery 中安装模块,请键入“Y”,然后按 Enter。

对 PSCredential 的安装支持

Azure 自动化使用 PSCredential 类表示凭据资产。 脚本使用 Get-AutomationPSCredential cmdlet 检索 PSCredential 对象。 有关详细信息,请参阅 Azure 自动化中的凭据资产

分配订阅管理员

必须为 Azure 订阅分配一个管理员。 此管理员拥有订阅范围的所有者角色。 请参阅 Azure 自动化中基于角色的访问控制

更改 Microsoft Entra 用户的密码

若要更改 Microsoft Entra 用户的密码,请执行以下操作:

  1. 从 Azure 注销。

  2. 让管理员使用完整的用户名(包括域)和临时密码,以刚刚创建的 Microsoft Entra 用户身份登录到 Azure。

  3. 让管理员在出现提示时更改密码。

配置 Azure 自动化以管理 Azure 订阅

要使 Azure 自动化能够与 Microsoft Entra ID 通信,你必须检索与 Azure 和 Microsoft Entra ID 之间的连接相关联的凭据。 这些凭据的示例包括租户 ID、订阅 ID 等。 有关 Azure 与 Microsoft Entra ID 之间的连接的详细信息,请参阅将组织连接到 Microsoft Entra ID

创建凭据资产

获取 Microsoft Entra 的 Azure 凭据后,可以创建一个用于安全存储 Microsoft Entra 凭据的 Azure 自动化凭据资产,以便 Runbook 和 Desired State Configuration (DSC) 脚本可以访问这些凭据。 可以使用 Azure 门户或 PowerShell cmdlet 来执行此操作。

在 Azure 门户中创建凭据资产

可以使用 Azure 门户来创建凭据资产。 使用“共享资源”下的“凭据”,从自动化帐户执行此操作。 请参阅 Azure 自动化中的凭据资产

使用 Windows PowerShell 创建凭据资产

若要在 Windows PowerShell 中准备新的凭据资产,脚本应首先使用分配的用户名和密码创建 PSCredential 对象。 然后,脚本使用此对象通过调用 New-AzureAutomationCredential cmdlet 来创建资产。 或者,脚本可以调用 Get-Credential cmdlet 来提示用户键入名称和密码。 请参阅 Azure 自动化中的凭据资产

通过 Azure 自动化 runbook 管理 Azure 资源

可以使用凭据资产通过 Azure 自动化 runbook 管理 Azure 资源。 下面是一个示例 PowerShell runbook,它收集用于停止和启动 Azure 订阅中的虚拟机的凭据资产。 此 runbook 首先使用 Get-AutomationPSCredential 来检索用于向 Azure 进行身份验证的凭据。 然后,它会调用 Connect-AzAccount cmdlet,以使用凭据连接到 Azure。

Workflow Workflow
{ 
    Param 
    (    
        [Parameter(Mandatory=$true)][ValidateNotNullOrEmpty()] 
        [String] 
        $AzureSubscriptionId, 
        [Parameter(Mandatory=$true)][ValidateNotNullOrEmpty()] 
        [String] 
        $AzureVMList="All", 
        [Parameter(Mandatory=$true)][ValidateSet("Start","Stop")] 
        [String] 
        $Action 
    ) 
     
    # Ensures you do not inherit an AzContext in your runbook
    Disable-AzContextAutosave -Scope Process

    # Connect to Azure with system-assigned managed identity
    $AzureContext = (Connect-AzAccount -Identity).context

    # set and store context
    $AzureContext = Set-AzContext -SubscriptionName $AzureContext.Subscription -DefaultProfile $AzureContext 

    # get credential
    $credential = Get-AutomationPSCredential -Name "AzureCredential"

    # Connect to Azure with credential
    $AzureContext = (Connect-AzAccount -Credential $credential -TenantId $AzureContext.Subscription.TenantId).context 

    # set and store context
    $AzureContext = Set-AzContext -SubscriptionName $AzureContext.Subscription `
        -TenantId $AzureContext.Subscription.TenantId `
        -DefaultProfile $AzureContext
 
    if($AzureVMList -ne "All") 
    { 
        $AzureVMs = $AzureVMList.Split(",") 
        [System.Collections.ArrayList]$AzureVMsToHandle = $AzureVMs 
    } 
    else 
    { 
        $AzureVMs = (Get-AzVM -DefaultProfile $AzureContext).Name 
        [System.Collections.ArrayList]$AzureVMsToHandle = $AzureVMs 
    } 
 
    foreach($AzureVM in $AzureVMsToHandle) 
    { 
        if(!(Get-AzVM -DefaultProfile $AzureContext | ? {$_.Name -eq $AzureVM})) 
        { 
            throw " AzureVM : [$AzureVM] - Does not exist! - Check your inputs " 
        } 
    } 
 
    if($Action -eq "Stop") 
    { 
        Write-Output "Stopping VMs"; 
        foreach -parallel ($AzureVM in $AzureVMsToHandle) 
        { 
            Get-AzVM -DefaultProfile $AzureContext | ? {$_.Name -eq $AzureVM} | Stop-AzVM -DefaultProfile $AzureContext -Force 
        } 
    } 
    else 
    { 
        Write-Output "Starting VMs"; 
        foreach -parallel ($AzureVM in $AzureVMsToHandle) 
        { 
            Get-AzVM -DefaultProfile $AzureContext | ? {$_.Name -eq $AzureVM} | Start-AzVM -DefaultProfile $AzureContext
        } 
    } 
}

后续步骤