如何从 C# 代码轮换 Azure 存储帐户访问密钥?
Posted
技术标签:
【中文标题】如何从 C# 代码轮换 Azure 存储帐户访问密钥?【英文标题】:How to rotate an Azure storage account access key from C# code? 【发布时间】:2021-12-21 05:50:36 【问题描述】:我有一个 Azure 存储帐户。它有许多相关联的访问密钥。从 Azure Web GUI 可以“轮换”这些密钥。
也可以从命令行旋转它们,使用(我相信)az storage account keys renew
。
我想从 C# 代码中轮换这些键。我很难找到让我这样做的正确对象。
我知道像 Azure.Storage.Blobs 和 Microsoft.Azure.Cosmos.Table 这样的 NuGet 包。这些家族之一的任何 NuGet 包中是否有任何类具有让我轮换/更新/重新生成这些存储帐户访问密钥的功能?
提前致谢!
【问题讨论】:
【参考方案1】:您要使用的 Nuget 包是 Azure.ResourceManager.Storage
。创建/获取StorageAccount
的实例后,您需要调用RegenerateKeyAsync
方法来重新生成密钥。
这是相同的示例代码。请注意,您还需要安装Azure.Identity
Nuget 包。
using System;
using System.Threading.Tasks;
using Azure.Identity;
using Azure.ResourceManager;
using Azure.ResourceManager.Storage;
using Azure.ResourceManager.Storage.Models;
namespace SO69882633
class Program
private const string subscriptionId = "23456789-xxxx-xxxx-xxxx-xxxxxxxxxxxx";
private const string resourceGroupName = "resource-group-name";
private const string storageAccountName = "storageaccountname";
private const string keyToRegenerate = "key2";//Key to regenerate. Could be either "key1" or "key2"
static async Task Main(string[] args)
var credentials = new DefaultAzureCredential();
ArmClient armClient = new ArmClient(new DefaultAzureCredential());
string storageAccountResourceId =
$"/subscriptions/subscriptionId/resourceGroups/resourceGroupName/providers/Microsoft.Storage/storageAccounts/storageAccountName";
StorageAccount storageAccount = armClient.GetStorageAccount(storageAccountResourceId);
var keys = await storageAccount.GetKeysAsync();
foreach (var key in keys.Value.Keys)
Console.WriteLine($"key.KeyName: key.Value");
Console.WriteLine("===========================");
StorageAccountRegenerateKeyParameters parameters = new StorageAccountRegenerateKeyParameters(keyToRegenerate);
var result = await storageAccount.RegenerateKeyAsync(parameters);
Console.WriteLine($"\"keyToRegenerate\" key regenerated successfully.");
Console.WriteLine("Listing keys again (just to make sure ;-))...");
keys = await storageAccount.GetKeysAsync();
foreach (var key in keys.Value.Keys)
Console.WriteLine($"key.KeyName: key.Value");
Console.WriteLine("===========================");
【讨论】:
谢谢。我对使用该软件包犹豫不决,因为显然它没有正式版本,只有 beta 版本。此外,我不知道如何实例化StorageAccount
。您能否展示 - 或链接到 - 如何实例化 StorageAccount
的示例?而且,至关重要的是,您使用的是什么版本的 NuGet?
了解您对预览版 SDK 的评论。还有一个旧版本的 SDK 可用:Microsoft.Azure.Management.Storage。我相信这个新 SDK 的当前版本是1.0.0-beta.3
。 HTH。
最新的预发布版本是 1.0.0-beta.3,是的。但是您链接到的示例不是来自 1.0.0-beta.3。该示例似乎来自未发布的母版,并且自上次预发布以来,代码库似乎发生了很多的变化。当我从他们的 GitHub 签出标签 1.0.2 时,我找不到任何 StorageAccount
类。
我从他们的测试中获取了示例代码。你愿意使用这个预发布版本吗?我会尝试编写一些代码来使用这个版本的 SDK。
我愿意将它用于这些目的,是的。以上是关于如何从 C# 代码轮换 Azure 存储帐户访问密钥?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Azure 中的密钥轮换后为存储 Blob 的客户端请求提供服务
使用 c# 从 Azure 存储帐户表中检索记录,同时使用 xamarin 开发跨平台应用程序给出错误
ARM - 如何从存储帐户获取访问密钥,以便稍后在模板中的 AppSettings 中使用?