0

我有一个 blobstorage,我在其中放置文件供外部合作伙伴列出文件并阅读它们。我认为 SAS 令牌将是外部合作伙伴访问容器和读取文件的完美方式。

所以我创建了一个 SAS 令牌并意识到如果我不想每 10 分钟创建一次新的 sas 令牌并将它们发送给合作伙伴,我需要将令牌的过期日期设置在很远的将来,如果sastoken 泄露或令牌过期的那一天,解决方案将停止工作。

因此,为了解决这个问题,我可以让客户端通过使用 StorageSharedKeyCredential 类给他们一个访问密钥和帐户名来创建一个 sastoken。这很好用,也许效果很好,因为现在是客户端决定 sas 令牌应该拥有什么权限。所以客户端现在可能会上传文件/创建容器等。

所以我的问题是:当客户端创建 sastoken 时,有什么方法可以限制 sas 令牌拥有的权限,所以我们的外部合作伙伴只能读取/列出我决定的特定容器中的文件。

最好的问候马格努斯

4

2 回答 2

0

要授予特定容器权限,您可以执行以下操作:

找到您的容器,在设置刀片下选择访问策略,然后单击添加策略。选择您要授予此特定容器的权限。此外,公共访问级别是容器级别。您可以参考在类似相关问题上讨论的线程。

在此处输入图像描述

还可以尝试 RBAC 在 Azure 存储上的工作方式。只有为数据访问明确定义的角色才允许安全主体访问 blob 或队列数据。Owner、Contributor 和 Storage Account Contributor 等角色允许安全主体管理存储帐户,但不提供对该帐户中 blob 或队列数据的访问权限。

您可以将创建用户委托密钥的权限与对数据的权限分开授予。

https://docs.microsoft.com/en-us/rest/api/storageservices/get-user-delegation-key 是在帐户级别执行的,因此您必须使用内置的 Storage Blob Delegator 之类的东西授予此权限存储帐户范围内的角色。

然后,您可以在 blob 容器范围内使用以下 3 个内置角色之一,仅授予用户应具有的数据权限:

存储 Blob 数据贡献者

存储 Blob 数据所有者

存储 Blob 数据读取器

然后可以生成用户委派令牌以在有限的时间内授予用户权限的子集,并且可以为整个 blob 容器或单个 blob 授予权限。有关更多详细信息,您可以查看此线程

您必须使用存储防火墙中的 VNet 规则或对存储的受信任访问来限制同一区域中客户端的访问。

您可以查看此链接。

https://docs.microsoft.com/en-us/azure/storage/common/storage-sas-overview https://docs.microsoft.com/en-us/rest/api/storageservices/create-service-sas #permissions-for-a-blob

于 2021-06-22T08:57:24.200 回答
0

关于这个问题,我想你想知道如何创建service sas token。如果是这样,请参考以下代码。

BlobContainerClient containerClient=new BlobContainerClient(new Uri("https://{account_name}.blob.core.windows.net/{container_name}),new StorageSharedKeyCredential());

BlobSasBuilder sasBuilder = new BlobSasBuilder()
            {
                BlobContainerName =containerClient.Name,
                Resource = "c"
            };

            
sasBuilder.ExpiresOn = DateTimeOffset.UtcNow.AddHours(1);
sasBuilder.SetPermissions(BlobContainerSasPermissions.Read);
sasBuilder.SetPermissions(BlobContainerSasPermissions.List); 
Uri sasUri = containerClient.GenerateSasUri(sasBuilder);
于 2021-06-22T07:04:17.250 回答