You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 13:01:13