0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Azure Functionsで作成した関数のHttpTriggerエンドポイントを保護する

Posted at

作成した関数のエンドポイントを簡易的に保護する方法になります。

公式Doc👉関数のアクセスキー

HttpTriggerのAzure関数を追加する

VisualStudio上で追加したいディレクトリで右クリック → [追加] → [新しいAzure関数]
Triggerの選択画面がでるので、Http Trigerを選択します。
デフォルトで作られる関数はおそらく👇こんな感じです。(既に保護していた場合はuthorizationLevel.Annonymousの箇所がFunctionだったりAdminになってるかもです)

 public static class Function1
    {
        [FunctionName("Function1")]
        public static async Task<IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Annonymous, "get", "post", Route = null)] HttpRequest req,
            ILogger log)
        {
            log.LogInformation("C# HTTP trigger function processed a request.");

            string name = req.Query["name"];

            string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
            dynamic data = JsonConvert.DeserializeObject(requestBody);
            name = name ?? data?.name;

            string responseMessage = string.IsNullOrEmpty(name)
                ? "This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response."
                : $"Hello, {name}. This HTTP triggered function executed successfully.";

            return new OkObjectResult(responseMessage);
        }

この状態でAzure Functionsへデプロイするとどうなる?

デプロイはできます。この関数のURLを叩くと、動いてくれます。
しかし、認証等ないのでこの関数のURLを知ってしまえば誰でも使えてしまいます。
ですので、URLが特定されづらいものにしたほうがよりセキュアなものになります。

関数のURLを特定しづらいものにするには?

先程、関数を追加したときのデフォルトのコードを見ると、「AuthorizationLevel.Annonymous」というものがあります。
こちらのAnnonymousを「Function」or「Admin」などに変えてあげてください。

[HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] 

変えた後、再度デプロイします。
再度、関数のURLを叩くと401となるのが確認できるかと思います。(local実行ではおそらく確認できないので再デプロイして試してください。)
これを設定してあげると、リクエストするときに関数のURLの他に関数キーが必要になります。
Portal上の👇の画面の[コードとテスト]から[関数のURLの取得]でParameterに関数キーがくっついた状態で取得できると思いますので、その状態でリクエストすると認証は通るかと思います。
image.png

この関数キーはデプロイすると自動で作成してくれるので自分で作成する必要はとくにありません。
再デプロイしてもキーが変わることもないです。

関数キーの確認・変更

関数キーはPortal上から関数に飛んで、[関数キー]という項目を押すと確認できます。
image.png

もし関数キーが漏洩してしまった場合はコチラから再度変更できます。
各関数ごとに違う関数キーも付けることができるのでお試しください。

注意

今回の方法でどこかしらでこの関数のURLを指定していた場合(例えばフロントエンドなど)、
URLは漏洩してしまうので、そこらへんは考慮が必要になります。

まとめ

特に関数のURLが公開されてないのであれば関数キーを使った方法は、十分セキュアなのかなと思います。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?