Logic AppsからEasy Auth構成済みFunctionsにHTTPリクエストを送りたい

このエントリは2026/02/10現在の情報に基づいています。将来の機能追加や変更に伴い、記載事項からの乖離が発生する可能性があります。

問い合わせ

お初の人から以下のような問い合わせが届いた。

現在Logic AppsからFunctionsを呼び出すために(Functionsコネクターではなく)HTTPコネクターを使っている。呼び出し元を制限したいのだが、どうすればよいか?設定自体は通常のREST API呼び出しと同様に構成すればいいことは理解しており、所属するEntra IDテナントの任意のID、任意のクライアントアプリケーションからのアクセスであれば動作することは確認済みである。Logic AppsではSystem Assigned Managed Identityを使っているので、このManaged Identityを使って制限したい。

呼び出し元が同一Entra IDテナントであることがわかればOK、というのであれば、自テナントの任意のクライアントアプリ、任意のIDからだけ許可すればよい。とはいえ実際には呼び出し元を制限するのがふつうなので、どうしたらよいか、という問い合わせである。

この主があえてHTTPコネクターを使っているのは、同一Entra IDの別サブスクリプション上にあるFunctionsを呼び出す場合、Logic Appsのコネクターの制限で呼び出したいFunctionsを指定できないため、だそうな。

ふつうなら

Easy Authだけで完結させたいなら、クライアントアプリケーション、IDの要件を設定すればよい。この問い合わせ主の例ではSystem Assigned Managed Identityの情報を追加する。

ラベル設定
Client application requirement
(クライアントアプリケーションの要件)
Allow requests from specific client applications(特定のクライアント アプリケーションからの要求を許可する)を選択し、System assigned managed identityのApplication (client) IDを指定
Identity requirement
(ID の要件)
Allow requests from specific identities(特定のIDを許可する)を選択し、System assigned managed identityのPrincipal ID (Object ID) を指定

Azure CLIで取得するなら以下のような感じ。

# Principal ID
PRINCIPAL_ID=$(az resource show -g <Resource Group> \
-n <LogicApp name> \
--resource-type Microsoft.Logic/workflows \
--query identity.principalId -o tsv)
# Principal IDからApp IDを取得
az ad sp show --id "$PRINCIPAL_ID" --query appId -o tsv

もう一つの方法

Easy Authだけで管理してもいいのだが、呼び出し元が多くなると管理が面倒である。Entra IDで特定のアプリケーションからの呼び出しのみを許可する方法もあるので、そちらも紹介しておいた。

1. Easy Authの設定

Easy Auth 側は、Entra IDのみ自テナントのみに制限、その他の「任意」にする。

設定項目設定値
Client application requirement
(クライアントアプリケーションの要件)
Allow requests from any application(任意のアプリケーションからの要求を許可する)を選択
Identity requirement
(ID の要件)
Allow requests from any identity(任意のIDを許可する)を選択

2. Entra IDの設定

(1) アプリ登録 > Functions のアプリを選択

(2)【ローカルディレクトリのマネージド アプリケーション】をクリック

    (3) エンタープライズアプリケーションに遷移するので、管理 > プロパティ で【割り当てが必要ですか?】を「はい」に変更

    (4) Easy Authを構成したFunctionsを呼び出せるLogic Appsを設定する。Portalからは追加できないようなので、以下のAzure CLIもしくはREST APIを使う。今回はDefaultのAppRoleを使っているが、カスタムのAppRoleを定義しているなら、当該AppRoleのIDを使う必要がある。

    # Functions' Object ID
    SP_ID="<Functions' Object ID appeared in Enterprise App>"
    # Object ID retrieved from Managed Identity asssigned to Logic Apps
    MI_ID="<Object ID retrieved from Managed Identity asssigned to Logic Apps>"
    # Default AppRole ID (Default Access)
    ROLE_ID="00000000-0000-0000-0000-000000000000"
    # Azure CLI
    az ad sp app-role-assignment add \
    --assignee-object-id "$MI_ID" \
    --assignee-principal-type ServicePrincipal \
    --resource-id "$SP_ID" \
    --app-role-id "$ROLE_ID"
    # invoke REST API
    az rest --method POST \
    --uri "https://graph.microsoft.com/v1.0/servicePrincipals/$SP_ID/appRoleAssignments" \
    --body "{
    \"principalId\": \"$MI_ID\",
    \"resourceId\": \"$SP_ID\",
    \"appRoleId\": \"$ROLE_ID\"
    }"

    Logic Apps HTTPコネクターの構成

    いずれの方式をとったとしても同じ。重要なのは、Advanced parameters(詳細パラメーター)でAuthenticationを選択し、以下のように構成する点。

    設定項目設定値
    Authentication typeManaged Identity
    Managed Identity(マネージドID)Logic Appsに割り当てたManaged Identity(今回だとSystem assigned managed identity)
    AudienceFunctionsのAPI ID (スコープは付けない)
    【例】api://012e34ef-c567-890e-1fc2-fc34567bfd8d

    両方式の違い

    それぞれ観点が違うので、ニーズに合わせて選択する必要があるが、大まかにいうと、Easy Authだけで管理するのは小規模な場合で、呼び出し元の個数が増えるならEntra IDに管理を任せるのが推奨。

    観点Easy Auth で制御Entra ID (割り当て必須) で制御
    設定場所Functions の認証ブレードEntra ID エンタープライズ アプリ
    制御の粒度appId + テナント単位appRoleAssignment 単位
    複数クライアントの追加UI で appId を列挙ロール割り当てを追加
    監査ログApp Service ログEntra ID サインインログ
    IaC管理ARM/Bicep: authsettingsV2Microsoft Graph API

    コメントを残す

    このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください