本文介绍如何加密 NFS Azure 文件共享中传输的数据。
重要
- Azure 文件共享 NFS v4.1 的传输中加密功能目前为预览版。
- 请参阅 预览版使用条款 |Microsoft Azure。
Azure 文件 NFS v4.1 卷通过启用安全的 TLS 连接,保护传输中的数据免受拦截(包括 MITM 攻击)来增强网络安全。
使用开源的 TLS 包装器 Stunnel,Azure 文件使用 AES-GCM 对 NFS 客户端与 Azure 文件之间的 TCP 流进行强加密,而无需使用 Kerberos。 这可确保数据保密性,同时无需复杂的设置或外部身份验证系统(如 Active Directory)。
AZNFS 实用工具包通过在客户端上安装和设置 Stunnel 来简化加密装载。 在 packages.microsoft.com 上,AZNFS 创建一个本地安全终结点,以透明方式通过加密连接转发 NFS 客户端请求。 关键体系结构组件包括:
AZNFS 装载帮助程序:一个客户端实用工具包,用于抽象化为 NFSv4.1 流量建立安全隧道的复杂性。
Stunnel 进程:每个存储帐户客户端进程,该进程侦听本地端口上的 NFS 客户端流量,并通过 TLS 安全地将其转发到 Azure 文件 NFS 服务器。
AZNFS 监视器:AZNFS 包运行后台作业,确保 stunnel 进程正在运行,自动重启终止的隧道,并在卸载所有关联的 NFS 装载后清理未使用的进程。
支持的区域
Azure 高级文件支持的所有区域现在都支持传输中的加密,除了韩国中部、西欧、日本西部、中国北部 3 和以色列中部。
注册预览版
若要为 NFS 共享启用传输中的加密,必须注册预览功能。
在预览功能下搜索“传输中的 Azure NFS 文件共享加密”,通过 Azure 门户注册。
有关详细信息,请参阅 在 Azure 订阅中设置预览功能。
强制在传输中加密
通过在存储帐户上启用 安全传输所需的 设置,可以确保对存储帐户中 NFS 卷的所有装载都加密。
但是,对于想要在同一存储帐户上的 TLS 和非 TLS 连接之间保持灵活性的用户, 安全传输 设置必须保持 OFF。
如何加密 NFS 共享的传输中的数据(预览版)
按照以下步骤加密传输中的数据:
- 确保客户端上安装所需的 AZNFS 装载帮助程序包。
- 使用 TLS 加密装载 NFS 文件共享。
- 验证数据加密是否成功。
步骤 1:检查 AZNFS 装载帮助程序包的安装情况
若要检查是否在客户端上安装 AZNFS 装载帮助程序包,请运行以下命令:
systemctl is-active --quiet aznfswatchdog && echo -e "\nAZNFS mounthelper is installed! \n"
如果已安装包,你将看到消息 AZNFS mounthelper is installed!
。 如果未安装,则需要使用相应的命令在客户端上安装 AZNFS 装载帮助程序包。
curl -sSL -O https://packages.microsoft.com/config/$(source /etc/os-release && echo "$ID/$VERSION_ID")/packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
rm packages-microsoft-prod.deb
sudo apt-get update
sudo apt-get install aznfs
重要
支持 AZNFS 的 Linux 分发版包括:
- Ubuntu (18.04 LTS、20.04 LTS、22.04 LTS、24.04 LTS)
- Centos7、Centos8
- RedHat7、RedHat8、RedHat9
- Rocky8、Rocky9
- SUSE (SLES 15)
- Oracle Linux
- Alma Linux
步骤 2:装载 NFS 文件共享
若要 使用 TLS 加密装载 NFS 文件共享,请执行以下作:
- 在客户端上创建目录。
sudo mkdir -p /mount/<storage-account-name>/<share-name>
- 使用以下 cmdlet 装载 NFS 共享。 将
<storage-account-name>
替换为存储帐户的名称,并将<share-name>
替换为文件共享的名称。
sudo mount -t aznfs <storage-account-name>.file.core.windows.net:/<storage-account-name>/<share-name> /mount/<storage-account-name>/<share-name> -o vers=4,minorversion=1,sec=sys,nconnect=4
在没有 TLS 加密的情况下装载 NFS 共享:
sudo mount -t aznfs <storage-account-name>.file.core.windows.net:/<storage-account-name>/<share-name> /mount/<storage-account-name>/<share-name> -o vers=4,minorversion=1,sec=sys,nconnect=4,notls
要在重新启动时自动装载共享,请通过添加以下行在 /etc/fstab
文件中创建条目:
<storage-account-name>.file.core.windows.net:/<storage-account-name>/<container-name> /nfsdata aznfs defaults,sec=sys,vers=4.1,nolock,proto=tcp,nofail,_netdev 0 2
注释
在运行装载命令之前,请确保已设置环境变量AZURE_ENDPOINT_OVERRIDE。 在非公有 Azure 云区域中装载文件共享或使用自定义 DNS 配置时,这是必需的。
例如,对于 Azure 中国云: export AZURE_ENDPOINT_OVERRIDE="chinacloudapi.cn"
步骤 3:验证传输中的数据加密是否成功
运行 df -Th
命令。
它指示客户端通过本地端口 127.0.0.1 而不是外部网络进行连接。 stunnel 进程侦听 127.0.0.1 (localhost) 上从 NFS 客户端传入的 NFS 流量。 然后,Stunnel 截获 此流量,并通过 TLS 安全地将其转发到 Azure 上的 Azure 文件 NFS 服务器。
若要检查发到 NFS 服务器的流量是否已加密,请使用 tcpdump
命令捕获端口 2049 上的数据包。
sudo tcpdump -i any port 2049 -w nfs_traffic.pcap
在 Wireshark 中打开捕获时,有效负载将显示为“应用程序数据”而不是可读文本。
注释
从虚拟机到同一服务器终结点的所有流量都使用单个连接。 AZNFS 装载帮助程序可确保在将共享装载到该服务器时不能混合使用 TLS 和非 TLS 配置。 此规则适用于同一存储帐户和解析为同一 IP 地址的不同存储帐户中的共享。
故障排除
如果先前对同一服务器的 TLS 加密挂载在成功完成之前终止,则非 TLS (notls) 装载操作可能会失败。 尽管 aznfswatchdog 服务在超时后自动清理过时的条目,但在清理完成之前尝试新的非 TLS 装载可能会失败。
若要解决此问题,请使用清理选项重新装载共享,这会立即清除任何过时条目:
sudo mount -t aznfs <storage-account-name>.file.core.windows.net:/<storage-account-name>/<share-name> /mount/<storage-account-name>/<share-name> -o vers=4,minorversion=1,sec=sys,nconnect=4,notls,clean
如果装载问题继续,请检查日志文件以获取更多故障排除详细信息:
- 装载帮助程序和监视器日志:
/opt/microsoft/aznfs/data/aznfs.log
- Stunnel 日志:
/etc/stunnel/microsoft/aznfs/nfsv4_fileShare/logs