ある企業がAzure App ServiceでAPIアプリをホストしており、App Serviceのアプリケーション設定(App Settings)でAPIキーを管理している。セキュリティ審査の結果、APIキーなどのシークレット値をApp Serviceの設定に直接保存することは禁止され、Azure Key Vaultに集中管理するよう求められた。App ServiceからKey Vaultのシークレットを参照する際、最小限のコード変更でシームレスに移行する方法はどれか。
- A. App ServiceにシステムマネージドIDを割り当て、Key Vaultのシークレットに対するアクセス許可を付与した上で、アプリケーション設定の値を @Microsoft.KeyVault(SecretUri=https://...) 形式のKey Vault参照に変更する
- B. Key VaultのシークレットをApp Serviceのアプリケーション設定に定期的にコピーするAzure Functionを作成し、設定を自動同期する
- C. App ServiceとKey Vaultを同一リソースグループに配置すれば、自動的にシークレット共有が有効になる
- D. アプリケーションコード内でAzure SDK(SecretClient)を使ってKey Vaultに直接接続し、シークレットを取得するように書き換える
解答と解説を見る
正解: A
App ServiceのKey Vault参照機能を使うと、アプリケーションコードをほぼ変更せずにKey Vaultのシークレットをアプリケーション設定として参照できる。手順はApp ServiceにシステムマネージドIDを有効化→Key VaultのアクセスポリシーまたはRBAC(Key Vault Secrets User ロール)でそのIDにシークレット読み取り権限を付与→App Serviceのアプリケーション設定値を @Microsoft.KeyVault(SecretUri=https://myvault.vault.azure.net/secrets/MySecret/) 形式に変更する。App Serviceが起動時に自動的にKey Vaultからシークレット値を解決してアプリに環境変数として渡すため、コードは通常の環境変数参照のままでよい。選択肢DはSDKで直接取得する方法も有効だが、コードの変更が必要であり「最小限のコード変更」という要件には選択肢Aが優れる。選択肢BはAzure Functionで同期するアプローチはシークレットが一時的にApp Settingsに平文で存在する期間が生じ、設計の複雑さも増す。選択肢Cは同一リソースグループに配置するだけで自動共有は行われないため完全に誤り。
📚 関連サービスの解説: Azure App Service ・ Azure Key Vault