【发布时间】:2020-10-26 05:51:03
【问题描述】:
我的目标是编写一个 .NET Core Azure 备份应用程序,该应用程序仅对具有列表/读取权限的 Azure Blob 存储具有读取权限。
具体来说,我想列出一个容器中的所有 blob。
因此,在每个存储帐户中使用访问密钥并不是一个好方法,因为 a) 应用程序将具有完整的写入/删除访问权限,并且 b) 我必须为每个存储帐户提供一个密钥(并且有多个存储帐户)。另外,我不想使用“共享访问签名”的另一个选项,因为它们适用于每个容器,而且我有很多容器(即 20 个存储帐户,最多 20 个容器)。
因此,我想在 Azure Active Directory 中设置一个只读服务主体 >> 使用 clientId、tenantId 和 clientSecret 进行应用注册,并授予该只读访问权限。
我能够使用 Microsoft.Azure.Management.ResourceManager.Fluent.Core API 列出帐户和容器,但不能列出里面的 blob。如何在 .NET Core 中实现这一点?
var credentials = SdkContext.AzureCredentialsFactory
.FromServicePrincipal((string)cg.LoginCredentials.clientId,
(string)cg.LoginCredentials.clientSecret,
(string)cg.LoginCredentials.tenantId,
AzureEnvironment.AzureGlobalCloud);
//var credentials = SdkContext.AzureCredentialsFactory.FromFile(@"D:\azurecred.txt");
var azure = Microsoft.Azure.Management.Fluent.Azure
.Configure()
.WithLogLevel(HttpLoggingDelegatingHandler.Level.Basic)
.Authenticate(credentials)
.WithDefaultSubscription();
var account = azure.StorageAccounts.List().ToList();
Task.Run(async () =>
{
var resourceGroups = await azure.ResourceGroups.ListAsync(true);
var blobContainers = await azure.StorageAccounts.Manager.BlobContainers.ListAsync(account[4].ResourceGroupName,
account[4].Name);
var blobList = blobContainers.ToList();
}
【问题讨论】:
-
如果我没记错的话,您将需要使用不同的 SDK(Azure Storage SDK for .Net)来列出 blob 容器中的 blob。
标签: azure blob service-principal