Microsoft Entra ID を使用して Azure に対する認証を行う

Microsoft Entra ID サービスを使って、ユーザー管理、ドメイン管理、シングル サインオン構成などの多くの管理タスクを行うことができます。 この記事では、Azure Automation 内で Microsoft Entra ID を Azure への認証のためのプロバイダーとして使う方法について説明します。

Microsoft Entra モジュールをインストールする

次の PowerShell モジュールを使って Microsoft Entra ID を有効にできます。

  • Azure Active Directory PowerShell for Graph (AzureRM および Az モジュール)。 Azure Automation には、AzureRM モジュールとその最新のアップグレードである Az モジュールが付属しています。 機能には、Microsoft Entra ID ユーザー (OrgId) の資格情報ベースの認証を用いた Azure への非対話型認証が含まれます。 Microsoft Entra ID 2.0.2.76 をご覧ください。

  • Windows PowerShell 用の Microsoft Entra ID (MSOnline モジュール)。 このモジュールを使用すると、Microsoft 365 を含む Microsoft Online との対話が可能になります。

Note

PowerShell Core は、MSOnline モジュールをサポートしていません。 モジュール コマンドレットを使用するには、それらを Windows PowerShell から実行する必要があります。 MSOnline モジュールではなく、新しい Azure Active Directory PowerShell for Graph モジュールを使用することをお勧めします。

Note

Azure AD および MSOnline PowerShell モジュールは、2024 年 3 月 30 日の時点で非推奨となります。 詳細については、非推奨の最新情報を参照してください。 この日以降、これらのモジュールのサポートは、Microsoft Graph PowerShell SDK への移行支援とセキュリティ修正プログラムに限定されます。 非推奨になるモジュールは、2025 年 3 月 30 日まで引き続き機能します。

Microsoft Entra ID (旧称 Azure AD) を使用するには、Microsoft Graph PowerShell に移行することをお勧めします。 移行に関する一般的な質問については、「移行に関する FAQ」を参照してください。 注: バージョン 1.0.x の MSOnline では、2024 年 6 月 30 日以降に中断が発生する可能性があります。

プレインストール

コンピューターに Microsoft Entra モジュールをインストールする前に:

  • AzureRM または Az モジュールおよび MSOnline モジュールの以前のバージョンがある場合はアンインストールします。

  • Microsoft Online Services サインイン アシスタントをアンインストールして、新しい PowerShell モジュールが正しく動作するようにします。

AzureRM および Az モジュールをインストールする

Note

これらのモジュールを使用するには、64 ビット バージョンの Windows に PowerShell バージョン 5.1 以降を使用する必要があります。

  1. Windows Management Framework (WMF) 5.1 をインストールします。 「WMF 5.1 のインストールと構成」を参照してください。

  2. PowerShellGet を使用した Windows への Azure PowerShell のインストール」の手順に従って AzureRM または Az をインストールします。

MSOnline モジュールをインストールする

Note

MSOnline モジュールをインストールするには、管理者ロールのメンバーである必要があります。 管理者ロールについて を参照してください。

  1. コンピューターで Microsoft .NET Framework 3.5.x 機能が有効であることを確認します。 コンピューターに新しいバージョンがインストールされている可能性がありますが、.NET Framework の以前のバージョンとの下位互換性を有効または無効にすることができます。

  2. Microsoft Online Services サインイン アシスタントの 64 ビット バージョンをインストールします。

  3. 管理者特権で Windows PowerShell コマンド プロンプトを作成するには、管理者として Windows PowerShell を実行します。

  4. MSOnline 1.0 から Microsoft Entra ID を展開します。

  5. NuGet プロバイダーのインストールを求めるメッセージが表示されたら、「Y」と入力し、Enter キーを押します。

  6. PSGallery からモジュールをインストールするように求めるメッセージが表示されたら、「Y」と入力し、Enter キーを押します。

PSCredential のサポートをインストールする

Azure Automation では、PSCredential クラスを使用して資格情報資産を表します。 スクリプトで Get-AutomationPSCredential コマンドレットを使用して PSCredential オブジェクトを取得します。 詳細については、「Azure Automation での資格情報資産」を参照してください。

サブスクリプション管理者を割り当てる

Azure サブスクリプションの管理者を割り当てる必要があります。 このユーザーには、サブスクリプション スコープの所有者のロールがあります。 「Azure Automation におけるロールベースのアクセス制御」を参照してください。

Microsoft Entra ユーザーのパスワードを変更する

Microsoft Entra ユーザーのパスワードを変更するには:

  1. Azure からログ アウトします。

  2. 管理者に、(ドメインを含む) 完全なユーザー名と一時的なパスワードを使用して、先ほど作成した Microsoft Entra ユーザーとして Azure にログインしてもらいます。

  3. プロンプトが表示されたら、管理者にパスワードの変更を依頼します。

Azure サブスクリプションを管理するように Azure Automation を構成する

Azure Automation と Microsoft Entra ID が通信するには、Microsoft Entra ID への Azure の接続に関連付けられている資格情報を取得する必要があります。 このような資格情報の例としては、テナント ID、サブスクリプション ID などがあります。 Azure と Microsoft Entra ID の間の接続について詳しくは、「Microsoft Entra ID に組織を接続する」をご覧ください。

資格情報資産を作成する

Microsoft Entra 用の Azure 資格情報を使用できるようになったら、Azure Automation の資格情報資産を作成して Microsoft Entra の資格情報を安全に格納し、Runbook と Desire State Configuration (DSC) スクリプトからアクセスできるようにします。 この処理は、Azure portal または PowerShell コマンドレットで行うことができます。

Azure portal で資格情報資産を作成する

Azure portal を使用して、資格情報資産を作成することができます。 この操作は、Automation アカウントから [共有リソース] の下にある [資格情報] を使用して行います。 「Azure Automation での資格情報資産」を参照してください。

Windows PowerShell を使用して資格情報資産を作成する

Windows PowerShell で新しい資格情報資産を準備するために、スクリプトでは、まず割り当てられたユーザー名とパスワードを使用して PSCredential オブジェクトを作成します。 次に、このスクリプトでは、このオブジェクトを使用し、New-AzureAutomationCredential コマンドレットを呼び出して資産を作成します。 または、スクリプトで Get-Credential コマンドレットを呼び出し、ユーザーに名前とパスワードの入力を求めることができます。 「Azure Automation での資格情報資産」を参照してください。

Azure Automation Runbook からの Azure リソースの管理

Azure Automation Runbook から資格情報資産を使用して Azure リソースを管理できます。 Azure サブスクリプションで仮想マシンを停止および開始するために使用する資格情報資産を収集する PowerShell Runbook の例を次に示します。 この Runbook では、まず Get-AutomationPSCredential を使用して、Azure への認証に使用する資格情報を取得します。 次に、Connect-AzAccount コマンドレットを呼び出し、資格情報を使用して 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
        } 
    } 
}

次のステップ