2026年4月4日土曜日

【Azure】接続文字列をコードに書かない!App Service環境変数とKey Vaultの使い分け

 

はじめに

AzureでWebアプリを開発している際、DBの接続文字列やAPIキーなどの「機密情報」をどう扱うべきか悩んだことはありませんか?

「ソースコードに直書きするのはNG」というのは共通認識ですが、いざAzureで管理しようとすると「App Serviceの環境変数(構成)」と「Azure Key Vault」のどちらを使うべきか、その境界線が分かりにくいものです。

今回は、私が実際に開発で「Key Vaultを使いたかったけれど、結局環境変数で対応した」という経験をベースに、それぞれの違いと使い分けのポイントを整理しました。

なぜソースコードに「機密情報」を書いてはいけないのか?

まず大前提として、パスワードや接続文字列をソースコードや appsettings.json にハードコーディングしてはいけません。

• GitHubなどのリポジトリ経由で漏洩するリスク

• 環境(開発・本番)ごとの切り替えが困難になる

この対策として、Azureには主に2つの逃げ道があります。

1. App Serviceの「環境変数(構成)」による管理

今回私が採用したのが、Azure App Serviceのメニューにある「構成(環境変数)」に値を設定する方法です。

メリット

• 設定が非常に簡単: Azureポータルからポチポチ入力するだけで即反映されます。

• コードの修正が最小限: .NETであれば Configuration["Key名"] で読み取る標準的な手法がそのまま使えます。

デメリット

• 閲覧権限の問題: Azureポータルの該当リソースにアクセスできる人なら、誰でも値が見えてしまいます。

• 共有ができない: 別のApp ServiceやFunctionsでも同じ値を使いたい場合、それぞれにコピーする必要があります。

2. Azure Key Vaultによる管理

本来、より高いセキュリティを求めるならこちらが本命です。

メリット

• 最高レベルの機密性: 値そのものを隠蔽でき、誰がいつアクセスしたかのログも残ります。

• 一元管理: 複数のサービスで一つのパスワードを使い回す場合、Key Vault側を更新するだけで全サービスに反映されます。

デメリット

• 設定のハードル: 「マネージドID(Managed Identity)」の設定や、アクセス権限(RBAC)の付与など、初見では少し難解な概念が登場します。

結局、どう使い分けるのが正解?

結論から言うと、以下のような基準で使い分けるのがスムーズです。


• App Serviceの環境変数(構成)で管理すべきもの

• アプリの動作設定(例:ログレベル、デバッグモードのON/OFF)

• 頻繁に変更する非機密なパラメータ(例:表示件数の上限、外部APIのベースURL)

• Azure Key Vaultで管理すべきもの

• 機密情報(例:データベースの接続パスワード、外部サービスのAPIキー)

• 証明書や暗号化キー(例:SSL証明書、署名用秘密鍵)

【Tips】「とりあえず動かす」から「理想」へのステップアップ

もし私のように「Key Vaultは難しそうで、今回は環境変数で済ませた」という場合でも、実は「Key Vault参照」という機能を使えば、後から簡単に移行できます。

App Serviceの環境変数に、直接値を入れるのではなく以下のような形式で記述します。

@Microsoft.KeyVault(SecretUri=https://myvault.vault.azure.net/secrets/mysecret/)

これなら、アプリのコードは1行も変えずに、裏側の保存先だけをKey Vaultに格上げすることができるのです。

まとめ:まずは「外に出す」ことが第一歩

Azure開発において、「Key Vaultを使いこなせなかった」というのは決して失敗ではありません。「ソースコードから機密情報を追い出した」という時点で、セキュリティレベルは大きく向上しているからです。

1. まずはApp Serviceの環境変数で「外出し」に慣れる。

2. 余裕が出てきたら「Key Vault参照」に挑戦してみる。

このステップで進めるのが、挫折しないAzure運用のコツだと感じました。