はじめに
認証トークン等の情報をハードコーディングすることはセキュリティの観点からよろしくない。
また、認証トークン等の書き換えが発生した場合にハードコーディングしてしまうとコードの修正が必要になってしまう。
それらを防ぐために、Key Vaultsに登録し、Azure Functionsから環境変数として呼び出す方法を記載する。
前提
- Azureアカウントを持っていること
- もしアカウントを持っていない場合は、こちらからアカウント登録
- Azure Functionsにてインスタンスが作成されていること
- 作成していない場合は、こちらの記事を参考に作成
手順
Key Vaultsでシークレットの作成
検索窓に「Key Vaults」と入力する。
サービスに表示される「キー コンテナー」を選択する。
下記項目を入力し、「確認および作成」ボタンをクリックする。
- サブスクリプション: 任意のサブスクリプションを選択
- リソースグループ: 任意のリソースグループを選択(例では「Test20211222」)
- Key Vault名: 任意の名前を入力(例では「Test20211222」)
- 地域: 任意の地域を選択(例では「東日本」)
- 価格レベル: 任意の価格レベルを選択(例では「標準」)
入力内容を確認し、間違いが無ければ「作成」ボタンをクリックする。
デプロイが完了したら、「リソースに移動」ボタンをクリックする。
左のメニューの「設定」→「シークレット」を選択し、「+ 生成/インポート」をクリックする。
シークレットの名前と値(例では、「USERNAME」と「Test」)を入力し、「作成」ボタンをクリックする。
Azure Functionsでシステム割り当てマネージドIDの有効化
左のメニューの「設定」→「ID」を選択し、状態を「オン」にして「保存」ボタンをクリックする。
Key VaultsでAzure Functionsのアクセス許可をする
左のメニューの「設定」→「アクセスポリシー」を選択し、「+ アクセスポリシーの追加」をクリックする。
シークレットのアクセス許可にて「取得」を選択し、プリンシパルにて関数アプリ名(例では「test20211222-1」)を入力して選択し、「選択」ボタンをクリックする。
その後、「追加」ボタンをクリックする。
「現在のアクセスポリシー」の「アプリケーション」に追加されていることが確認できたら、「保存」ボタンをクリックする。
Key Vaultsの値をAzure Functionsの環境変数に設定する
Key Vaults
左のメニューから「設定」→「シークレット」を選択し、登録したシークレットをクリックする。
表示されるシークレット識別子をコピーし、メモ帳等にコピペしておく。
Azure Functions
左のメニューの「設定」→「構成」を選択し、アプリケーション設定において、「+ 新しいアプリケーション設定」をクリックする。
下記内容を入力し、「OK」ボタンをクリックする。
- 名前:任意(例では「USERNAME_KEYVAULTS」)
- 値: @Microsoft.KeyVault(SecretUri=<先程コピペしておいたシークレット識別子>)
ソースが「キー コンテナーの参照」に変わり、緑のチェックマークが付いたのがわかる。
Azure FunctionsからKey Vaultsにシークレット登録したものの値を呼び出してみる
以下の方法で呼び出すことができる
- Node.js: process.env.<アプリケーション設定で登録した名前>
- Python: os.getenv("<アプリケーション設定で登録した名前>")