Azureの小ネタ (改)

~Azureネタを中心に、色々とその他の技術的なことなどを~

構成ファイルから透過的にKey Vaultへアクセス

前回、前々回では

管理対象サービスID で簡単にKeyValutにアクセスする - Azureの小ネタ (改)

開発環境から簡単にKeyValutにアクセスする - Azureの小ネタ (改)

コードベースでKey Vaultにアクセスしましたが、以下のパッケージを使うと構成ファイルから透過的にKey Vaultにアクセスできます。

ただしキーではなくシークレット(SQLの接続文字列なんかを格納)のみです。

設定

こちらもまだPreviewですけど以下をインストールします。

NuGet Gallery | Microsoft.Configuration.ConfigurationBuilders.Azure 1.0.0-preview2

記事を書くときにちょうど2H前に、Preview2がリリースされているという状態でした。にしてもDownload数が少ない。

f:id:StateMachine:20180310115624p:plain

たまたま、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 設定しておきます。

f:id:StateMachine:20180310121320p:plain

アプリ側

もう普通にConfigurationManagerからとってくるだけで、勝手にKey Vaultへアクセスしています。

  var s = ConfigurationManager.AppSettings["hogesecret"];
  Debug.WriteLine(s);

上記例は、AppSettingsですが、ConfigurationManager.ConnectionStrings などでも大丈夫です。デバッグなどの立ち上がりで一瞬引っかかりを感じ(アクセスなどで)ますが、面倒なコード書かなくて済むのは良い感じです。

ちなみに、Key Vault側へのアクセス件はREAD ONLYで問題ないはずですが、ListできないとNGだったきがします。