API Management

API ManagementからAPIキーを用いてAzure Functionsへアクセスしてみた

以前、Azure FunctionsへのアクセスにAPIキーを必須にしてみたことがあったが、このAzure Functionsの呼び出しをAPI Managementを経由して行うこともできる。

今回は、Azure API Managementを経由して、APIキーが必要なAzure Functionsを呼び出してみたので、その手順を共有する。

なお、Azure FunctionsへのアクセスにAPIキーを必須にする対応については、以下の記事を参照のこと。

Azure FunctionsへのアクセスにAPIキーを必須にしてみたこれまでは、Azure Functionsのアクセス権限をAnonymous(匿名)にしていて、APIキーが不要でもアクセスできていたが...

前提条件

下記記事の実装が完了していること。

API Managementのアクセスをサブスクリプション必須にしてみたAzure API Managementを経由してAzure Functionsを呼び出す際、サブスクリプションの指定をしないと、Azu...

また、以下の記事のPostmanをインストール済であること。

POSTメソッドでリクエストされるAzure FunctionsのAPIをPostmanによって呼び出してみたAzure App Serviceを利用せずに、HTTPトリガーによって呼び出されるAzure Functionsの動作確認を行うには、...

やってみたこと

  1. 作成したサンプルプログラム(Azure Functions側)の内容
  2. Azure環境でのAzure FunctionsのAPI呼出し
  3. サンプルプログラムの実行結果

作成したサンプルプログラム(Azure Functions側)の内容

作成したサンプルプログラム(Azure Functions側)の構成は以下の通り。
サンプルプログラムの構成(AzureFunctions)
なお、上記の赤枠は、前提条件のプログラムから変更したプログラムである。また、App Service側のソースコードは修正していない。

ハンドラークラスの内容は以下の通りで、権限レベル(authLevel )をANONYMOUSからFUNCTIONに変更している。

その他のソースコード内容は、以下のサイトを参照のこと。
https://github.com/purin-it/azure/tree/master/api-management-api-key-functions/demoAzureFunc

また、ソースコードを修正後、Azure上にデプロイする。なお、Azure Functionsにデプロイする過程は、以下の記事の「Azure FunctionsへのSpring Bootを利用したJavaアプリケーションのデプロイ」を参照のこと。

Azure Functions上でSpring Bootを利用したJavaアプリケーションを作成してみた前回は、Azure Potal上でAzure Functionsを作成してみたが、今回は、前回作成したAzure FunctionsにS...



Azure環境でのAzure FunctionsのAPI呼出し

Postmanを利用して、Azure環境でのAzure FunctionsやAPI ManagementのAPIを呼び出した結果は、以下の通り。

1) 以下のように、Headerにx-functions-keyの値を指定しないでAzure環境でのAzure FunctionsのAPIを呼び出すと、401エラーが発生する。
APIの呼出_1_1

なお、このとき指定するAPIの「https://azurefuncdemoapp.azurewebsites.net」の部分は、Azure Portal上のAzure FunctionsのURLから確認できる。
APIの呼出_1_2

2) 以下のように、Headerにx-functions-keyの値を指定してAzure環境でのAzure FunctionsのAPIを呼び出すと、正常にレスポンスが返ることが確認できる。
APIの呼出_2_1

なお、このときのx-functions-keyに指定する値は、以下の画面から確認できる。
APIの呼出_2_2

また、リクエストボディには、paramの値を指定している。
APIの呼出_2_3

3) HeaderにOcp-Apim-Subscription-Keyの値を指定して 、Azure環境でAPI Management経由でAzure FunctionsのAPIを呼び出すと、正常にレスポンスが返ることが確認できる。なお、Ocp-Apim-Subscription-Keyの値については、前提条件の記事と同じ指定をしている。
APIの呼出_3_1

なお、このときのOcp-Apim-Subscription-Keyの値は、以下の画面の主キーを表示することによって確認できる。
APIの呼出_3_2

また、指定するAPIの「https://azureapipurinit.azure-api.net/azureFuncDemoApp」の部分は、Azure Portal上のAPI Managementの「Base URL」から確認できる。
APIの呼出_3_3

さらに、リクエストボディには、Azure FunctionsのAPI呼出時と同じように、paramの値を指定している。
APIの呼出_3_4

4) Azure環境でAPI Management経由でAzure FunctionsのAPIを呼び出す際、前提条件の記事と同じ指定で正常にレスポンスが返却される背景としては、API Management上に追加した「callFunctionApi」APIで、「set-backend-service」ポリシーが追加されているためである。
APIの呼出_4_1

なお、「set-backend-service」ポリシーについては、以下のサイトを参照のこと。
https://docs.microsoft.com/ja-jp/azure/api-management/api-management-transformation-policies#SetBackendService



サンプルプログラムの実行結果

修正したサンプルプログラムの実行結果は、以下の通り。

1) Azure App ServiceのURL「https://azureappdemoservice.azurewebsites.net/」とアクセスすると以下の画面が表示されるため、「ファンクション呼び出し」ボタンを押下する。
サンプルプログラムの実行結果_1_1

なお、上記URLは、下記Azure App ServiceのURLから確認できる。
サンプルプログラムの実行結果_1_22

2) callFunctionApi関数が呼び出され、以下の画面に遷移する。その後「戻る」ボタンを押下する。
サンプルプログラムの実行結果_2

3) 以下のように、初期表示画面に戻ることが確認できる。
サンプルプログラムの実行結果_31

要点まとめ

  • Azure API Managementを経由して、APIキーが必要なAzure Functionsを呼び出すことができる。このとき、API Managementの設定変更は不要である。