gpt4 book ai didi

azure - 限制 Azure Blob 对 WebApp 的访问

转载 作者:行者123 更新时间:2023-12-02 23:29:46 28 4
gpt4 key购买 nike

情况:我们在 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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com