#AzureLogicApps で #AzureAutomation の REST API を実行する（マネージドID編）

# はじめに

Azure Logic Apps から実行した Azure Automation のジョブを REST API を使って停止させるシナリオを解説します。本投稿は、前回の記事の続きとなります。前回の記事は下記を参照ください。

[#AzureLogicApps で #AzureAutomation の REST API を実行する（Azure Directory OAuth編）](https://qiita.com/shibatea/items/5737a80d5ff18d0b7e93)

今回は、HTTP コネクタの「マネージドID」認証で Automation REST API を実行します。
「マネージドID」認証の場合はシークレットキーを用意する必要がなく、管理が楽になります。

# 「マネージドID」認証とは

詳しい説明は [Docs](https://docs.microsoft.com/ja-jp/azure/active-directory/managed-identities-azure-resources/overview) を参照していただくとして、私の理解では「こんな風に見えないところでやり取りされてるんだよ～」というのを少しストーリー立てて説明します。

## 名無しの権兵衛のリソース
マネージド ID が有効化されていない Azure Logic Apps は、Azure Active Directory から見たら **名無しの権兵衛** のリソースです。

**名無しの権兵衛** の Azure Logic Apps が HTTP コネクタで Automation REST API を実行するとこうなります。

Logic Apps「Automation REST API を叩くぜ～～！！」
Azure AD「誰やお前！？ここは通させへんで～～！！」（401 AuthenticationFailed）

となり、Azure Active Directory から見たら正体不明の不審者である Azure Logic Apps は認証処理で弾かれます。

## 名前付きのリソース
マネージド ID の有効化を行うと Azure Logic Apps に ID が発行され、Azure Active Directory から認識できる（管理された）**名前付き** のリソースになります。

**名前付き** の Azure Logic Apps が HTTP コネクタで Automation REST API を実行すると、こうなります。

Logic Apps「Automation REST API を叩くぜ～～！！」
Azure AD「お？君はあの Logic Apps 君じゃないか、通ってもいいよ～」（顔パス）
Azure AD「あ、でも君が Automation REST API で触ろうとしてる Automation アカウントだけど、それを触る権限を君は持ってないねぇ…」（403 Forbidden）

となり、認証処理はパスしたけど認可処理で弾かれます。まだ API の実行に至りません。

## 名前付きのリソースにロールを割り当てる
認可処理で弾かれた通り、Azure Logic Apps は Automation アカウントに対する権限がありません。権限を与えるためには、Automation アカウントのアクセス制御（IAM）で、**名前付き** の Azure Logic Apps に対してロールの割り当てを行う必要があります。今回は「Automation オペレーター」のロールを割り当てます。

ロールを割り当てられた **名前付き** の Azure Logic Apps が HTTP コネクタで Automation REST API を実行すると、こうなります。

Logic Apps「Automation REST API を叩くぜ～～！！」
Azure AD「お？君はあの Logic Apps 君じゃないか、通ってもいいよ～」（顔パス）
Azure AD「君が触ろうとしてる Automation アカウントに対して、Automation オペレーターのロールを持ってるから Runbook の管理が許可されてるね、OK！！」（200 OK）

これで晴れて API が実行できるようになりました。

# 設定手順
以下の設定を行うことで Azure Logic Apps の HTTP コネクタで「マネージドID」認証が利用できるようになります。

## Azure Logic Apps のマネージド ID を有効化

Azure Logic Apps を選択して、左ペインから [設定] > [ID] を開いて、「システム割り当て済み」の状態をオンにして保存します。すると、下記画像のようにオブジェクトIDが発行されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89309/1b345666-8700-8fce-ff36-2a0c39ad74c6.png)

## Azure Logic Apps のロールの割り当て

Automation アカウントを選択して、左ペインから [アクセス制御（IAM）] を選択して、[追加] > [ロールの割り当ての追加] を選択します。画像の通り、マネージド ID を有効化した Azure Logic Apps を選択して、「Automation オペレーター」のロールを割り当てます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89309/1b9ee48a-005e-f877-761f-cc75a27a90e1.png)

## Azure Logic Apps の HTTP コネクタの設定

対象ユーザーの欄に `https://management.azure.com/` を設定していますが、空欄のままでも実行できました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89309/fd048dea-fbc0-59dd-1d3a-e27efc2e917b.png)

なお、対象ユーザーの欄に関する説明で、リソース ID は末尾にスラッシュあり/なしがあって、正確に入力する必要があるとの記載がありました。

[マネージド ID の認証](https://docs.microsoft.com/ja-jp/azure/logic-apps/logic-apps-securing-a-logic-app#managed-identity-authentication)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89309/95eaa3ae-a52e-75b9-2fd4-de2f2437c943.png)

# 実行結果

無事にすべてのフローが成功しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89309/da061f0f-466c-ab88-17b0-96505e2770d4.png)

# まとめ

マネージド ID はとても便利です。是非活用していきましょう！

最後に、私がマネージド ID について理解を深めることができたキッカケとなるセッションがありましたので、ご紹介させていただきます。資料も公開されているので興味があればご覧ください。

[第19回 Tokyo Jazug Night](https://jazug.connpass.com/event/133983/)


# 参考

[Azure リソースのマネージド ID | Microsoft Docs](https://docs.microsoft.com/ja-jp/azure/active-directory/managed-identities-azure-resources/overview)
[Azure Automation におけるロールベースのアクセス制御 | Microsoft Docs](https://docs.microsoft.com/ja-jp/azure/automation/automation-role-based-access-control)
[データへのアクセスをセキュリティで保護する | Microsoft Docs](https://docs.microsoft.com/ja-jp/azure/logic-apps/logic-apps-securing-a-logic-app#managed-identity-authentication)
[マネージド ID による認証 | Microsoft Docs](https://docs.microsoft.com/ja-jp/azure/logic-apps/create-managed-service-identity)
[マネージド ID をサポートする Azure サービス - Azure AD | Microsoft Docs](https://docs.microsoft.com/ja-jp/azure/active-directory/managed-identities-azure-resources/services-support-managed-identities)