Azure-Key Vaultの接続文字列とアプリケーション設定


8

Azure FunctionsとWebJobsの場合、接続文字列をアプリケーションの設定に直接配置するのではなく、Key Vaultにシークレットとして配置する(およびConfigurationManager.ConnectionStringsを使用して参照する)ことにメリットはありますか?Azure Key Vaultシークレットは、Azure FunctionsやWebJobsではなく、主にVMなどを対象としていますか?

開発(Key Vaultのシークレットとアプリケーション設定のシークレットIDを更新する)と実行時の追加のステップ(Key Vaultからの追加の取得)の両方を追加するだけのようですが、唯一の利点はシークレットです。アプリケーション設定のは、実際のシークレットではなく識別子です。ここにはセキュリティ上の利点はありませんが、不利益があります。


githubのエラープッシュでパブリックデータベース接続文字列を提供するのはとてもクールです:)(本当に理由が必要な場合)
Tensibai

どうなるかわかりません。私はアプリケーション設定に接続文字列があることを話しています。これはクラウドに保存され、コードベースには決して触れません。
匿名1

GUIインタラクションがすべて正常であるようにクラウドで行われる限り、すべてのクラウド構成がコードとして行われる純粋なIaCに移動します。これが1日で発生します。これがボールトを使用する主な理由です。あなたはそれが必要な、それを使用していない見つからない場合は...
Tensibai

ええ、それはシークレットIDがDB接続文字列と同じくらい安全/安全でないように見えるだけです。両方を変更するか、どちらも変更する必要はありません。
匿名1

Hu ..実際には、アプリ設定で参照される「DB_Cx_String」という名前は、「jdbc:// host:port / DBname」よりも問題が少ない例です。
Tensibai 2018年

回答:


9

私が目にするメリットは、Azure Key Vaultを使用する一般的な理由です

  • シークレットは、承認、監査などのオプションとともに中央に保存されます。
  • Azureをスクリプト化して、タイマーでシークレットを更新できます。接続文字列が悪意のあるユーザーに渡された場合、1日(または1週間など)のみ有効です。
  • シークレットが複数のアプリケーション間で共有されている場合は、1か所で更新するだけで済みます(最大の利点ではありませんが、それでも素晴らしいです)

1
Key Vaultは、複数のアプリサーバーが同じシークレットを共有している場合にのみ役立つとおっしゃっているようです。接続文字列が単一のアプリサーバーで使用されている場合、Key Vaultに利点はありません。
John Henckel

3

私もあなたと同じ意見ですが、このようなシナリオでKey Vaultを使用しても意味がありません。

代わりに、Azure App Configuration https://docs.microsoft.com/en-us/azure/azure-app-configuration/overviewを利用します。ここでは、すべてのアプリケーション設定を保存します。そして、実際のapp service / func / webジョブ内に一緒に保存する唯一の文字列は、Azure App Configurationにアクセスするための接続文字列です。

構成設定が適用される私のスタートアップでは、.. settings.jsonから読み取り、存在しない場合(Azureで実行している場合は存在しないはずです)、Azure App Configurationへの接続文字列を探します。

..settings.jsonが見つかった場合は、ローカルで実行していることを意味します。

..settings.jsonがgitignoreファイルにない場合は暗号化されます。

次のようになります。

var appConfigEndpoint = Environment.GetEnvironmentVariable("AppConfigEndpoint");
            var appConfigLabel = Environment.GetEnvironmentVariable("AppConfigLabel");

            if (!string.IsNullOrEmpty(appConfigEndpoint))
            {
                config.AddAzureAppConfiguration(options =>
                {
                    options.Connect(appConfigEndpoint);
                    options.Use(keyFilter: "*", labelFilter: appConfigLabel);
                });
            }
            else
            {
                config.AddJsonFile("appsettings.test.json", optional: false);
            }

私は遅すぎますが、同じ意見を持っている場合は、変更する必要があります。設定(参照)はシークレットを保存するためのものではなく、設定を保存するためのものです。DB接続文字列は設定ではなく秘密です。KeyVaultはシークレットを保存するためのものであり、Configurationは設定を中央のストアに保存するためのものです。それが理にかなっていると思います
RAM

0

キーボルトの取得は、パフォーマンスの問題になる可能性があります。キーコンテナーからの読み取りには数秒かかります。Azure SLA は、99.9%の時間で5秒未満かかると述べています。平均時間を保証するものではありませんが、私の経験と聞き取りによると、平均は約2秒です。

Webアプリが「常にオン」になっていない限り、アイドル状態が5〜20分間続くとアンロードされます。つまり、大量のトラフィックがない限り、サイトの応答時間が頻繁に低下します。


1
ほとんどのアプリケーションシークレットは、アプリケーションの起動時に一度だけ取得できます。
ミロスラフホレック

0

以下を使用する予定です

秘密 - アズールキーボールト

  • Always Encrypted列のマスターキーローテーション
  • 証明書ストア(.NETでプロバイダーを簡単に作成できます)
  • 接続文字列(他のリソース情報を非表示にする)、パスワードなどの機密性の高いアイテム

設定 - Azureのアプリケーションの設定(まだプレビュー中)

  • 監視は、特に運用で使用するためにフラグまたは値を更新する必要がある場合に、サービスを発見するための素晴らしい方法です。
  • コンテナーまたはインスタンスを再起動する必要はありません。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.