Azure-sdk-for-java: [BUG] KeyVaultPropertySource Class / getPropertyNamesメソッドは、キーボールト内のすべてのシークレット(無効化シークレットを含む)をロードします

作成日 2020年08月13日  ·  10コメント  ·  ソース: Azure/azure-sdk-for-java

バグを説明する
現在、キーボールトはデフォルトでソフト削除機能を有効にします。 証明書を作成/削除すると、無効になっているシークレットが読み込まれるため、Javeアプリがクラッシュします。
KeyVaultPropertySourceクラスは、KeyVault内のすべてのシークレットをロードします。 getPropertyNamesメソッドで無効なシークレットをロードしないでください
ちなみに、回避策は証明書を削除します。 ただし、ソフト削除されたシークレットをロードする要求がないため、SDK部分でさらに改善される可能性があります

例外またはスタックトレース
可能な場合は、例外ログとスタックトレースを追加します

再現するには
動作を再現する手順:
A. KeyVault証明書(シークレットではない)を作成し、Javaアプリケーションがクラッシュした後に証明書を削除しました。
C.証明書は、新しい証明書を作成するときに自動的に秘密識別子を作成します
D.証明書を削除した後、Azureシステムは秘密識別子を無効にします
E.その場合、Javaアプリケーションは実行時にDISABLEDシークレットを読み取ろうとします
私。 そして、Javaアプリがクラッシュしました。
ライブラリはcom.microsoftです。 azure:azure-keyvault :1.2.2
コードスニペット
問題の原因となるコードスニペットを追加します。

@Value( "$ {cluster-app-sb-connection-string}")
文字列connectionString;
@Value( "$ {cluster-app.sb.topic-name}")
文字列topicName;
予想される行動
何が起こると予想したかについての明確で簡潔な説明。

スクリーンショット
該当する場合は、問題の説明に役立つスクリーンショットを追加してください。

セットアップ(次の情報を入力してください):

  • OS:[例:iOS]
  • IDE:[例:IntelliJ]
  • 使用したライブラリのバージョン

追加のコンテキスト
ここに問題に関する他のコンテキストを追加します。

情報チェックリスト
上記のすべての情報を追加したことを確認し、必須フィールドをチェックしてください。そうしないと、発行者は不完全なレポートとして扱われます。

  • [x]バグの説明が追加されました
  • []再現手順が追加されました
  • []セットアップ情報が追加されました
Client azure-spring azure-spring-keyvault customer-reported question

最も参考になるコメント

この問題は、Key VaultSecretsのSpringBootスターターがどのように機能するかによって発生します。 無効にされたシークレットはフィルタリングしませんでした。 今私は問題を解決するためにPRを作成します

全てのコメント10件

@ TonySh127-msキーボールトスターターまたはSDKを直接使用していますか?

@ TonySh127-msオフラインで議論され、顧客はkeyvaultにspring-boot-starterを使用しました。 新しいSDKがこの種の問題を解決するかどうかをSDK側から確認する必要があります。

@AlexGhiondea @ vcolin7フォローアップしていただけますか?

@joshfreeと@saraglunaに感謝します。 @AlexGhiondea@ vcolin7からの更新を待っています。 短期的に解決できない場合はお知らせください。 クライアント側に説明できます。 よろしくお願いします!

こんにちは@ TonySh127-ms、

この問題を調査したところ、次のことがわかりました。お客様に表示される動作は、Key VaultSecretsのSpringBootスターターがどのように機能するかによって発生します。 基本的に、このスターターを使用するSpringアプリケーションが実行されるたびに、/ secretsエンドポイントを呼び出すことにより、特定のボールト内の既存のすべてのシークレットの名前が取得されます。必要に応じて、特定のシークレットの詳細を取得します。 これはKeyVaultサービスやSDKの問題ではなく、SpringBootスターターのコーディング方法の結果です。

短期的な解決策は、Spring Bootスターターを使用するのではなく、Key VaultSDK自体を直接使用することです。 このようにして、顧客は、ロードされるシークレットと、アプリケーションのライフサイクル中のタイミングをより詳細に制御できます。

さらに、ボールトで証明書を作成および削除しただけでは、アプリケーションがあまりにも多くのシークレットをロードしてクラッシュしたケースを再現できませんでした。 このようなことを行うには、顧客からのより多くの情報が必要になります。これを再現できるバージョンやサンプルコードなど、プロジェクトで使用する依存関係です。

@ vcolin7有効なシークレットのみをロードするオプションをSDKに渡すことができますか? Spring統合で無効化されたシークレットをロードするべきではないようです。

@saragluna残念ながら、有効なシークレットのみを提供するためにサービスを渡すことができるパラメーターはありません:/

この問題は、Key VaultSecretsのSpringBootスターターがどのように機能するかによって発生します。 無効にされたシークレットはフィルタリングしませんでした。 今私は問題を解決するためにPRを作成します

@ TonySh127-ms
私たちは開発パッケージを構築し
このページに従って、開発パッケージをダウンロードして

こんにちはチーム、問題は修正されたことが確認されました。 これでこのスレッドを閉じることができます。 皆さんの多大な努力と時間に感謝します!!!

このページは役に立ちましたか?
0 / 5 - 0 評価