Azure基本

Azure FunctionsへのアクセスにAPIキーを必須にしてみた

これまでは、Azure Functionsのアクセス権限をAnonymous(匿名)にしていて、APIキーが不要でもアクセスできていたが、関数へのアクセスをより困難にするために、APIキーを必須にすることもできる。

今回は、Azure Functionsのアクセス権限を関数レベルに変更し、ヘッダーにAPIキーを設定してみたので、そのサンプルプログラムを共有する。

前提条件

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

Azure App ServiceからAzure FunctionsにPost送信してみた(ソースコード編)今回も引き続き、Azure App ServiceからPost通信によってAzure Functionsを呼び出す処理の実装について述べ...

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

作成したサンプルプログラム(App Service側)の構成は以下の通り。
サンプルプログラムの構成(AppService)
なお、上記の赤枠は、前提条件のプログラムから追加・変更したプログラムである。

コントローラクラスの内容は以下の通りで、Azure Functionsを呼び出すときのヘッダーに「”x-functions-key”, “Azure FunctionsのAPIキーの値”」の値を追加している。

なお、「Azure FunctionsのAPIキーの値」は、以下に示すような、Azure Portal上、Azure Functionsの「アプリキー」メニュー、ホストキー「default」の値となる。
AzureFunctionsのキー

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



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

作成したサンプルプログラム(Azure Functions側)の構成は以下の通り。
サンプルプログラムの構成(AzureFunctions)
なお、上記の赤枠は、前提条件のプログラムから追加・変更したプログラムである。

<2021年4月13日 追記>
spring-cloud-function-dependenciesのバージョンは、2021年3月16日にリリースしたバージョン3.1.2を利用すると、1つのAzure Functions内に複数のファンクションを含む場合の不具合が解消できている。


その場合、Handlerクラスの継承するクラスを「AzureSpringBootRequestHandler」クラスから「FunctionInvoker」クラスに変更する。


spring-cloud-function-dependenciesの3.1.2を利用した実装サンプルは、以下の記事を参照のこと。

spring-cloud-function-dependenciesのバージョンを最新(3.1.2)にしてみたこれまでこのブログで取り上げてきたAzure Functionsのサンプルプログラムでは、spring-cloud-function-d...

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

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



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

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

1) 前提条件のプログラムからAzure Functionsのみ変更し、Azure上で実行した場合は、以下のように、Azure Functionsの呼び出しが行えないことが確認できる。
サンプルプログラムの実行結果_1_1

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

2) 前提条件のプログラムからAzure Functionsのみ変更し、ローカルで実行した場合は、以下のように、正常に動作することが確認できる。
サンプルプログラムの実行結果_2_1

サンプルプログラムの実行結果_2_2
「FlexClip」はテンプレートとして利用できる動画・画像・音楽などが充実した動画編集ツールだったテンプレートとして利用できるテキスト・動画・画像・音楽など(いずれも著作権フリー)が充実している動画編集ツールの一つに、「FlexCli...

3) 前提条件のプログラムからAzure FunctionsとAzure App Serviceを変更し、Azure上で実行した場合は、以下のように、正常に動作することが確認できる。
サンプルプログラムの実行結果_3_1

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

4) 前提条件のプログラムからAzure FunctionsとAzure App Serviceを変更し、ローカル環境で実行した場合も、以下のように、正常に動作することが確認できる。
サンプルプログラムの実行結果_4_1

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

要点まとめ

  • Azure Functionsのアクセス権限を関数レベルに変更すると、Anonymous(匿名)の場合より、関数へのアクセスを困難にすることができる。
  • Azure Functionsのアクセス権限を関数レベルに変更した場合、Azure Functionsを呼び出す際に、ヘッダーにAPIキーを指定する必要がある。