[Azure] Azure Automationで、マネージドIDを使用したVMの起動処理を実行する


マネージドIDはAzureADの機能で、AzureAD認証をサポートするリソースへのアクセス許可を付与するのに使用することができるIDです。

サービスプリンシパルのように認証情報を管理する必要が無いため、今後利用される機会が増えそうです。現在まだ全てのAzureサービスが対応しておらず、Automationでもプレビューとなっていますが、今回はこれを使用したVMの起動処理を試しに実行してみました。

1.マネージドIDの作成

Automatioアカウントのメニュー「ID」から作成します。状態を"オン"にし、保存します。

確認のダイアログで「はい」を選択します。

少し待って作成完了すると表示が変わるので、「Azureロールの割り当て」を選択します。

必要なロールを付与します。今回はVMの起動処理を実行するので、仮想マシン共同作成者を選択しました。

以上でIDの作成は完了です。作成したIDは、AzureADでは「エンタープライズアプリケーション」に表示されていました。アプリケーションの種類から「マネージドID」を選択すると表示されます。ここにアプリを登録する権限が無いと作成エラーになってしまうと思われます。

2.Automation設定

続いてAutomationの設定を行います。マネージドIDではAzモジュールを使用する必要がありますが、デフォルトではインポートされていないので追加します。Automationアカウントの「モジュール」→「ギャラリーを参照」を選択します。

"Az.Accounts" モジュールを検索して選択します。

「インポート」を選択します。

インポートが完了しないと依存関係で先に進めないので、少し待って状態が「使用可能」になったことを確認します。

続いて、"Az.Compute" モジュールを検索してインストールします(他にも操作するAzureリソースによって必要なモジュールをインポートしてください)。

インポートが完了し、状態が「使用可能」になったことを確認します。

Automationアカウントの設定は以上です。

3.Runbook作成

後はRunbookの作成です。手順はこれまでと特に変わりません。以下が今回試したRunbookです。

# マネージドIDによる接続
Connect-AzAccount -Identity

$ResourceGroupName = 'resource-group-name'
$VmName = 'vm-name'

# VMの起動
Write-Output ("Start VM:" + $VmName)
try {
    $result = Start-AzVM -ResourceGroupName $ResourceGroupName -Name $VmName
}
catch {
    $ErrorMessage = $_.Exception.message
    Write-Error ("Error occurred when starting vm:" + $ErrorMessage)
    Break
}

ポイントは最初の Connect-AzAccount -Identity で、これにより設定したマネージドIDの権限を使用することができます。その後の処理はAzモジュールを使用して必要な処理を記載するだけです。

実行してみると、VMが起動されることが確認できます。

以上で、マネージドIDを使用したVMの起動処理が可能なことが確認できました。

参考資料