はじめに
Power Platform APIを利用することでPower Platformの環境の操作を行うことができます。
こちらのAPIを元にして作成されているのが「Power Platform for Admins V2 (Preview)」コネクタとなります。
しかしこちらのコネクタのアクション、追加されたばかりのものは特になんですが、いくつかのアクションは正常に動かないんですよね。。。
ということで今回はPower Platform APIを実行するための準備をまとめていきます。
参考
こちらの公式ドキュメントを参考に行います。
認証情報を作成する
アプリ登録を行う
Microsoft Entra アプリの登録のページに移動します。
続いてアプリの登録を行います。
API のアクセス許可の設定
管理 > API のアクセス許可 より アクセス許可の追加 を選択してAPIのアクセス許可を追加します。
所属する組織で仕様しているAPI より、自分の組織が使用するAPIから「Power Platform API」で検索を掛けます。
検索に引っかからなかった場合や、複数の検索結果が表示された場合はGUID「8578e004-a5c6-46e7-913e-12f58912df43」で検索を掛けます。
GUIDで検索をかけても引っかからなかった場合は画面右上にある Cloud Shell を選択してPowerShellの実行を行います。
#Install the Microsoft Entra the module Install-Module AzureAD Connect-AzureAD New-AzureADServicePrincipal -AppId 8578e004-a5c6-46e7-913e-12f58912df43 -DisplayName "Power Platform API"
実行後ブラウザの再読み込みを行うと「Power Platform API」が表示されますので選択します。
その後必要なアクセス許可を選択してアクセス許可の追加を行います。
パブリッククライアントの構成(オプション)
アプリでユーザーの代わりにリソースの読み取りと書き込みを行う必要がある場合は、パブリック クライアント設定を有効にする必要があります。 これが、Microsoft Entra ID がトークンの要求の本文でユーザー名とパスワードのプロパティを受け入れる唯一の方法です。 また、この機能を使用する場合は、多要素認証が有効になっているアカウントでは機能しないことに注意してください。
上記設定が必要な場合は、 管理 > 認証 より、「パブリック クライアント フローを許可する」にて「はい」を選択します。
この機能を利用するには MFA が有効になっていないアカウントを利用する必要があるので注意してください。
この設定は必須ではありません。
証明書とシークレットの構成(オプション)
サービスプリンシパルを構成する必要がある場合は、 管理 > 証明書とシークレット より、証明書をアップロードするか、クライアントシークレットの生成を行います。
この設定は必須ではありません。
アクセストークンの要求
ユーザー名とパスワードで要求
Postman などを用いて HTTP 経由で Microsoft Entra ID に POST 要求を送信します。
これを実施するには「パブリッククライアントの構成」を行う必要があります。
また前述の通り MFA なしアカウントでを利用する必要がある点に注意してください。
Content-Type: application/x-www-form-urlencoded Host: login.microsoftonline.com Accept: application/json POST https://login.microsoftonline.com/YOUR_TENANT.COM/oauth2/v2.0/token BODY: client_id={CLIENT_ID_FROM_AZURE_CLIENT_APP}&scope=https://api.powerplatform.com/.default&username={USER_EMAIL_ADDRESS}&password={PASSWORD}&grant_type=password
YOUR_TENANT.COM
の箇所は自身のテナントのドメインに置き換えます。
自身のドメインは https://entra.microsoft.com/#view/Microsoft_AAD_IAM/TenantOverview.ReactView で確認することができます。
{CLIENT_ID_FROM_AZURE_CLIENT_APP}
は登録したアプリの概要ページにある アプリケーション (クライアント) ID を設定します。
{USER_EMAIL_ADDRESS}
は利用するユーザーアカウント(MFA なし)の Email アドレスを入力します。
{PASSWORD}
は利用するユーザーアカウント(MFA なし)のパスワードを入力します。
設定に間違いがなければ以下のような結果が返ってきます。
{ "token_type": "Bearer", "scope": "https://api.powerplatform.com/AppManagement.ApplicationPackages.Install https://api.powerplatform.com/AppManagement.ApplicationPackages.Read https://api.powerplatform.com/.default", "expires_in": 4747, "ext_expires_in": 4747, "access_token": "eyJ0eXAiOiJKV1QiLCJu..." }
"scope" には自身が許可した API アクセス許可が表示されます。
Power Platform API への後続の呼び出しでは、認証 HTTP ヘッダーを使用して、access_token 値を使用します。
サービスプリンシパルで要求
Postman などを用いて HTTP 経由で Microsoft Entra ID に POST 要求を送信します。
これを実施するには「証明書とシークレットの構成」を行う必要があります。
Content-Type: application/x-www-form-urlencoded Host: login.microsoftonline.com Accept: application/json POST https://login.microsoftonline.com/YOUR_TENANT.COM/oauth2/v2.0/token BODY: client_id={CLIENT_ID_FROM_AZURE_CLIENT_APP}&scope=https://api.powerplatform.com/.default&client_secret={SECRET_FROM_AZURE_CLIENT_APP}&grant_type=client_credentials
YOUR_TENANT.COM
の箇所は自身のテナントのドメインに置き換えます。
自身のドメインは https://entra.microsoft.com/#view/Microsoft_AAD_IAM/TenantOverview.ReactView で確認することができます。
{CLIENT_ID_FROM_AZURE_CLIENT_APP}
は登録したアプリの概要ページにある アプリケーション (クライアント) ID を設定します。
{SECRET_FROM_AZURE_CLIENT_APP}
は 証明書とシークレット で登録した クライアントシークレット の 値 を設定します。
設定に間違いがなければ以下のような結果が返ってきます。
{ "token_type": "Bearer", "expires_in": 3599, "ext_expires_in": 3599, "access_token": "eyJ0eXAiOi...UBkeW5hbWljc2F4ZGVtby5vbm1pY3Jvc29mdC5jb20iLCJ1dGkiOiI1Q1Fnb25PR0dreWlTc1I2SzR4TEFBIiwidmVyIjoiMS4wIn0.N_oCJiEz2tRU9Ls9nTmbZF914MyU_u7q6bIUJdhXd9AQM2ZK-OijiKtMGfvvVmTYZp4C6sgkxSt0mOGcpmvTSagSRDY92M2__p-pEuKqva5zxXXXmpC-t9lKYDlXRcKq1m5xv-q6buntnLrvZIdd6ReD3n3_pnGAa6OxU0s82f7DqAjSQgXR3hwq_NZOa0quCUN9X-TvpIYrJfVgQfVu0R189hWmUzbYpuoPrUMj2vQI_19gEHz_FryXolM4RMStugYrC0Z72ND5vFlGgvYhZfbWJRC6hGvQQin_eAASmmjLwhRBGMJd6IdbgEXAkFF2rFITFFtFY_4hrN3bvHsveg" }
公式ドキュメントでは "scope" が返ってきているようですが私が試した限り、サービスプリンシパルでは "scope" は返ってきませんでした。(想像になるが理由は後述)
Power Platform API への後続の呼び出しでは、認証 HTTP ヘッダーを使用して、access_token 値を使用します。
ただし、サービスプリンシパルの場合は現在アプリケーションのアクセス許可は使用されないようです。
サービスプリンシパルを用いたリクエストを行いたい場合は、 Power Platform CLI を利用してサービスプリンシパルアプリケーションの作成及び要求を行う必要があります。
Commandlet はこちら。
* 間違えてたらご指摘願います。
Power Platform API を試してみる
環境グループを一覧表示するという簡単な API を用いて実行できるかテストしてみます。
GET https://api.powerplatform.com/environmentmanagement/environmentGroups?api-version=2022-03-01-preview
リクエストを投げてみます。
"Authorization" には アクセストークンの要求 - ユーザー名とパスワードで要求 で取得した Bearer Token を利用します。
無事成功しました!
おわりに
私が勘違いしている可能性もありますが、サービスプリンシパルでも api.powerplatform.com を実行できるようになるといいですね。
そもそも Power Platform for Admins V2 (Preview) コネクタが使えるようになってくれれば解決なんですけどね。