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

如何重新生成Azure连接字符串?及Azure存储账户访问密钥API再生问题

如何通过API重新生成Azure存储账户的访问密钥(及连接字符串)

嗨,我之前也踩过这个坑!CloudStorageAccount类确实只聚焦在存储服务的操作上,密钥管理这种属于Azure资源层面的操作,得靠Azure资源管理器(ARM)的API或者对应的SDK来搞定,下面给你详细说说怎么做:

核心思路

Azure存储账户的访问密钥属于资源管理范畴,所以不能通过CloudStorageAccount操作,得用Azure Resource Manager (ARM) 相关工具——推荐用最新的Azure.ResourceManager.Storage SDK,比旧版的Microsoft.Azure.Management.Storage更易用。

具体步骤(以.NET为例)

1. 安装必要的NuGet包

先在项目里安装最新的Azure.ResourceManager.Storage和Azure.Identity包:

Install-Package Azure.ResourceManager.Storage
Install-Package Azure.Identity

2. 编写代码重新生成密钥

下面是完整的示例代码,注释里写了关键参数的替换说明:

using Azure.Identity;
using Azure.ResourceManager.Storage;
using Azure.ResourceManager.Storage.Models;

// 替换成你自己的订阅ID、资源组名、存储账户名
var subscriptionId = "your-subscription-uuid";
var resourceGroupName = "your-resource-group-name";
var storageAccountName = "your-storage-account-name";

// 用DefaultAzureCredential做身份验证,它会自动适配本地开发(Azure CLI/VS登录)、Azure托管环境(MSI)等场景
var credential = new DefaultAzureCredential();
// 获取存储账户的资源对象
var storageAccountResource = new StorageAccountResource(credential, subscriptionId, resourceGroupName, storageAccountName);

// 选择要重新生成的密钥:KeyName.Primary对应key1,KeyName.Secondary对应key2
var regenerateRequest = new StorageAccountRegenerateKeyContent(KeyName.Primary);
var regenerateResult = await storageAccountResource.RegenerateKeyAsync(regenerateRequest);

// 提取新密钥并拼接成连接字符串
var newPrimaryKey = regenerateResult.Value.Keys.First(k => k.KeyName == "key1").Value;
var newConnectionString = $"DefaultEndpointsProtocol=https;AccountName={storageAccountName};AccountKey={newPrimaryKey};EndpointSuffix=core.windows.net";

// 这里可以把新的连接字符串保存到配置或者通知相关应用更新
Console.WriteLine("新的连接字符串:" + newConnectionString);

3. 权限注意事项

执行这个操作的身份(不管是服务主体还是用户账户)需要拥有存储账户的Contributor或者Storage Account Contributor角色,至少要具备Microsoft.Storage/storageAccounts/regenerateKey/action这个权限,不然会报403错误。

4. 避免业务中断的小技巧

别直接换掉正在使用的密钥!建议按这个流程来:

  • 先重新生成secondary密钥(key2)
  • 把所有应用的连接字符串切换到新的secondary密钥
  • 再重新生成primary密钥(key1)
  • 最后按需切换回primary密钥

不用SDK?直接调用REST API也可以

如果不想用SDK,也可以直接发POST请求到ARM API:

  • 请求URL:https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Storage/storageAccounts/{accountName}/regenerateKey?api-version=2023-01-01
  • 请求体:{"keyName": "key1"}(或者"key2")
  • 身份验证:在请求头里加Authorization: Bearer {你的ARM访问令牌}

内容的提问来源于stack exchange,提问作者menteith

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:01:46