マネージドIDを使用してRunbookからAzureリソースを操作する

マネージド ID というものを使うと、サービスプリンシパルを用意せずに Azure リソースから Azure リソースの操作を実施することができます。 Runbook を用いてプライベート DNS ゾーンの操作を自動化を実施することを想定してその手順を用意してみました。 料金的にもリーズナブルで、すべて Azure ポータル上の作業で完結するので、一度やってみましょう。

操作対象のリソース(プライベート DNS ゾーン)の用意

Azure ポータルから DNS ゾーンを作成します。 DNS ゾーンの名前は private.example.com 、リソースグループ名は blog で作成してみました。

/control-azure-resources-from-a-runbook-using-a-managed-id/001.png

Screenshot

このまま VNET に接続しなければ宝の持ち腐れですが、今回は説明用ということで。

Runbook の用意

Azure ポータルから Automation アカウントを作成します。 名前は blogaccount とか、任意で大丈夫です。

作成時に詳細設定でマネージド ID の設定ができるので、デフォルトの通り「システム割り当て」をオンにしておいてください。 (Automation アカウントの作成後、アカウント設定 – ID から、システム割り当てマネージド ID を「オン」にしても大丈夫です)

/control-azure-resources-from-a-runbook-using-a-managed-id/002.png

Screenshot

Automation アカウントが作成されたら、Automation アカウントのポータル画面から プロセス オートメーション – Runbook を開き、+ Runbook を作成を選択します。

Runbook の種類に PowerShell を選び、ランタイムバージョンは 5.1 を選んで作成します。 Runbook 名は Add-PrivateDnsRecord にしましょうか。

/control-azure-resources-from-a-runbook-using-a-managed-id/003.png

Screenshot

PowerShell のコードを記載する画面になりますが、一旦そっと閉じます。

マネージド ID が プライベート DNS ゾーンを操作できるようにする

Azure ポータルからプライベート DNS ゾーンの「アクセス制御(IAM)」を開きます。 上の「+追加」を押して、「ロールの割り当ての追加」をクリックします。

/control-azure-resources-from-a-runbook-using-a-managed-id/004.png

Screenshot

ロールの一覧が出るので、「プライベート DNS ゾーンの共同作成者」を選択して次へを押します。

メンバーの選択画面になるので、アクセスの割当先を「マネージド ID」にして、「+メンバーを選択する」をクリックします。 すると、マネージド ID の選択画面が表示されるので、マネージド ID のプルダウンから「Automation アカウント」を選択し、先ほど作成した Automation アカウントの名前(記事通りであれば blogaccount)を選択して「選択」をクリックします。

「レビューと割り当て」をクリックすると、ロールの割り当てが完了し、Automation アカウント(の Runbook 等)からプライベート DNS ゾーンがマネージド ID で操作できるようになりました。

/control-azure-resources-from-a-runbook-using-a-managed-id/005.png

Screenshot

プライベート DNS ゾーンを操作する PowerShell を実装する

再び Automation アカウントのポータル画面に戻り、 プロセス オートメーション – Runbook を開き、 作成した空の Runbook(Add-PrivateDnsRecord)を開きます。

「編集」をクリックして、下記の PowerShell を記載し保存、公開してください。

1 行目の Add-AzAccount -identity により、マネージド ID を利用して Azure にログインした状態になります。 サービスプリンシパルの場合はクレデンシャル情報を作って Connect-AzAccount を使用するので面倒ですが、マネージド ID はシークレットの概念が無いのでシンプルですね。

2 行目の New-AzPrivateDnsRecordSet で、プライベート DNS ゾーンにレコードを追加します。

Runbook を実行してみる

公開された Runbook は「開始」ができるようになります。 (保存だけではダメです、公開しましょう)

/control-azure-resources-from-a-runbook-using-a-managed-id/006.png

Screenshot

開始を押してみましょう。ジョブの画面が表示されます。 「全てのログ」のところを開いておくと、処理完了後に自動的に情報が出るようです。

エラーなどが出ていなければ成功してしそうなので、プライベート DNS ゾーンの画面に行ってみましょう。

A レコードが追加されていたら成功です!

/control-azure-resources-from-a-runbook-using-a-managed-id/007.png

Screenshot

まとめ

マネージド ID を使用して、権限面で安全に Azure リソースの操作ができることが分かりました。

Terraform や Runbook の Webhook を活用すれば、高度な自動化処理も実現できますね。 運用負荷軽減の自動化、頑張っていきましょう!