前回、前々回では
管理対象サービスID で簡単にKeyValutにアクセスする - Azureの小ネタ (改)
開発環境から簡単にKeyValutにアクセスする - Azureの小ネタ (改)
コードベースでKey Vaultにアクセスしましたが、以下のパッケージを使うと構成ファイルから透過的にKey Vaultにアクセスできます。
ただしキーではなくシークレット(SQLの接続文字列なんかを格納)のみです。
設定
こちらもまだPreviewですけど以下をインストールします。
NuGet Gallery | Microsoft.Configuration.ConfigurationBuilders.Azure 1.0.0-preview2
記事を書くときにちょうど2H前に、Preview2がリリースされているという状態でした。にしてもDownload数が少ない。
たまたま、NET4.7.1 じゃないプロジェクト使ってたらとインストールエラーが出たので注意。BaseのほうがNET4.7.1しばりなのかもしれない。Dependencyはないけど。
インストールすると、App.Configが書き換わります。valueName属性をKey Vault名に書き換えます。またappSettingsセクションに適当な定義を行っておきます。
<?xml version="1.0" encoding="utf-8"?> <configuration> <configSections> <section name="configBuilders" type="System.Configuration.ConfigurationBuildersSection, System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" restartOnExternalChanges="false" requirePermission="false"/> </configSections> <configBuilders> <builders> <add name="AzureKeyVault" vaultName="[VaultName]" type="Microsoft.Configuration.ConfigurationBuilders.AzureKeyVaultConfigBuilder, Microsoft.Configuration.ConfigurationBuilders.Azure, Version=1.0.0.0, Culture=neutral"/> </builders> </configBuilders> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.1"/> </startup> <appSettings configBuilders="AzureKeyVault"> <add key="hogesecret" value="FuaFuga" /> </appSettings> </configuration>
シークレット設定
Key Vaultの設定から適当にhogesecret 設定しておきます。
アプリ側
もう普通にConfigurationManagerからとってくるだけで、勝手にKey Vaultへアクセスしています。
var s = ConfigurationManager.AppSettings["hogesecret"]; Debug.WriteLine(s);
上記例は、AppSettingsですが、ConfigurationManager.ConnectionStrings
などでも大丈夫です。デバッグなどの立ち上がりで一瞬引っかかりを感じ(アクセスなどで)ますが、面倒なコード書かなくて済むのは良い感じです。
ちなみに、Key Vault側へのアクセス件はREAD ONLYで問題ないはずですが、ListできないとNGだったきがします。