azure - 如何为 Windows Azure 中的 blob 存储提供安全性

标签 azure azure-storage

我想提供对 Windows Azure 中 Blob 存储的访问,这样只有一个域可以访问容器 中的 Blob。我发现对容器的访问有公共(public)、私有(private)和共享三种。但它们不符合我的要求。在公共(public)场合,我们可以随时从 url 访问 blob。在私下中,我们无法从 url 访问,但如果我们提供存储帐户凭据,则可以从代码访问。在共享访问中,我们可以根据策略访问一段时间。

但我需要像我的网站应该访问 blob-storage 中的任何 blob,这些 blob 可能来自 url 或代码。但我不应该通过粘贴 blob 的 url 从另一个浏览器访问它。因此,除非并且直到我不登录我的应用程序,我应该无法访问 blob 存储 url。请让我知道我们如何才能实现这一目标。

最佳答案

实现这一目标的最简单方法是利用 Shared Access Signature (SAS)其有效期非常短(30 秒或更短)。如您所知,SAS 提供对存储资源的有时间限制/基于权限的访问。因此,您可以做的就是保留 Blob 容器的 ACL Private 而不是 Blob/Container

假设您正在使用 .Net 客户端库并构建 MVC 应用程序,您将在 Controller 中执行的操作是在容器上创建一个具有 Read 权限的 SAS有效期很短,并将该 SAS token 传递到您的 View 。然后,您可以将该 SAS token 附加到 View 中的图像 URL。

Controller 代码:

        var cloudStorageAccount = new CloudStorageAccount(new StorageCredentials(accountName, accountKey), true);
        var container = cloudStorageAccount.CreateCloudBlobClient().GetContainerReference("container");
    var sas = container.GetSharedAccessSignature(new SharedAccessBlobPolicy()
        {
            SharedAccessExpiryTime = DateTime.UtcNow.AddSeconds(30),
            Permissions = SharedAccessBlobPermissions.Read
        });
    ViewBag.SasToken = sas;

查看代码:

<img src="https://myaccount.blob.core.windows.net/container/<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="2f425646424e484a015f41486f675b4243017d4e58" rel="noreferrer noopener nofollow">[email protected]</a>(ViewBag.SasToken)" />

请注意,这并不是 100% 万无一失,因为在 SAS 有效期间,任何人都可以复制 URL 并获取图像,但可以通过保留 SAS 有效期限来缓解该问题,因为一旦 SAS 过期,即使有人知道 URL,他们也无法访问该 blob。

关于azure - 如何为 Windows Azure 中的 blob 存储提供安全性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28667888/

相关文章:

java - Azure blob sasToken “Signature did not match” (java)

azure - 如何将每个值从一个资源 block 引用/访问到另一个资源 block terraform

sql - Azure 逻辑应用 'Execute SQL Query' 连接器

azure - 如何提供 Windows Azure 托管站点的自定义域名

Azure Monitor 导出到 SQL Server

c# - 无法加载文件或程序集 'System.Spatial' 或其依赖项之一

Azure IoT 将文件上传到 Blob

c# - CONTENT-MD5 缺少 AZURE 门户

Azure CloudBlob SetMetadata 失败并显示 "The metadata specified is invalid. It has characters that are not permitted."

Azure 存储 C# 客户端在 MVC 应用程序中返回 403 禁止,但在控制台应用程序中返回 200