如何使用C#以编程方式启用Azure Key Vault机密?
解决Azure Key Vault机密启用时的"Version不能为null"错误
问题原因
启用机密时你使用GetPropertiesOfSecretsAsync获取的SecretProperties对象不包含具体版本号,而UpdateSecretProperties方法要求针对机密的特定版本执行操作,因此触发"Version不能为null"的错误。而禁用操作能成功,是因为GetSecretAsync返回的KeyVaultSecret包含了完整的版本信息。
修正后的代码方案
方案1:直接获取目标机密的最新版本进行启用
// 启用指定机密的正确逻辑 Azure.Response<KeyVaultSecret> secretResponse = await _client.GetSecretAsync(secretName, version: null, cancellationToken); KeyVaultSecret secretToEnable = secretResponse.Value; // 设置启用状态 secretToEnable.Properties.Enabled = true; // 提交属性更新 await _client.UpdateSecretPropertiesAsync(secretToEnable.Properties, cancellationToken);
方案2:遍历机密列表后启用(适用于必须遍历的场景)
如果业务逻辑需要先遍历所有机密再找到目标,需在匹配后额外获取该机密的完整版本信息:
AsyncPageable<SecretProperties> secretPropertiesCollection = _client.GetPropertiesOfSecretsAsync(cancellationToken); await foreach (SecretProperties secretProperties in secretPropertiesCollection) { if (secretProperties.Name.Equals(secretName, StringComparison.OrdinalIgnoreCase)) { // 获取该机密的最新版本完整信息 var secretResponse = await _client.GetSecretAsync(secretProperties.Name, version: null, cancellationToken); var targetSecret = secretResponse.Value; targetSecret.Properties.Enabled = true; await _client.UpdateSecretPropertiesAsync(targetSecret.Properties, cancellationToken); return; } }
补充说明
GetPropertiesOfSecretsAsync仅用于批量获取Key Vault中所有机密的基础元数据(如名称、创建时间),不会返回具体版本的完整属性,因此其返回的SecretProperties对象的Version字段为null,无法直接用于更新操作。- 所有机密属性的修改操作(启用/禁用、设置过期时间等)都必须针对特定版本的机密,因此必须通过
GetSecretAsync获取包含版本信息的KeyVaultSecret对象,再修改其Properties并提交更新。
内容的提问来源于stack exchange,提问作者Sandy
相关产品推荐
相关产品推荐

