【问题标题】:Limit Azure Blob Access to WebApp限制 Azure Blob 对 WebApp 的访问
【发布时间】:2019-02-09 00:05:23
【问题描述】:

情况: 我们有一个 azure 和 blob 存储的网络应用程序,通过我们的网络应用程序,我们将数据写入 blob,并且当前将该数据读回,将其作为响应返回到网络应用程序中。

我们正在尝试做的事情: 试图找到一种方法来限制对 blob 的访问,以便只有我们的 web 应用程序可以访问它。如果我们有一个静态 IP,目前在防火墙设置中设置一个 IP 地址可以正常工作(我们经常在办公室本地测试运行 Web 应用程序,这让我们可以很好地读/写 blob)。但是,当我们使用 Web 应用程序的 IP 地址(从 Web 应用程序的跨域页面读取)时,我们不会获得相同的访问权限,并且在尝试读取/写入 blob 时会出错。

问题: 有没有办法限制对 web 应用程序的 blob 访问,而无需在 azure 上设置 VPN(太贵)?我见过人们谈论使用 SAS 生成指向 blob 内容的时间有效链接,这对于只允许用户通过我们的网络应用程序访问内容(然后将向他们提供链接)是有意义的,但这并不能解决我们的网络应用程序在不可公开访问时无法写入 blob 的问题。

我们只是想不使用 blob 吗?或者这是一种使用它们的有效方式,但您必须通过 VPN 方法这样做?

【问题讨论】:

    标签: azure azure-blob-storage azure-web-app-service


    【解决方案1】:

    另一种选择是将 Azure AD 身份验证与应用服务上的托管标识结合使用。 在撰写本文时,此功能仍处于预览阶段。

    我在文章中写过如何做到这一点:https://joonasw.net/view/azure-ad-authentication-with-azure-storage-and-managed-service-identity

    关键部分:

    • 启用托管身份
    • 将生成的服务主体添加到存储帐户/blob 容器中的必要角色
    • 更改您的代码以使用通过托管标识获取的 AAD 访问令牌,而不是访问密钥/SAS 令牌

    使用https://www.nuget.org/packages/Microsoft.Azure.Services.AppAuthentication/1.1.0-preview获取令牌:

    private async Task<string> GetAccessTokenAsync()
    {
        var tokenProvider = new AzureServiceTokenProvider();
        return await tokenProvider.GetAccessTokenAsync("https://storage.azure.com/");
    }
    

    使用令牌读取 blob:

    private async Task<Stream> GetBlobWithSdk(string accessToken)
    {
        var tokenCredential = new TokenCredential(accessToken);
        var storageCredentials = new StorageCredentials(tokenCredential);
        // Define the blob to read
        var blob = new CloudBlockBlob(new Uri($"https://{StorageAccountName}.blob.core.windows.net/{ContainerName}/{FileName}"), storageCredentials);
        // Open a data stream to the blob
        return await blob.OpenReadAsync();
    }
    

    【讨论】:

      【解决方案2】:

      SAS 密钥是保护和授予对 Blob 存储访问权限的正确方法。与您的看法相反,这将适用于私人容器。以下是您可能会发现有用的资源:

      http://www.siddharthpandey.net/use-shared-access-signature-to-share-private-blob-in-azure/

      还请查看 Microsoft 关于保护 Blob 存储的指南。这解决了您概述的许多问题,并且是任何 Azure PaaS 开发人员必须阅读的内容:

      https://docs.microsoft.com/en-us/azure/storage/common/storage-security-guide

      【讨论】:

      • 所以 SAS 不是我们的问题,而是私有 blob 存储不允许我们写入的事实。但是阅读了您的答案,然后在 microsoft 页面上的更多内容确实突出了我们没有意识到我们可以做的事情,那就是使容器本身成为私有的,这似乎给了我们想要的行为,如果您不能再通过URL,但我们的 web-api 可以读取/写入 blob,并向用户提供文件内容。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-18
      • 2020-12-08
      • 2013-10-22
      • 1970-01-01
      • 2019-03-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多