找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

2598

积分

0

好友

346

主题
发表于 3 小时前 | 查看: 3| 回复: 0

上一篇文章介绍了如何创建 Azure 存储账户(Storage Account)以及如何授权用户、组和服务主体(Service Principal)进行访问或 API 调用。本篇将聚焦于存储账户的日常管理与操作。

1、创建容器(Container)

首先,进入已创建的存储账户,在左侧导航栏选择“Data storage”下的“Containers”选项。

Azure存储账户容器管理页面

点击“+ Add container”按钮,在弹出的配置面板中输入容器名称(例如 startech),并根据需求设置匿名访问级别(通常设为私有)。配置完成后,点击“Create”。

新建容器配置界面

容器创建成功后,会在列表中看到新建的条目。

容器创建成功列表

进入这个容器后,你可以进行文件夹的创建和文件的上传操作。

容器内部空状态

为了演示,我们上传一个名为 github-recovery-codes.txt 的文件。

上传文件到容器

文件上传成功后的界面如下所示。

容器内文件列表

2、访问容器内的文件

为了通过程序化方式访问容器内的文件,我们需要生成一个共享访问签名(SAS)令牌。

为容器生成 SAS 令牌

在容器页面,选择左侧“Settings”下的“Shared access tokens”。

进入共享访问令牌设置页面

在配置界面中,你可以设置签名方法、密钥、权限、令牌有效时间等。其中,“Permissions”定义了可以对容器内文件执行的操作(如读、写、删除、列表等)。为了演示,我们生成一个权限较全的令牌。

配置SAS令牌权限

配置完成后,点击“Generate SAS token and URL”,系统会生成对应的 SAS Token 和 SAS URL。

生成的SAS令牌与URL

生成的令牌具有有效期(例如到次日凌晨)。利用这个令牌,我们就可以通过工具或程序来操作容器内的文件。这里我们使用微软官方提供的命令行工具 azcopy 进行演示。

安装与使用 azcopy

首先,在 CentOS 系统上安装 azcopy

[root@k8sworker ~]# curl -sSL -O https://packages.microsoft.com/config/centos/9/packages-microsoft-prod.rpm
[root@k8sworker ~]# rpm -i packages-microsoft-prod.rpm
[root@k8sworker ~]# dnf install azcopy

下载文件到本地:
使用生成的 SAS URL,将容器内的文件下载到本地 /tmp 目录。

[root@k8sworker ~]# azcopy copy "https://starttech.blob.core.windows.net/starttech/github-recovery-codes.txt?sp=racwdl&st=2026-03-27T13:02:11Z&se=2026-03-27T21:17:11Z&spr=https&sv=2024-11-04&sr=c&sig=kzzQ2J4Efi8cZJCYfynmXeuBfyZ4wZx4OhT0nJYR6cA%3D" /tmp
INFO: Any empty folders will not be processed, because source and/or destination doesn't have full folder support
INFO: Scanning...

Job 26511d00-37b9-5b4c-6be3-d0fc1a010c55 has started
Log file is located at: /root/.azcopy/26511d00-37b9-5b4c-6be3-d0fc1a010c55.log

100.0 %, 1 Done, 0 Failed, 0 Pending, 0 Skipped, 1 Total, 2-sec Throughput (Mb/s): 0.0008

Job 26511d00-37b9-5b4c-6be3-d0fc1a010c55 summary
Elapsed Time (Minutes): 0.0334
Number of File Transfers: 1
Number of Folder Property Transfers: 0
Number of Symlink Transfers: 0
Total Number of Transfers: 1
Number of File Transfers Completed: 1
Number of Folder Transfers Completed: 0
Number of File Transfers Failed: 0
Number of Folder Transfers Failed: 0
Number of File Transfers Skipped: 0
Number of Folder Transfers Skipped: 0
Number of Symbolic Links Skipped: 0
Number of Hardlinks Converted: 0
Number of Hardlinks Skipped: 0
Number of Special Files Skipped: 0
Total Number of Bytes Transferred: 206
Final Job Status: Completed

验证文件是否下载成功:

[root@k8sworker ~]# ls -l /tmp/
total 4
-rw-r--r--. 1 root root 206 Mar 27 21:25 github-recovery-codes.txt

上传文件到容器根目录:

[root@k8sworker ~]# azcopy copy ./anaconda-ks.cfg "https://starttech.blob.core.windows.net/starttech/?sp=racwdl&st=2026-03-27T13:02:11Z&se=2026-03-27T21:17:11Z&spr=https&sv=2024-11-04&sr=c&sig=kzzQ2J4Efi8cZJCYfynmXeuBfyZ4wZx4OhT0nJYR6cA%3D"
INFO: Any empty folders will not be processed, because source and/or destination doesn't have full folder support
INFO: Scanning...

Job 034a8a1a-ec2c-294b-44af-ff7c1642eef3 has started
Log file is located at: /root/.azcopy/034a8a1a-ec2c-294b-44af-ff7c1642eef3.log

100.0 %, 1 Done, 0 Failed, 0 Pending, 0 Skipped, 1 Total, 2-sec Throughput (Mb/s): 0.0028

Job 034a8a1a-ec2c-294b-44af-ff7c1642eef3 summary
Elapsed Time (Minutes): 0.0333
Number of File Transfers: 1
Number of Folder Property Transfers: 0
Number of Symlink Transfers: 0
Total Number of Transfers: 1
Number of File Transfers Completed: 1
Number of Folder Transfers Completed: 0
Number of File Transfers Failed: 0
Number of Folder Transfers Failed: 0
Number of File Transfers Skipped: 0
Number of Folder Transfers Skipped: 0
Number of Symbolic Links Skipped: 0
Number of Hardlinks Converted: 0
Number of Hardlinks Skipped: 0
Number of Special Files Skipped: 0
Total Number of Bytes Transferred: 701
Final Job Status: Completed

上传后,可以在门户看到容器内现在有两个文件。

容器内包含两个文件

上传文件到子目录(自动创建):
即使容器内没有 test 文件夹,你也可以直接指定路径上传,azcopy 会自动创建。

[root@k8sworker ~]# azcopy copy ./anaconda-ks.cfg "https://starttech.blob.core.windows.net/starttech/test/?sp=racwdl&st=2026-03-27T13:02:11Z&se=2026-03-27T21:17:11Z&spr=https&sv=2024-11-04&sr=c&sig=kzzQ2J4Efi8cZJCYfynmXeuBfyZ4wZx4OhT0nJYR6cA%3D"
INFO: Any empty folders will not be processed, because source and/or destination doesn't have full folder support
INFO: Scanning...

Job 51b95b6e-b555-1048-75f0-9d44699ba2d9 has started
Log file is located at: /root/.azcopy/51b95b6e-b555-1048-75f0-9d44699ba2d9.log

100.0 %, 1 Done, 0 Failed, 0 Pending, 0 Skipped, 1 Total,

Job 51b95b6e-b555-1048-75f0-9d44699ba2d9 summary
Elapsed Time (Minutes): 0.1001
Number of File Transfers: 1
Number of Folder Property Transfers: 0
Number of Symlink Transfers: 0
Total Number of Transfers: 1
Number of File Transfers Completed: 1
Number of Folder Transfers Completed: 0
Number of File Transfers Failed: 0
Number of Folder Transfers Failed: 0
Number of File Transfers Skipped: 0
Number of Folder Property Transfers Skipped: 0
Number of Symbolic Links Skipped: 0
Number of Hardlinks Converted: 0
Number of Hardlinks Skipped: 0
Number of Special Files Skipped: 0
Total Number of Bytes Transferred: 701
Final Job Status: Completed

上传后,在门户中可以看到 test 文件夹及其下的文件。

容器内test文件夹内容

3、通过网络(Network)配置访问控制

除了使用SAS令牌,你还可以在存储账户级别配置网络规则,以控制哪些IP地址或虚拟网络可以访问存储账户及其容器,这对于构建安全的云原生应用环境至关重要。

进入存储账户的“Security + networking” -> “Networking”设置。

存储账户网络配置入口

默认情况下,新创建的存储账户允许从所有网络访问。

默认允许所有网络访问

为了测试,我们配置一个非本地的IP地址(例如 120.164.81.3)为允许访问的地址,这意味着我们自己的公网IP将无法访问。配置保存后测试:

[root@k8sworker ~]# azcopy ls "https://starttech.blob.core.windows.net/starttech/test/?sp=racwdl&st=2026-03-27T13:02:11Z&se=2026-03-27T21:17:11Z&spr=https&sv=2024-11-04&sr=c&sig=kzzQ2J4Efi8cZJCYfynmXeuBfyZ4wZx4OhT0nJYR6cA%3D"

failed to traverse container: cannot list files due to reason HEAD https://starttech.blob.core.windows.net/starttech/test
--------------------------------------------------------------------------------
RESPONSE 403: 403 This request is not authorized to perform this operation.
ERROR CODE: AuthorizationFailure
--------------------------------------------------------------------------------
Response contained no body
--------------------------------------------------------------------------------

再将允许的IP地址修改回我们自己的公网IP(例如 180.164.81.3),再次测试(在Windows环境下使用azcopy):

C:\Users\admin>C:\Users\admin\Downloads\azcopy_windows_amd64_10.32.2\azcopy_windows_amd64_10.32.2\azcopy.exe ls "https://starttech.blob.core.windows.net/starttech/test/?sp=racwdl&st=2026-03-27T13:02:11Z&se=2026-03-27T21:17:11Z&spr=https&sv=2024-11-04&sr=c&sig=kzzQ2J4Efi8cZJCYfynmXeuBfyZ4wZx4OhT0nJYR6cA%3D"
anaconda-ks.cfg; Content Length: 701.00 B

此时,网络访问状态已变为“Enabled from selected networks”。

网络访问状态更新为仅选定网络

在企业真实环境中,更推荐使用内网调用,通过配置专用终结点(Private Endpoint)实现网络隔离,避免数据暴露在公网。这不仅是基础的安全实践,也是高效运维/DevOps/SRE流程的一部分。

专用终结点配置页面

关于覆盖文件的补充:
在上传文件时,可以使用 --overwrite=false 参数来跳过目标位置已存在的同名文件。

[root@k8sworker ~]# azcopy copy ./anaconda-ks.cfg "https://starttech.blob.core.windows.net/starttech/test/?sp=racwdl&st=2026-03-27T13:02:11Z&se=2026-03-27T21:17:11Z&spr=https&sv=2024-11-04&sr=c&sig=kzzQ2J4Efi8cZJCYfynmXeuBfyZ4wZx4OhT0nJYR6cA%3D"  --overwrite=false
INFO: Any empty folders will not be processed, because source and/or destination doesn’t have full folder support
INFO: Scanning...

Job 41d22cc9-75ed-f944-6297-8365f2d45cb1 has started
Log file is located at: /root/.azcopy/41d22cc9-75ed-f944-6297-8365f2d45cb1.log

0.0 %, 0 Done, 0 Failed, 0 Pending, 1 Skipped, 1 Total,

Job 41d22cc9-75ed-f944-6297-8365f2d45cb1 summary
Elapsed Time (Minutes): 0.0667
Number of File Transfers: 1
Number of Folder Property Transfers: 0
Number of Symlink Transfers: 0
Total Number of Transfers: 1
Number of File Transfers Completed: 0
Number of Folder Property Transfers Completed: 0
Number of File Transfers Failed: 0
Number of Folder Property Transfers Failed: 0
Number of File Transfers Skipped: 1
Number of Folder Property Transfers Skipped: 0
Number of Symbolic Links Skipped: 0
Number of Hardlinks Converted: 0
Number of Hardlinks Skipped: 0
Number of Special Files Skipped: 0
Total Number of Bytes Transferred: 0
Final Job Status: CompletedWithSkipped

从门户查看,该文件的上传时间戳没有变化,说明文件被跳过,未覆盖。

文件未覆盖时间戳未变

4、创建文件共享(File Share)

Azure 存储账户除了 Blob 容器,还支持创建文件共享(类似网络文件共享)。在“Data storage”下选择“File shares”。

文件共享管理入口

点击“+ File share”创建,完成后可以查看其概览。

SMB文件共享概览页面

上图创建的是支持 SMB 协议的文件共享。注意,文件共享的协议支持取决于存储账户的类型。之前的文章我们创建了测试用户并授予了存储账户权限,该用户在门户中可以看到存储账户下的容器和文件共享。

拥有权限的用户视图

在文件共享的管理界面,可以对其属性进行操作,例如查看连接信息。

文件共享属性操作菜单

对于 SMB 文件共享,Azure 门户提供了从 Windows、Linux、macOS 系统连接的详细命令。下图展示了 Linux 系统的连接脚本。

Linux连接SMB文件共享命令

5、创建支持 NFS 协议的文件共享

如果想要创建支持 NFS 协议的文件共享,存储账户的性能层必须是 Premium。我们之前创建的“Standard”性能层存储账户只支持 SMB。

标准性能层存储账户概览

因此,我们需要新建一个性能层为“Premium”、账户类型为“FileStorage”的存储账户。

创建高级性能层存储账户

等待部署完成。

存储账户部署成功

查看新账户详情,确认“Performance”为“Premium”,“Account kind”为“FileStorage”。

高级性能层存储账户详情

基于这个新存储账户创建文件共享时,就可以选择 NFS 协议了。

创建NFS文件共享配置界面

创建成功后,可以在列表中看到协议为 NFS 的文件共享。

NFS文件共享列表

在 NFS 文件共享的“Connect”页面,可以看到连接说明。但请注意关键提示:NFS 协议只能从虚拟网络(VNet)内部的机器访问

NFS文件共享连接说明与网络提示

这是因为当前存储账户的网络配置允许从所有网络访问,但 NFS 协议本身要求必须配置虚拟网络规则。

存储账户网络配置状态

因此,要使用 NFS 文件共享,必须先配置虚拟网络规则,将存储账户的访问限制在指定的虚拟网络内。这样既实现了网络隔离,又满足了 NFS 协议的访问要求。配置好后,该 NFS 共享可以作为 Azure AKS(Kubernetes 服务)的持久存储卷使用。

总结

以上就是 Azure 存储账户从创建容器、生成访问令牌、进行文件操作,到配置网络访问控制,以及创建 SMB/NFS 文件共享的常规操作流程。理解并掌握这些配置,对于在 Azure 上构建安全、可靠的数据存储方案至关重要。希望这篇指南能对你的实际工作有所帮助。欢迎在云栈社区交流更多云技术实践经验。




上一篇:专业级MySQL到PostgreSQL数据迁移开源工具MySQL2PG实战指南
下一篇:腾讯游戏数据治理实践:AI如何驱动资源治理与协作提效
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-3-28 08:36 , Processed in 0.714852 second(s), 40 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表