描述错误
当前,密钥库默认情况下启用软删除功能。 如果创建/删除该证书,将导致Jave应用程序崩溃,因为它加载了禁用的机密。
KeyVaultPropertySource类将所有机密加载到KeyVault中。 它不应在getPropertyNames方法中加载禁用的机密
顺便说一句,解决方法是清除证书。 但它仍然可以在SDK方面更好地改进它,因为没有请求加载软删除的机密
异常或堆栈跟踪
添加异常日志和堆栈跟踪(如果有)
重现
重现行为的步骤:
A.在Java应用程序崩溃后,创建了KeyVault证书(不是秘密)并删除了证书。
C.证书在创建新证书时自动创建秘密标识符
D.删除证书后,Azure系统禁用机密标识符
E.在那种情况下,Java应用程序尝试在运行时读取DISABLED秘密
一世。 然后,Java应用程序崩溃了。
该库是com.microsoft。 天蓝色:天蓝色钥匙:1.2.2
程式码片段
添加导致该问题的代码段。
@Value(“ $ {cluster-app-sb-connection-string}”)
字符串connectionString;
@Value(“ $ {cluster-app.sb.topic-name}”)
字符串topicName;
预期行为
对您期望发生的事情的简洁明了的描述。
屏幕截图
如果适用,请添加屏幕截图以帮助解释您的问题。
设置(请完成以下信息):
额外的背景
在此处添加有关该问题的任何其他上下文。
信息清单
请确保您已添加以上所有以下信息,并选中必填字段,否则我们会将发行人视为不完整的报告
@ TonySh127-ms您是直接使用密钥库启动器还是sdk?
与@ TonySh127-ms脱机讨论,客户使用spring-boot-starter进行密钥保险。 需要从SDK方面确认新的SDK是否可以解决此类问题。
@AlexGhiondea @ vcolin7您能跟进吗?
谢谢@joshfree和@saragluna。 正在等待@AlexGhiondea和@ vcolin7的更新。 请让我知道它是否不能在短期内解决。 我可以向客户端解释。 非常感谢您的宝贵时间!
嗨@ TonySh127-ms,
我花了一些时间研究此问题,并发现了以下问题:客户看到的行为是由Key Vault Secrets的Spring Boot启动程序如何工作引起的。 基本上,每当运行使用该启动程序的Spring应用程序时,它将通过调用/ secrets端点获取给定保管库中所有现有秘密的名称,该端点将加载所有启用和禁用的秘密(而不是已删除的秘密),然后该应用程序将如果需要,检索特定机密的详细信息。 Key Vault服务或SDK并不是问题,而仅仅是Spring Boot启动程序编码方式的结果。
短期解决方案是不使用Spring Boot启动器,而是直接使用Key Vault SDK本身。 这样,客户将可以更好地控制在应用程序生命周期中加载哪些机密以及何时加载。
此外,我无法重现仅通过在保管库中创建和删除证书而导致应用程序由于加载太多机密而崩溃的情况。 为了执行这样的操作,我需要从客户那里获得更多信息:他们在项目中使用了哪些依赖项,包括可以在其中复制的版本和示例代码。
@ vcolin7是否有一个选项可以传递给仅加载已启用机密的SDK? 似乎我们不应该在Spring集成中加载禁用的机密。
@saragluna不幸的是,没有参数,我们可以通过该服务传递给它仅提供给我们启用的机密:/
该问题是由Key Vault Secrets的Spring Boot启动器如何工作引起的。 我们没有过滤禁用的机密。 现在我创建一个PR来解决问题
嗨,团队,问题已得到解决。 我们现在可以关闭该线程。 非常感谢大家的努力和时间!!!
最有用的评论
该问题是由Key Vault Secrets的Spring Boot启动器如何工作引起的。 我们没有过滤禁用的机密。 现在我创建一个PR来解决问题