MoreBeerMorePower

Power Platform中心だけど、ノーコード/ローコード系を書いてます。

Power Automate から Azure API Management REST APIを実行するための手順

API Management を最近よく使うようになってきて、状態の管理やAPIの登録を自動化したいなと思い、調べると Azure API Management の REST APIでいろいろできそうだったので、Power Automate/Logic Appsから利用するための手順を残しておきます。

Azure API Management の REST APIについては以下を参照

docs.microsoft.com

大まかな流れとしては、Azure ADにアプリケーションを登録し、API Management 側でそのアプリにRoleを付与。

Power Automate/Logic AppsではHTTPアクション実行時に認証として[Active Directory OAuth]を利用するということになります。

目次

1. Azure ADへのアプリケーション登録

Azureポータル (https://portal.azure.com/) を表示して、[Azure Active Directory] > [App registrations] と進み、[+ New registration] をクリックします。

f:id:mofumofu_dance:20201216144858p:plain

アプリの名前、アカウントの種類を選択し、[Register] をクリックします。このあたりまではGraph APIと手順は同じですね。

f:id:mofumofu_dance:20201216145400p:plain

これでアプリケーション登録は完了です。登録が完了するとアプリの概要が表示されます。

ここで表示されている [Application ID], [Directory ID] は後ほどAPIを実行する際に認証情報として利用するので、どこかにメモしておきます。

また、左側メニューの [Certificates & secrets] から、シークレットを生成しておきましょう。

f:id:mofumofu_dance:20201216145931p:plain

2. API Management へのRole追加

API Management を REST APIで操作するためには操作に必要な権限を付与する必要があります。これを行うためには対象となるAPI Managementのリソースを表示し、[Access control (IAM)] から適切なロールを付与します。

[+Add] をクリックすると必要な情報を入力するダイアログが表示されるので、ここで先ほど作成したアプリケーションに対して [Contribute] のロールを付与します。

f:id:mofumofu_dance:20201216151258p:plain

API Management の リソース情報に関しては下図で示した、[Service name], [Resource group name], [Subscription ID] もAPI実行時に必要になりますので、メモしておきます。

f:id:mofumofu_dance:20201216151858p:plain

※下記のようなURLをこれらの情報で構成します。

GET https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ApiManagement/service/{serviceName}/apis?api-version=2019-12-01

3. Power Automate/Logic AppsからのHTTPリクエスト

最後にPower Automate/Logic AppsからAzure API Management REST APIを実行してみます。 HTTPアクションを追加して下図のように指定します。

f:id:mofumofu_dance:20201216154546p:plain

これで完成です。ロールが正しく付与されていれば以下のように、APIの一覧が返されます。

f:id:mofumofu_dance:20201216154740p:plain

おわり

最初は認証とかどうするのかと思いましたが、Graph APIの時との違いは Azure API Management側からロールを付与する点でしょうか。

エラー内容でググったら同じようなフォーラムの質問が出てきて助かりました。

References:

azure - The client with object id does not have authorization to perform action 'Microsoft.DataFactory/datafactories/datapipelines/read' over scope - Stack Overflow

Microsoft Flow の HTTP アクションにある Active Directory OAuth 認証で Microsoft Graph API を利用する | idea.toString();