この記事は Microsoft Azure Advent Calendar 2018 9日目の記事です。
Azure で好きなサービスは App Service です。
嬉しい機能追加のニュースが入ってきました。
Simplifying security for serverless and web apps with Azure Functions and App Service
Key Vault に保存した情報を App Service の環境変数から簡単に取り出せる仕組みができました。
動作や設定方法を簡単に確認します。
App Service の設定その1
App Service の Windows 版の場合は GUI で設定可能です。
ここでは App Service を Azure Active Directory にアプリケーション登録します。
Linux 版の場合も ドキュメント を読むと GUI で設定できそうでしたが、ポータルのUIが設定できなかったので Azure CLI で設定します。
Cloud Shell を開いてサクッと以下のコマンドを動かします。
az webapp identity assign --name myApp --resource-group myResourceGroup
Key Vault の設定
今回はシークレットを利用します。
Key Vault を開き、シークレット DbPassword
を作成します。
シークレットを作成すると URI ができます。
この Secret Identifier URI は後で使うのでどこかにコピーしておきます。
次にアクセスポリシーを設定します。
Active Directory に登録した App Service をここで設定します。
アクセス権限については、今回はシークレットの読み込みだけなので、Get だけあれば動きます。
これで Key Vault の設定は終わりです。
App Service の設定その2
環境変数からの読み込みを App Settings で設定します。
以下のフォーマットを Value に設定します。
@Microsoft.KeyVault(SecretUri=https://myvault.vault.azure.net/secrets/mysecret/ec96f02080254f109c51a1f14cdb1931)
SecretUri
については Key Vault でコピーしておいた文字を入力しましょう。
設定は以上です。
設定がうまくいっていれば値が無事取得できます。
アクセス権が設定できていなかったり、取得に失敗した場合は以下のように、設定したとおりの値になります。
当然、みんな大好き Kudu でも読み出されたシークレットを確認できます。
あとがき
この機能は App Service 起動時に読み出し、環境変数に展開しているようです。
というのも、起動後に KeyVault 上のアクセスポリシーを削除してもアプリケーションが値を取得可能だったことからこれに至ります。
そのため、リクエスト毎取得するアプリケーション側の実装するよりもパフォーマンスへの影響を少なくできます。
また、アプリケーションの言語に依存せずに機能を利用できるのがありがたいですね。