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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 13:01:41