azure - 限制 Azure Blob 对 WebApp 的访问

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

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

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

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

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

最佳答案

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

我在关于如何执行此操作的文章中写道:https://joonasw.net/view/azure-ad-authentication-with-azure-storage-and-managed-service-identity .

关键部分:

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

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

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

使用 token 读取 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();
}

关于azure - 限制 Azure Blob 对 WebApp 的访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52158101/

相关文章:

Azure Blob 存储和容器权限

node.js - 在azure应用程序服务中使用docker-compose

c# - 通过 GetBlockBlobReference() 方法添加到 blob 文件名的容器名称

azure - 跨多个 Azure 数据磁盘分区的数据库的性能

node.js - 在同一个 Azure Web 应用程序中部署 Angular 6 应用程序和 Web API

python - 在 Azure ML Python 脚本中读取多个 CSV 文件

azure - 与逻辑应用和 Azure SQL 的 SQL 事务

java - 如何直接从Spring Boot应用程序将文件上传到azure blob存储,而不将文件放入内存(缓冲内存)

powershell - 使用 powershell cmdlet 的 Azure 网站自动化

Azure + Polymer 2 应用程序 : working on Chrome but not on IE