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

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

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

# 1．マネージドIDの作成

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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172826/1a6b6468-e6d2-bf8c-b31b-606086941b82.png)

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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172826/5e3037b1-ba20-5e26-7020-64d25f765c7f.png)

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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172826/9f11727c-c667-1af9-8005-833180a1f029.png)

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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172826/c01607ef-db54-ad68-dedd-2c2236445be2.png)

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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172826/b4c44c3c-fb5c-b60c-ae26-1b7443a1bde8.png)

# 2．Automation設定

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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172826/ee00a5df-b530-a6c9-d8fd-0ba441c7e9c9.png)

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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172826/736e1676-34a8-7eb5-5510-05d371038732.png)

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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172826/717ed3f2-4773-3298-0541-2d01812616ac.png)

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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172826/a0436f10-6fee-2e22-b1c5-e66b55859db9.png)

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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172826/c3991a6f-beea-48e2-7f5f-6d4ab612adf8.png)

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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172826/978baf7f-49bc-9bec-23f7-636f93e79fca.png)

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

# 3．Runbook作成

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

```powershell
# マネージド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が起動されることが確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172826/23f024b0-4ebd-42d1-570e-5ce37509cb83.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172826/5663c774-90d3-92ee-736c-d1ea6c1f3c9d.png)

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

# 参考資料

- [Azure リソースのマネージド ID とは](https://docs.microsoft.com/ja-jp/azure/active-directory/managed-identities-azure-resources/overview#how-can-i-use-managed-identities-for-azure-resources)
- [Azure Automation アカウントのマネージド ID を有効にする (プレビュー)](https://docs.microsoft.com/ja-jp/azure/automation/enable-managed-identity-for-automation)