gpt4 book ai didi

c# - .NET Core控制台应用程序: Read list of Azure storage blobs as read-only user

转载 作者:行者123 更新时间:2023-12-03 02:37:17 26 4
gpt4 key购买 nike

我有一个问题,我无法解决:

我们公司有大约。 20 个 Azure 存储帐户,大约。每个20个容器。我想编写一个 .NET Core 控制台应用程序,我可以在(非 Azure)Windows 服务器上运行该应用程序,以通过对(非 Azure)服务器的只读访问来备份 blob。

如果我使用存储访问 key ,我会遇到以下问题:a) 我需要 20 个不同的访问 key ,b) 访问 key 允许完全访问,但为了安全起见,我不想授予此控制台应用程序访问权限原因。使用 SAS 身份验证,更糟糕的是,我会同意。 400 个不同的 SAS key (20 个存储帐户 x 20 个容器)。

现在:在 Azure 上,我创建了一个新用户,e。 G。 “[email protected] ”,这是一个全局读取器 - 因此不可能写入/删除,这将满足安全问题。我将我的应用程序注册为 Windows 应用程序。

然而,尽管阅读并尝试了很多方法,我还是无法弄清楚我的控制台应用程序如何通过 e 自动登录。 G。 Azure Active Directory(密码),用户名 + 密码为[email protected] 。存储用户名/密码也很重要。 G。在 appsettings.json 中)。

您能否提供 .NET Core C# 代码,让我能够 a) 登录并 b) 列出一个存储帐户 >> 容器中的所有 blob?

非常感谢!!

马丁

最佳答案

根据您的需要,我建议您使用Azure AD身份验证来访问Azure Blob。如果您使用这种方式,我们需要将Storage Blob Data Reader分配给用户或服务主体。之后,用户或服务主体有权列出容器和 blob。更多详情请引用herehere

例如

  1. 创建服务主体并将Storage Blob Data Reader 角色分配给 sp
az login

# assign role at the description level the sp can manage all storage account in the subscription
az ad sp create-for-rbac -n "ManageStorage" --role "Storage Blob Data Reader"

enter image description here

  • 设置环境变量
  • setx AZURE_CLIENT_ID <your-clientID>

    setx AZURE_CLIENT_SECRET <your-clientSecret>

    setx AZURE_TENANT_ID <your-tenantId>
  • 申请
  • a.开发工具包

    <PackageReference Include="Azure.Identity" Version="1.1.1" />
    <PackageReference Include="Azure.Storage.Blobs" Version="12.4.4" />

    b.代码

                string accountName = "jimtestdiag417";
    string url = string.Format("https://{0}.blob.core.windows.net/", accountName);
    var account = new BlobServiceClient(new Uri(url), new DefaultAzureCredential());
    string containerContinuationToken = null;
    int pageSizeHint = 5; //The size of Page<T>s that should be requested
    // list conatnies in the storage account
    do
    {
    var containerResultSegment = account.GetBlobContainersAsync().AsPages(containerContinuationToken, pageSizeHint);
    await foreach (Page<BlobContainerItem> containerPage in containerResultSegment) {

    foreach (var container in containerPage.Values) {

    Console.WriteLine( string.Format("The blobs in the container {0} are as follows ", container.Name));
    string blobContinuationToken = null;
    // list blobs in the container
    do
    {

    var blobResultSegment = account.GetBlobContainerClient(container.Name).GetBlobsAsync().AsPages(blobContinuationToken, pageSizeHint);
    await foreach (Page<BlobItem> blobPage in blobResultSegment)
    {

    foreach (var blob in blobPage.Values)
    {
    Console.WriteLine(blob.Name);

    }

    }
    } while (blobContinuationToken != null);


    }
    }
    } while (containerContinuationToken != null);

    enter image description here

    关于c# - .NET Core控制台应用程序: Read list of Azure storage blobs as read-only user,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62808331/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com