【问题标题】:How to rotate an Azure storage account access key from C# code?如何从 C# 代码轮换 Azure 存储帐户访问密钥?
【发布时间】:2021-12-21 05:50:36
【问题描述】:

我有一个 Azure 存储帐户。它有许多相关联的访问密钥。从 Azure Web GUI 可以“轮换”这些密钥。

也可以从命令行旋转它们,使用(我相信)az storage account keys renew

我想从 C# 代码中轮换这些键。我很难找到让我这样做的正确对象。

我知道像 Azure.Storage.BlobsMicrosoft.Azure.Cosmos.Table 这样的 NuGet 包。这些家族之一的任何 NuGet 包中是否有任何类具有让我轮换/更新/重新生成这些存储帐户访问密钥的功能?

提前致谢!

【问题讨论】:

    标签: c# azure azure-storage access-keys key-rotation


    【解决方案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。
    • 我愿意将它用于这些目的,是的。
    猜你喜欢
    • 2019-07-28
    • 2019-09-17
    • 1970-01-01
    • 2017-05-01
    • 2021-01-26
    • 2021-04-06
    • 1970-01-01
    • 1970-01-01
    • 2020-01-14
    相关资源
    最近更新 更多