访问与保护 Azure Blob 存储
在企业级存储系统中,安全至关重要。安全访问 Azure Blob 存储的方式有多种,例如 SAS 令牌、访问密钥以及企业账户。
使用 SAS 令牌进行访问控制
在生产环境中,您需要限制对存储在 Blob 存储中的文件和数据的访问。通常不希望其公开可见。共享访问签名(SAS)提供了一种安全的方式来管理对 Blob 存储数据的访问。
SAS 通过令牌工作,该令牌被附加到您要共享的资源 URL 上。令牌包含权限类型(读取、写入、删除等)、令牌有效期以及允许访问资源的协议(HTTP 和/或 HTTPS)等信息。
例如,若某个 Blob 的 URL 为:
https://my_account.blob.core.windows.net/my_container/my_file
在附加令牌后,它会变成:
https://my_account.blob.core.windows.net/my_container/my_file?sp=r&st=TIME&OTHER_PARAMETERS
以下步骤展示如何使用 Azure 门户为特定容器生成 SAS 令牌。
- 进入 Storage account 页面。
- 在左侧菜单的 Data storage 下,选择 Containers。该页面会显示此存储帐户下的容器列表表格。
- 找到需要生成令牌的容器所在行。
- 在该行最右侧列选择三点菜单。

- 在弹出菜单中选择 Generate SAS。

在 Generate SAS 窗口中:
- 选择签名方法:
- Account key 或 user delegation key。
- 在本教程中,使用账户密钥对 SAS 进行签名。
- user delegation key 基于 Azure Active Directory,并通过 Microsoft Entra 关联到特定用户 ID。
- 选择您希望该令牌授权的权限类型:
- 读取、写入、删除等。
- 在本教程中,仅授予读取权限。
- 输入令牌的开始生效时间与过期时间。
- 选择客户端可用于访问您数据的 IP 协议。
- 选择 Generate SAS token and URL 按钮。
现在,您可以使用生成的令牌和 URL 访问私有 Blob。若在没有适当访问令牌的情况下尝试访问私有 Blob,您会收到一个 XML 错误,内容为“The specified resource does not exist.”。
使用 Microsoft Entra ID 进行身份验证
Microsoft Entra ID 将用户身份与角色集中管理,并允许对 Azure 资源进行精细化访问控制。除 SAS 令牌与密钥之外,它还提供了另一种(更安全的)管理对 Azure Blob 存储实体访问的方式。您可以为单个用户或用户组分配相应角色,从而授予特定权限。这称为基于角色的访问控制(RBAC)。
RBAC 通过 Owner、Contributor、Reader 等角色实现细粒度的访问控制。您可在不同层级(如整个 Storage 帐户或单个容器)定义这些权限。
例如,对于某个存储帐户,您可以为某位用户分配 Storage Blob Data Reader 角色。此用户将只能读取该帐户中的 Blob,而无法执行其他操作(如写入或列出全部 Blob)。
您可以将 Azure Blob 存储与企业级认证系统集成,使用 Entra ID 对用户进行身份验证。企业 Azure 用户与应用已拥有(或可获取)Entra ID,从而便于使用现有企业凭据在中心化环境中管理认证。
请注意Microsoft Entra ID 是 Azure Active Directory(AD)的新名称。
在下一节中,我将向您展示如何为用户分配角色并管理对 Blob 存储实体的访问。
配置基于角色的访问控制(RBAC)
我将以为某个 Storage 容器分配角色为例,演示如何配置访问权限。对 Storage 帐户的流程类似。
- 在 Storage 容器页面的侧边栏选择 Access Control (IAM)。
- 在 Access Control 页面,选择顶部的 Add 按钮。
- 在下拉菜单中选择 Add role assignment。

- 在 Add role assignment 页面,Role 选项卡中,在搜索栏输入“blob”。这将显示适用于 Blob 存储资源的相关预配置角色。

您可以从以下三种 Blob 存储角色中选择:
- Storage Blob Data Reader:仅对 Blob 容器和数据具有读取权限。
- Storage Blob Data Contributor:可读取、写入和删除资源。
- Storage Blob Data Owner:对存储资源拥有完全访问权限。
注意,角色具有继承性。例如,如果您为某个 Storage 帐户分配了“Owner”角色,该用户也将成为该帐户中所有容器的所有者。
- 继续本示例,选择 Storage Blob Data Contributor 并选择 Next。
- 在 Add role assignment 页的 Members 选项卡,点击 Select members 链接,选择要分配前一步所选角色的成员。

- 在 Select members 侧边窗中,输入用户或应用的名称。从搜索结果中选择相应成员。点击侧边窗底部的 Select 按钮。
- 选择 Review + assign 完成角色分配。
Azure Blob 存储的高级功能
我们已经回顾了 Azure Blob 存储的基础知识,但当您希望更进一步时,可以考虑以下策略。
Blob 生命周期管理
经常访问的数据应存放在 Hot 等快速访问存储层。很少访问的数据可存放在较慢但经济的存储层,如 Archive 存储。
挑战在于如何动态识别哪些 Blob 不再被频繁访问,可迁移至更廉价的存储。为实现这一点,Azure 提供了 Lifecycle management 功能。该功能可以在 Blob 不再被主动修改时,动态将其转移至更低成本的存储。
生命周期管理在 Storage 帐户层面实现。以下步骤展示如何启用并添加一条规则:在 Blob Hot 层 30 天未活动后,将其移动到 Cool 层:
- 在 Storage Account 页面,从左侧栏选择 Data management > Lifecycle management
- Lifecycle management 页面显示当前已激活的规则列表。

- 从顶部工具栏选择 Add a rule。
- 在 Add a rule 页面,选择:
- 规则名称
- 规则作用范围
- 规则适用的 Blob 类型与子类型
- 选择 Next.
- 该规则表明:如果 Blob 的最后创建或修改时间早于 N 天(您需要输入 N 的值),Azure 将对其执行某个操作(由您选择):
- 在第一个字段(块)中的 If 下选择条件。在 More than (days ago) 字段输入天数:30。
- 在下一个字段(块)的 Then 下,选择操作——Move to cool storage。

- 添加规则。
版本控制与软删除
在任何存储系统中,能够从用户错误与无意操作中恢复都至关重要。版本控制与软删除是 Azure Blob 存储用于帮助您撤销错误的两种方式。
版本控制
当您不小心保存了错误的更改时,能够还原文件的先前版本非常有用。Blob 版本控制允许您在修改 Blob 时自动保留旧版本。启用版本控制:
- 在 Storage account 页面,从侧边栏选择 Data management > Data protection。
- 在 Data protection 页面,Tracking 下勾选 Enable versioning for blobs
- 选择您是否希望:
- 保留所有先前版本。
- 在数天后删除较旧版本。

- 保存更改。
您的存储帐户现已启用版本控制!
软删除
我们都曾误删过错误的数据。在这种情况下,能够恢复丢失数据非常有用。
Blob 的软删除(soft delete)功能会在指定的天数内保留被删除的数据。在保留期内,您可以还原被软删除的实体。保留期结束后,数据将被永久删除。该功能可以防止数据被意外删除或覆盖。
启用并使用软删除:
- 在 Storage account 页面,从侧边栏选择 Data management > Data protection。
- 在 Data protection 页面,勾选以下复选框:
- Enable soft delete for blobs
- Enable soft delete for containers
- 输入删除数据的保留天数。
- 保存更改。
您已在存储帐户上启用软删除!
数据加密与安全访问
默认情况下,Azure 在静态数据上使用 AES-256 对称加密来保障安全。即使攻击者获得存储数据的硬盘物理访问权限,没有加密密钥也无法解密。许多组织出于安全与合规(隐私法规)需要该功能。
默认情况下,用户无需承担维护加密密钥的额外工作。Azure 会在后台处理。但为了进一步提升安全性,您也可以选择使用密钥保管库并提供自己的密钥:
- 在 Azure 门户顶部搜索栏输入“key vault”。
- 选择 Key vaults。
- 在 Key vaults 页面可查看您已创建的密钥保管库列表。
- 选择顶部工具栏的 Create 按钮。
- 在 Create a key vault page:
- 选择要在其中使用该保管库密钥的资源组。
- 输入保管库名称及希望存放的区域。
- 选择 Review + Create。

- 核对详情并选择 Create。
创建新的密钥保管库需要一些时间,随后会跳转至其页面。

创建密钥保管库后,您即可添加密钥与机密:
- 从侧边栏进入 Objects > Keys。
- 从顶部工具栏选择 Generate/Import。
- 选择要生成或导入新密钥。您可以在本地生成密钥并上传至 Azure,或直接在 Azure 平台生成。
- 输入新密钥的名称。
- 选择密钥的相关参数(类型、大小、算法等)。
- 可选地,您还可以设置密钥的生效与过期日期。

- 选择 Create。
您已向密钥保管库添加了一个密钥。
用于灾难恢复的地理复制
对技术或自然灾害的防护需求越高,您就需要在存储系统中构建越多的冗余。冗余意味着将相同数据复制到多个设备和/或地点,这会带来成本。您可以在多种冗余级别中进行选择:
- 本地冗余存储(LRS):在同一数据中心内复制数据。这是最便宜的选项。
- 可用区冗余存储(ZRS):在同一地理区域的不同数据中心创建三个或更多副本。
- 地理冗余存储(GRS):跨地理区域的数据中心保留您存储帐户的副本。这是最安全的选项。
Azure Blob 存储的成本管理与优化
尽管云存储优势显著,但如果不加以管理,成本可能会不断攀升。本节我将概述如何优化与管理 Azure Blob 存储成本。
了解 Azure Blob 存储的定价
Azure 存储根据所提供的选项与附加服务,设有不同的定价层:
- 访问频率:频繁访问的数据需要存放在读写速度更快的设备上。相反,极少访问的数据可放在速度较慢但更便宜的设备上。
- Hot:通常构建在现代 SSD 上,速度快但成本高,能提供最佳用户体验。
- Cool:适合不经常访问的数据,如备份。有时也用于存放大文件(如视频),因为将其保存在 Hot 层会更昂贵。
- Archive:仅极少访问的数据会被归档。传统上,归档数据存储在磁带上。因此存储成本低,但由于顺序访问,检索数据的成本较高。
- 冗余:对技术或自然灾害的防护需求越高,您就需要构建越多的冗余。冗余意味着将相同数据复制到多个设备和/或地点,这会带来成本。
- 本地冗余存储(LRS):在同一数据中心内复制数据。这是最便宜的选项。
- 可用区冗余存储(ZRS):在同一地理区域的不同数据中心创建三个或更多副本。
- 地理冗余存储(GRS):跨地理区域的数据中心保留您存储帐户的副本。这是最安全的选项。
- 数据传输:
- 通常,在同一区域内跨 Azure 服务传输数据是免费的。
- 数据入口(将数据传入 Azure 存储)通常也是免费的。
- 数据出口(从 Azure 传出),例如互联网用户访问您的数据,会产生费用。出口费用通常与流量规模相关。
成本优化建议
基于上述讨论,我建议以下最佳实践,以防止云存储成本失控。
- 充分利用不同的存储类型。将不常访问的数据迁移至更便宜的存储层,例如 Cool 或 Archive。
- 使用 CDN 等缓存服务也有助于改善延迟。这将使您可以将视频等大文件存放在 Cool 层。
- 启用并设置合适的生命周期策略,将未使用的 Blob 迁移到更低成本的存储层。
Azure Blob 存储的故障排除
尽管 Azure 存储被广泛使用,但有时仍可能出现错误。
常见的 Blob 上传问题
网络问题与权限错误是最常见的两类问题。网络缓慢与代理配置不当经常导致网络错误,最好的解决方法是检查您的连接与配置。
在尝试上传大文件时出现错误也很常见。网络连接的瞬时丢失可能导致上传停滞。为解决此类问题,请查看 Azure 的重试策略并按需配置。另外一种务实的做法是将大型上传拆分为更小的分块。使用 Put Block 操作分别上传每个分块。
权限错误通常由您的访问密钥或令牌,或 Entra ID 未被授权对存储容器或帐户执行所需操作(例如读取或写入数据)引起。可能是您的密钥已刷新或令牌已过期。容器管理员可以帮助您获得正确的访问权限。
监控 Blob 存储使用情况
Azure 提供多种工具来监控 Azure 存储的性能。我们将介绍两个最常用的选择:
- Azure Storage 下的 Metrics
- Azure Monitor
Azure Storage Metrics
Azure Storage 自带集成监控工具。访问方式如下:
- 在 Storage account 页面,选择 Monitoring > Metrics
- Metrics 页面显示一张图表,初始为空。您需要选择要在图表中显示的信息。

- 在图表顶部(Scope 下)的下拉菜单栏中,选择您要监控的存储实体:
- 在 Metric Namespace 下,选择(存储)Account 或 Blob。
- 在 Metric 下,选择相关度量,如 Blob count、Ingress、capacity、Transactions 等。
- 在右上角自定义您希望监控的时间范围。
- 图表会按所选度量与时间段展示该存储实体的性能。

Azure Monitor
Azure Monitor 是一款可用于监控多种 Azure 资源的高层工具。访问方式如下:
- 在 Azure 门户的搜索栏输入 monitor。
- 在搜索结果中选择 Monitor。

- 在 Monitor 首页,从侧边栏选择 Insights > Storage accounts。

- 在 Monitor | Storage accounts 页面,选择您希望查看洞察的存储帐户。
- 在 Insights 页面,您可以查看诸多有用指标,如按存储类型划分的事务量、延迟、可用性等。

- 在页面顶部,您可以自定义指标展示的时间范围。
- 使用顶部工具栏的 Customize 按钮修改页面上各类表格的布局。
结语
云存储是现代软件的重要组成部分。本文介绍了如何开始使用 Azure Blob 存储,以及如何通过它上传与下载 Blob。我们还涵盖了许多实用方面,例如管理访问权限与监控使用情况以控制成本。
微软 Azure 与亚马逊 AWS 提供了大量重叠的服务。要决定哪一项更适合您的具体需求,请查看我们的 AWS 与 Azure 对比。最后,若您即将参加与 Azure 服务相关的面试,我们还为您准备了一套相关面试题!

在真正动手使用之前,云存储常常像个黑盒子——而 Azure Blob 存储正是一个很好的起点。无论您要处理图像、文本文件、视频还是备份,Blob 存储都能为您提供一种可扩展且安全的方式,在云中存储非结构化数据。
在本教程中,我将带您了解 Azure Blob 存储的要点——它是什么、为何重要,以及如何开始上手。我们将动手完成数据的上传与下载、设置权限,并管理生命周期策略,让您的存储保持精简高效。无论您是首次接触 Azure,还是要将 Blob 存储加入您的云工具箱,本指南都能帮助您快速入门。
什么是 Azure Blob 存储?
“Blob” 是 Binary Large Object(大型二进制对象) 的缩写——用于描述文本、图像、视频等非结构化数据的存储。Azure Blob 存储是 Microsoft Azure 在云中存储这些 Blob 的解决方案。
它提供灵活的存储——您只需按使用量付费。根据您对数据访问速度的需求,您可以选择不同的存储层(热、冷和归档)。作为云服务,它具备可扩展、安全且易于管理的特性。作为 Azure 服务,它还能与其他 Azure 服务(如 Azure Backup、Azure Synapse、Azure CDN、Azure ML 等)集成。
如果您对更广泛的 Azure 生态还不熟悉,我们的课程Understanding Microsoft Azure Architecture and Services提供了系统性的入门介绍。
设置 Azure Blob 存储
现在,让我们动手开始使用 Azure Blob 存储吧!本教程假设您已有 Azure 账户——无论是带有免费额度的试用账户,还是常规的付费账户。
创建存储帐户
首先,我们在 Azure 门户中创建一个 Storage 帐户:
datacampstorage1。接下来的页面会确认存储帐户已部署。选择 Go to resource 按钮查看新存储帐户的详细信息并进行后续操作。
您已经创建了一个新的存储帐户!
配置 Blob 容器
Azure Blob 存储将数据组织到容器中。每个容器可存放许多 Blob,类似于文件系统中的目录。容器中的 Blob 可以是多种文件类型,如 PDF、视频等。请根据区域、项目等使用容器对数据进行组织。
创建容器:
datacampstoragecontainer1的容器。Containers 页面现在会显示新容器:
在 Azure Blob 存储中上传与管理 Blob
向存储容器上传 Blob 的主要方式有三种:Azure 门户、命令行界面(CLI)以及 Storage Explorer 应用程序。本节我将说明如何用每种方法向 Blob 存储上传文件。
使用 Azure 门户
使用 Azure 门户上传文件:
作为上述步骤的替代方案,您也可以在 Containers 页面中选择某个容器后,再点击顶部的 Upload 按钮。
使用 Azure CLI
使用 CLI 向 Blob 存储上传文件:
foobar.txt:Ctrl + S保存,并用Ctrl + X退出 Nano 编辑器。Q退出less的输出。现在我们需要将该文件上传到 Blob 存储:
在上述命令中,存储帐户名为
datacampstorage1,容器名为datacampstoragecontainer1。如果您使用了不同的名称,请相应替换。文件成功上传后,您应会看到类似如下的输出信息:
如果您经常使用命令行,不妨将我们的Azure CLI 速查表放在手边,便于快速查找常用命令。
使用 Storage Explorer
您也可以使用 Azure 的 Storage Explorer 应用向 Blob 存储上传 Blob。上传文件至 Azure Blob 存储的方法如下:
管理 Blob
在将文件上传到 Blob 存储后,我将向您展示如何列出容器中的 Blob 以及如何下载 Blob。
列出 Blob
我们将使用 Azure 门户和 CLI 查看容器中的 Blob 列表。
Azure 门户
在 Azure 门户的 Containers 页面:
Azure CLI
在 Azure CLI 中,使用以下命令:
与之前一样,请替换为您存储帐户和容器名称的正确值。输出类似下面的示例:
下载 Blob
同样,您可以通过 Azure 门户或 CLI 下载 Blob。
Azure 门户
通过 Azure 门户下载 Blob:
Azure CLI
使用 Azure CLI 下载 Blob,使用下方命令:
请记得在上述命令中使用正确的参数值。
该 Blob 会被下载到 Azure 远程文件系统。例如,要查看上述使用的
/tmp目录内容,请在 Azure CLI 中使用ls命令:请注意,Azure CLI 既无法访问也不了解您的本地机器。
想更深入了解在 Azure 生态中管理 CI/CD 流水线,欢迎查看我们的Azure DevOps 教程。
使用前缀和虚拟目录组织 Blob
Azure Blob 存储以扁平文件系统组织数据。并不存在真正的目录或文件夹结构。所有 Blob 都以独立文件的形式存储在容器中。
在实际应用中,许多场景需要以目录结构存储数据。例如,某套 CCTV 监控系统可能需要将每天的视频存放在不同文件夹中。要实现这种效果,您可以在文件名中使用以斜杠分隔的前缀,模拟目录系统。
如果您有一个父目录
month1,其中包含两个子目录day1和day2,每个目录下都有一个名为image1.jpg的图像文件,那么它们的路径应列为:month1/day1/image1.jpgmonth1/day2/image1.jpgAzure Blob 存储允许您将这些路径(包含父级目录名与斜杠)用作 Blob 的文件名。
day1和day2并非目录名,而是各自 Blob 文件名的一部分。您的应用可以借助这种伪目录结构,将文件按目录结构组织起来。若您在使用 Blob 的同时也需要结构化数据存储,您或许还可以查看我们的Azure SQL 数据库指南。