如何在Azure函数中为Key Vault Secret设置过期属性并解决版本错误?
解决Azure Key Vault创建带过期时间密钥的问题
你不需要分开创建密钥再更新属性,SecretClient提供了重载方法,允许你在创建密钥的同时直接设置属性,一次请求完成操作。
错误原因
你之前使用的UpdateSecretPropertiesAsync是用于修改已存在的密钥版本的属性,必须指定密钥的版本号,所以才会报"Version不能为null"的错误。而你的需求是创建新密钥并设置属性,应该在创建阶段就完成属性配置。
修正后的完整代码
using Azure.Identity; using Azure.Security.KeyVault.Secrets; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.Azure.WebJobs; using Microsoft.Azure.WebJobs.Extensions.Http; using Microsoft.Extensions.Logging; using System; using System.Threading.Tasks; namespace Company.Function { public static class Save { [FunctionName("save")] public static async Task<IActionResult> Run( [HttpTrigger(AuthorizationLevel.Function, "post", Route = null)] HttpRequest req, ILogger log) { var client = new SecretClient( new Uri("https://<my-vault>.vault.azure.net/"), new DefaultAzureCredential() ); // 创建包含过期属性的密钥对象 var secretProperties = new SecretProperties() { ExpiresOn = DateTime.UtcNow.AddMinutes(30) }; var keyVaultSecret = new KeyVaultSecret("name", "value") { Properties = secretProperties }; // 一次请求完成创建和属性设置 var secret = await client.SetSecretAsync(keyVaultSecret); return new OkObjectResult($"密钥已创建,过期时间:{secret.Properties.ExpiresOn}"); } } }
关键说明
- 直接实例化
KeyVaultSecret对象,将SecretProperties赋值给它的Properties属性,其中ExpiresOn必须设置为UTC时间(Key Vault的要求),这里用当前UTC时间加30分钟满足你的需求。 - 调用
SetSecretAsync(KeyVaultSecret)重载方法,一次性完成密钥创建和属性配置,不需要后续的更新操作。
内容的提问来源于stack exchange,提问作者Lasse
相关产品推荐
相关产品推荐

