共用方式為


使用 Microsoft Entra ID 向 Azure 進行驗證

Microsoft Entra ID 服務可啟用許多系統管理工作,例如使用者管理、網域管理和單一登入設定。 此文章描述如何在 Azure 自動化中,使用 Microsoft Entra ID 做為提供者向 Azure 進行驗證。

安裝 Microsoft Entra 模組

您可以透過下列 PowerShell 模組啟用 Microsoft Entra ID:

  • 適用於 Graph (AzureRM 和 Az 模組) 的 Azure Active Directory PowerShell。 Azure 自動化隨附 AzureRM 模組及其最近的升級 (Az 模組)。 功能包括使用 Microsoft Entra 使用者 (OrgId) 認證型驗證,對 Azure 進行非互動式驗證。 請參閱 Microsoft Entra ID 2.0.2.76

  • 適用於 Windows PowerShell 的 Microsoft Entra ID (MSOnline 模組)。 此模組可與 Microsoft Online 互動 (包括 Microsoft 365)。

注意

PowerShell Core 不支援 MSOnline 模組。 若要使用模組 Cmdlet,您必須從 Windows PowerShell 加以執行。 建議您使用較新的適用於 Graph 的 Azure Active Directory PowerShell 模組,而不是使用 MSOnline 模組。

注意

自 2024 年 3 月 30 日起,Azure AD 和 MSOnline PowerShell 模組已被淘汰。 若要深入了解,請閱讀淘汰更新。 在此日期之後,對這些模組的支援僅限於對 Microsoft Graph PowerShell SDK 的移轉協助和安全性修正。 淘汰的模組將繼續運作至 2025 年 3 月 30 日。

我們建議移轉至 Microsoft Graph PowerShell 以與 Microsoft Entra ID (以前稱為 Azure AD) 互動。 如需了解常見的移轉問題,請參閱移轉常見問題注意:MSOnline 1.0.x 版可能會在 2024 年 6 月 30 日之後發生中斷。

預先安裝

在您的電腦上安裝 Microsoft Entra 模組之前:

  • 將任何先前版本的 AzureRM/Az 模組和 MSOnline 模組解除安裝。

  • 將 Microsoft Online Services 登入小幫手解除安裝,以確保新 PowerShell 模組的運作正常。

安裝 AzureRM 和 Az 模組

注意

若要使用這些模組,您必須搭配 64 位元版本的 Windows 使用 PowerShell 5.1 版或更新版本。

  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 連線相關聯的認證擷取至 Azure AD。 這些認證的範例包括租用戶識別碼、訂用帳戶識別碼等等。 如需 Azure 與 Microsoft Entra ID 之間的連線詳細資訊,請參閱將組織連線到 Microsoft Entra ID

建立認證資產

若可以使用適用於 Microsoft Entra 的 Azure 認證,就可以建立 Azure 自動化認證資產,以安全地儲存 Azure AD 認證,讓 Runbook 和期望狀態設定 (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
        } 
    } 
}

下一步