无需身份验证即可访问 Azure Blob 文件

Posted

技术标签:

【中文标题】无需身份验证即可访问 Azure Blob 文件【英文标题】:Azure Blob File is accesible without authentication 【发布时间】:2021-10-15 01:26:45 【问题描述】:

我正在使用 Azure Blob 存储来为我的 .网络应用程序。 在应用程序的一部分中,用户可以将图像附加到报告并保存。这将保存文件,它将位于以下形式的 url 下:

"https://storageAccountName.blob.core.windows.net/.../exportPath";

之后,如果生成的 url 将由用户共享,则任何人都可以使用它(无需任何授权)来下载该图像。

我想确保只有授权用户才能访问这些文件。

对于这种无法计算访问授权的外部存储资源的直接访问链接,我应该怎么做,这样我的文件将无法通过 azure blob 链接提供给任何人?

我正在阅读 Microsoft 提供的有关 Azure Blob(主要是 SAS)的文档(这样我就可以让我的文件只有授权用户可以访问) https://docs.microsoft.com/en-us/azure/storage/blobs/sas-service-create?tabs=dotnet https://docs.microsoft.com/en-us/azure/storage/blobs/storage-blob-user-delegation-sas-create-dotnet,但我还没有弄清楚是不是这样。 (也是快速过期令牌)

【问题讨论】:

不确定我是否理解您的问题。您能否编辑您的问题并详细说明? @GauravMantri 我已经编辑过了。简短说明:我正在将文件上传到 azure blob 存储。如果您有该文件的链接,则无需授权即可访问它。我不希望这种情况发生(我希望授权用户可以访问它)并且我正在寻找解决方案(SAS/快速到期令牌) 另外:blob 容器默认是私有的,这意味着其中的任何文件也是私有的。如果您的文件可访问,这意味着您将容器明确设置为公开可用。您可能正在寻找使用托管标识、正确的连接字符串或 SAS 创建私有容器并在其中存储文件。 (请注意,里面有一些有趣的搜索词??????) 【参考方案1】:

感谢 rickvdbosch 在评论中提供您的建议,我正在转换为帮助其他社区成员的答案。

使用托管身份或访问令牌和 SAS 将容器设为私有并在其中存储文件。

您可以通过多种方式保护您的 Blob 存储可供公众访问。

    您可以使用基于角色的访问控制来限制允许哪些用户使用该帐户以及他们可以执行哪些操作。 与共享访问签名 (SAS) 不同,AAD 身份验证没有硬性到期日期。只要 AAD 身份(用户、服务主体等)具有正确的权限,它就可以始终连接到存储帐户。同样,您可以通过从身份中删除必要的权限来轻松撤消访问权限。

参考:https://docs.microsoft.com/en-us/azure/storage/blobs/authorize-access-azure-active-directory

另一种方式是 SAS 基本上是一个带有查询参数的 URI,这些参数指定了到期时间、权限和签名签名等选项。使用 SAS 可以控制对容器和 blob 的访问。

参考:https://docs.microsoft.com/en-us/azure/storage/common/storage-sas-overview

【讨论】:

以上是关于无需身份验证即可访问 Azure Blob 文件的主要内容,如果未能解决你的问题,请参考以下文章

由于授权标头,Azure Blob 存储 403 身份验证失败

安全访问 Microsoft Azure Blob 存储

如何向 Azure 存储 Blob 上传添加身份验证

从 API 身份验证返回的 Azure Blob SAS 网址失败 .net 核心

可以将 hadoop-azure 配置为对 azure blob 使用活动目录(租户、appId、appSecret)身份验证吗

没有当前用户 AWS Amplify 身份验证错误 - 无需登录即可访问