适用于: ✔️ SMB 文件共享
Azure 文件存储提供企业级文件共享,这些共享可以纵向扩展以满足你的存储需求,并且可同时由数千个客户端访问。 Azure 文件存储提供了两种用于装载Azure文件共享的行业标准协议:Server Message Block (SMB) 协议和 Network 文件系统 (NFS) 协议。 选择最适合工作负荷的协议。 Azure 文件存储不支持使用 SMB 和 NFS 协议访问单个Azure文件共享,尽管可以在同一存储帐户中创建 SMB 和 NFS 经典文件共享。
本文将介绍 SMB Azure 文件共享。 有关 NFS Azure 文件共享的信息,请参阅 NFS Azure 文件共享。
常见方案
对许多应用程序(包括最终用户文件共享和支持数据库和应用程序的文件共享)使用 SMB 文件共享。 在以下方案中使用 SMB 文件共享:
- 最终用户文件共享,如团队共享和主目录
- Windows 系统应用程序(例如 SQL Server 数据库或业务线应用程序)的后端存储
- 新的应用程序和服务开发,特别是如果需要随机 IO 和分层存储
功能
Azure 文件存储支持 SMB 和 Azure 的主要功能,这些功能是 SMB 文件共享的生产部署所需的:
- SMB 持续可用性 (CA)
- AD 域加入和自由访问控制列表(DACL)
- 将无服务器备份与 Azure 备份集成
- 使用 Azure 专用终结点进行网络隔离
- 使用 SMB 多通道实现高网络吞吐量(仅适用于 SSD 文件共享)
- SMB 通道加密,包括 AES-256-GCM、AES-128-GCM 和 AES-128-CCM
- 通过 VSS 集成共享快照支持以前的版本
- Azure 文件共享上的自动软删除以防止意外删除
- 可以选择通过 Internet 安全的 SMB 3.0+ 进行访问的文件共享
可以直接装载 SMB 文件共享,也可以使用 Azure 文件同步 在本地装载 SMB 文件共享。
Windows SMB 支持和 Azure 文件存储功能
下表显示了 Windows 对于安装 Azure 文件共享时支持的 SMB 版本、SMB 多通道1和 SMB 通道加密的支持。 使用此表来确定访问Azure文件共享的客户端操作系统的功能支持和安全要求。 将最新的 KB 用于Windows版本。
| Windows 版本 |
SMB 版本 |
SMB 多通道(仅限 SSD) |
最大 SMB 通道加密 |
| Windows Server 2025 |
SMB 3.1.1 |
是的 |
AES-256-GCM |
| Windows 11,版本 24H2 |
SMB 3.1.1 |
是的 |
AES-256-GCM |
| Windows 11 版本 23H2 |
SMB 3.1.1 |
是的 |
AES-256-GCM |
| Windows 11 版本 22H2 |
SMB 3.1.1 |
是的 |
AES-256-GCM |
| Windows 10 版本 22H2 |
SMB 3.1.1 |
是的 |
AES-128-GCM |
| Windows Server 2022 |
SMB 3.1.1 |
是的 |
AES-256-GCM |
| Windows 11 版本 21H2 |
SMB 3.1.1 |
是的 |
AES-256-GCM |
| Windows 10 版本 21H2 |
SMB 3.1.1 |
是的 |
AES-128-GCM |
| Windows 10,版本 21H1 |
SMB 3.1.1 |
是,具有 KB5003690 或更新的版本 |
AES-128-GCM |
| Windows Server,版本 20H2 |
SMB 3.1.1 |
是,具有 KB5003690 或更新的版本 |
AES-128-GCM |
| Windows 10 版本 20H2 |
SMB 3.1.1 |
是,具有 KB5003690 或更新的版本 |
AES-128-GCM |
| Windows Server 版本 2004 |
SMB 3.1.1 |
是,具有 KB5003690 或更新的版本 |
AES-128-GCM |
| Windows 10 版本 2004 |
SMB 3.1.1 |
是,具有 KB5003690 或更新的版本 |
AES-128-GCM |
| Windows Server 2019 |
SMB 3.1.1 |
是,具有 KB5003703 或更新的版本 |
AES-128-GCM |
| Windows 10 版本 1809 |
SMB 3.1.1 |
是,具有 KB5003703 或更新的版本 |
AES-128-GCM |
| Windows Server 2016 |
SMB 3.1.1 |
是,具有 KB5004238 或更高版本并且应用了注册表项 |
AES-128-GCM |
| Windows 10 版本 1607 |
SMB 3.1.1 |
是,具有 KB5004238 或更高版本并且应用了注册表项 |
AES-128-GCM |
| Windows 10 版本 1507 |
SMB 3.1.1 |
是,拥有 KB5004249 或更新版本且应用了注册表项 |
AES-128-GCM |
| Windows Server 2012 R22 |
SMB 3.0 |
否 |
AES-128-CCM |
| Windows Server 20122 |
SMB 3.0 |
否 |
AES-128-CCM |
| Windows 8.13 |
SMB 3.0 |
否 |
AES-128-CCM |
| Windows Server 2008 R23 |
SMB 2.1 |
否 |
不支持 |
| Windows 73 |
SMB 2.1 |
否 |
不支持 |
1Azure 文件存储仅支持 SSD(高级)文件共享上的 SMB 多通道。
2Windows Server 2012 和 Windows Server 2012 R2 的常规Microsoft支持已结束。 只能通过 扩展安全更新(ESU)计划购买对安全更新的其他支持。
3Microsoft对 Windows 7、Windows 8.1 和 Windows Server 2008 R2 的支持已结束。 迁离这些操作系统。
SMB 协议设置
Azure 文件存储提供多个设置,这些设置会影响 SMB 协议的行为、性能和安全性。 这些配置用于Azure存储帐户内所有Azure经典文件共享。
SMB 持续可用性
Azure 文件存储支持 SMB 持续可用性(CA),以帮助应用程序在暂时性基础结构事件期间保持可用状态。 持续可用性是 SMB 协议的一项功能,可在短暂中断(例如服务器故障转移或短网络中断)期间保持打开的文件句柄处于活动状态。 默认情况下,所有 SMB Azure文件共享都持续可用。 无法禁用此设置。
持续可用性提供的内容
持续可用性提供以下优势:
- 在暂时性故障中幸存下来的持久性文件句柄
- 故障转移后 I/O操作的透明恢复
- 基础结构转换期间的数据一致性
- 降低应用程序中断的风险
如果发生短暂的连接中断,SMB 客户端会自动重试作并重新建立对打开文件的访问权限,而无需应用程序重新打开这些文件。 对于维护长时间运行的文件会话的工作负荷,此行为尤其重要。
持续可用性的工作原理
持续可用性依赖于持久性 SMB 句柄。 在暂时性中断(通常持续几分钟)期间,以下语句适用:
- 打开的文件句柄仍然有效。
- SMB 客户端重试挂起的 I/O 操作。
- Azure 文件存储在连接恢复后会透明地恢复操作。
由于 Azure 文件存储 优先考虑正确性和持久性,因此客户端会等待和重试,而不是让操作立即失败。
连接丢失期间的超时行为
由于持续可用性需要重试行为,SMB 操作在网络中断期间可能需要更长的时间才能发生超时。
例如,可能会遇到以下情况:
- Windows SMB 客户端可能会在返回错误之前重试操作几分钟。
- 重新建立连接时,应用程序可能暂时暂停。
此行为是设计造成的,因为它有助于保持处理完整性并防止数据损坏。 频繁断开连接的工作负载(例如漫游笔记本电脑或不稳定的网络连接)在返回故障之前可能会经历较长的等待时间。
SMB 多通道
SMB 多通道使 SMB 3.x 客户端能够与 SMB 文件共享建立多个网络连接。 Azure 文件存储仅支持 SSD(高级)文件共享上的 SMB 多通道。 对于Windows客户端,SMB 多通道默认在所有Azure区域中启用。 在大多数情况下,尤其是在多线程任务负载中,客户端可以观察到使用 SMB 多通道会提高性能。 但是,对于某些特定方案(例如单线程工作负载或出于测试目的),可能需要禁用 SMB 多通道。 有关更多详细信息,请参阅 SMB 多通道 。
安全性
Azure 文件存储使用Azure存储服务加密(SSE)加密静态所有数据。
静止数据加密
存储服务加密在 Windows 上的工作方式与 BitLocker 类似:它会加密文件系统级别下的数据。 由于数据在Azure文件共享的文件系统下加密,因为它编码为磁盘,因此无需访问客户端上的基础密钥,才能读取或写入Azure文件共享。
SMB 安全设置
Azure 文件存储公开可以切换的设置,以使 SMB 协议更兼容或更安全,具体取决于组织的要求。 默认情况下,Azure 文件存储配置为最大兼容,因此请记住,限制这些设置可能会导致某些客户端无法连接。
Azure 文件存储 提供以下设置:
-
SMB 版本:允许哪些 SMB 版本。 支持的协议版本为 SMB 3.1.1、SMB 3.0 和 SMB 2.1。 默认情况下,允许所有 SMB 版本,尽管如果启用了“需要安全传输”,则不允许 SMB 2.1,因为 SMB 2.1 不支持传输中的加密。
-
身份验证方法:允许哪些 SMB 身份验证方法。 支持的身份验证方法是 NTLMv2(仅存储帐户密钥)和 Kerberos。 默认情况下,允许所有的身份验证方法。 如果删除了 NTLMv2,则无法使用存储帐户密钥装载 Azure 文件共享。 Azure 文件存储不支持对域凭据使用 NTLM 身份验证。
-
Kerberos 票证加密:允许哪些加密算法。 支持的加密算法是 AES-256(强烈建议)和 RC4-HMAC。
-
SMB 通道加密:允许哪些 SMB 通道加密算法。 支持的加密算法为 AES-256-GCM、AES-128-GCM 和 AES-128-CCM。 如果仅选择 AES-256-GCM,则需要通过在每个客户端上以管理员身份打开 PowerShell 终端并运行
Set-SmbClientConfiguration -EncryptionCiphers "AES_256_GCM" -Confirm:$false来告知连接客户端使用它。 在早于 Windows 11/Windows Server 2022 的 Windows 客户端上,不支持使用 AES-256-GCM。
可以使用Azure门户、Azure PowerShell或Azure CLI查看和更改 SMB 安全设置。 选择所需的选项卡以查看有关如何获取和设置 SMB 安全设置的步骤。 请注意,在建立 SMB 会话时会检查这些设置,如果未满足,SMB 会话设置将失败并出现错误 STATUS_ACCESS_DENIED。
若要使用 Azure 门户查看或更改 SMB 安全设置,请执行以下步骤:
登录到 Azure 门户并搜索 存储帐户。 选择要查看或更改 SMB 安全设置的存储帐户。
在服务菜单中,选择 “数据存储>文件共享”。
在“文件共享设置”下选择与“安全性”关联的值。
在“配置文件”下,选择“最大兼容性”、“最大安全性”或“自定义”。 选择“自定义”可让你为 SMB 协议版本、SMB 通道加密、身份验证机制和 Kerberos 票证加密创建自定义配置文件。
重要
选择 “最大安全性 ”或使用自定义设置可能会导致某些客户端无法连接。 例如,从 Windows Server 2022 和 Windows 11 开始,引入了 AES-256-GCM 作为 SMB 通道加密的一种选项。 这意味着不支持 AES-256-GCM 的旧客户端无法连接。 如果仅选择 AES-256-GCM,则需要告知Windows Server 2022和Windows 11客户端仅使用 AES-256-GCM,方法是在每个客户端上以管理员身份打开 PowerShell 终端,并运行 Set-SmbClientConfiguration -EncryptionCiphers "AES_256_GCM" -Confirm:$false。
输入所需的安全设置后,选择“ 保存”。
要获取 SMB 协议设置,请使用 Get-AzStorageFileServiceProperty cmdlet。 将 <resource-group> 和 <storage-account> 替换为适用于你的环境的值。 如果将任何 SMB 安全设置设为 null,例如禁用 SMB 通道加密时,请参阅脚本中关于如何注释掉某些行的说明。
$resourceGroupName = "<resource-group>"
$storageAccountName = "<storage-account>"
# Get reference to storage account
$storageAccount = Get-AzStorageAccount `
-ResourceGroupName $resourceGroupName `
-StorageAccountName $storageAccountName
# If you've never changed any SMB security settings, the values for the SMB security
# settings returned by Azure Files will be null. Null returned values should be interpreted
# as "default settings are in effect". To make this more user-friendly, the following
# PowerShell commands replace null values with the human-readable default values.
# If you've deliberately set any of your SMB security settings to null, for example by
# disabling SMB channel encryption, comment out the following four lines to avoid
# changing the security settings back to defaults.
$smbProtocolVersions = "SMB2.1", "SMB3.0", "SMB3.1.1"
$smbAuthenticationMethods = "NTLMv2", "Kerberos"
$smbKerberosTicketEncryption = "RC4-HMAC", "AES-256"
$smbChannelEncryption = "AES-128-CCM", "AES-128-GCM", "AES-256-GCM"
# Gets the current values of the SMB security settings
Get-AzStorageFileServiceProperty -StorageAccount $storageAccount | `
Select-Object -Property `
ResourceGroupName, `
StorageAccountName, `
@{
Name = "SmbProtocolVersions";
Expression = {
if ($null -eq $_.ProtocolSettings.Smb.Versions) {
[String]::Join(", ", $smbProtocolVersions)
} else {
[String]::Join(", ", $_.ProtocolSettings.Smb.Versions)
}
}
},
@{
Name = "SmbChannelEncryption";
Expression = {
if ($null -eq $_.ProtocolSettings.Smb.ChannelEncryption) {
[String]::Join(", ", $smbChannelEncryption)
} else {
[String]::Join(", ", $_.ProtocolSettings.Smb.ChannelEncryption)
}
}
},
@{
Name = "SmbAuthenticationMethods";
Expression = {
if ($null -eq $_.ProtocolSettings.Smb.AuthenticationMethods) {
[String]::Join(", ", $smbAuthenticationMethods)
} else {
[String]::Join(", ", $_.ProtocolSettings.Smb.AuthenticationMethods)
}
}
},
@{
Name = "SmbKerberosTicketEncryption";
Expression = {
if ($null -eq $_.ProtocolSettings.Smb.KerberosTicketEncryption) {
[String]::Join(", ", $smbKerberosTicketEncryption)
} else {
[String]::Join(", ", $_.ProtocolSettings.Smb.KerberosTicketEncryption)
}
}
}
根据组织的安全性、性能和兼容性要求,你可能需要修改 SMB 协议设置。 以下 PowerShell 命令将 SMB 文件共享限制为仅使用最安全的选项。
重要
如果将 SMB Azure 文件共享限制为仅使用最安全的选项,可能会导致无法连接某些客户端。 例如,从 Windows Server 2022 和 Windows 11 开始,引入了 AES-256-GCM 作为 SMB 通道加密的一种选项。 此限制意味着不支持 AES-256-GCM 的旧客户端无法连接。 如果仅选择 AES-256-GCM,则需要告知Windows Server 2022和Windows 11客户端仅使用 AES-256-GCM,方法是在每个客户端上以管理员身份打开 PowerShell 终端,并运行 Set-SmbClientConfiguration -EncryptionCiphers "AES_256_GCM" -Confirm:$false。
Update-AzStorageFileServiceProperty `
-ResourceGroupName $resourceGroupName `
-StorageAccountName $storageAccountName `
-SmbAuthenticationMethod "Kerberos" `
-SmbChannelEncryption "AES-256-GCM" `
-SmbKerberosTicketEncryption "AES-256" `
-SmbProtocolVersion "SMB3.1.1"
若要获取 SMB 安全设置的状态,请使用 az storage account file-service-properties show 命令。 在运行这些 Bash 命令之前,请将 <resource-group> 和 <storage-account> 替换为适用于您的环境的相应值。 如果故意将任何 SMB 安全设置设置为 null,例如禁用 SMB 通道加密,请参阅脚本中的说明,了解如何注释掉某些行。
RESOURCE_GROUP_NAME="<resource-group>"
STORAGE_ACCOUNT_NAME="<storage-account>"
# If you've never changed any SMB security settings, the values for the SMB security
# settings returned by Azure Files will be null. Null returned values should be interpreted
# as "default settings are in effect". To make this more user-friendly, the commands in the
# following two sections replace null values with the human-readable default values.
# If you've deliberately set any of your SMB security settings to null, for example by
# disabling SMB channel encryption, comment out the following two sections before
# running the script to avoid changing the security settings back to defaults.
# Values to be replaced
REPLACESMBPROTOCOLVERSION="\"smbProtocolVersions\": null"
REPLACESMBCHANNELENCRYPTION="\"smbChannelEncryption\": null"
REPLACESMBAUTHENTICATIONMETHODS="\"smbAuthenticationMethods\": null"
REPLACESMBKERBEROSTICKETENCRYPTION="\"smbKerberosTicketEncryption\": null"
# Replacement values for null parameters. If you copy this into your own
# scripts, you will need to ensure that you keep these variables up-to-date with any new
# options we may add to these parameters in the future.
DEFAULTSMBPROTOCOLVERSIONS="\"smbProtocolVersions\": \"SMB2.1;SMB3.0;SMB3.1.1\""
DEFAULTSMBCHANNELENCRYPTION="\"smbChannelEncryption\": \"AES-128-CCM;AES-128-GCM;AES-256-GCM\""
DEFAULTSMBAUTHENTICATIONMETHODS="\"smbAuthenticationMethods\": \"NTLMv2;Kerberos\""
DEFAULTSMBKERBEROSTICKETENCRYPTION="\"smbKerberosTicketEncryption\": \"RC4-HMAC;AES-256\""
# Build JMESPath query string
QUERY="{"
QUERY="${QUERY}smbProtocolVersions: protocolSettings.smb.versions,"
QUERY="${QUERY}smbChannelEncryption: protocolSettings.smb.channelEncryption,"
QUERY="${QUERY}smbAuthenticationMethods: protocolSettings.smb.authenticationMethods,"
QUERY="${QUERY}smbKerberosTicketEncryption: protocolSettings.smb.kerberosTicketEncryption"
QUERY="${QUERY}}"
# Get protocol settings from the Azure Files FileService object
PROTOCOLSETTINGS=$(az storage account file-service-properties show \
--resource-group $RESOURCE_GROUP_NAME \
--account-name $STORAGE_ACCOUNT_NAME \
--query "${QUERY}")
# Replace returned values if null with default values
PROTOCOLSETTINGS="${protocolSettings/$REPLACESMBPROTOCOLVERSION/$DEFAULTSMBPROTOCOLVERSIONS}"
PROTOCOLSETTINGS="${protocolSettings/$REPLACESMBCHANNELENCRYPTION/$DEFAULTSMBCHANNELENCRYPTION}"
PROTOCOLSETTINGS="${protocolSettings/$REPLACESMBAUTHENTICATIONMETHODS/$DEFAULTSMBAUTHENTICATIONMETHODS}"
PROTOCOLSETTINGS="${protocolSettings/$REPLACESMBKERBEROSTICKETENCRYPTION/$DEFAULTSMBKERBEROSTICKETENCRYPTION}"
# Print returned settings
echo $PROTOCOLSETTINGS
根据组织的安全性、性能和兼容性要求,你可能需要修改 SMB 协议设置。 以下 Azure CLI 命令将 SMB 文件共享限制为仅使用最安全的选项。
重要
如果将 SMB Azure 文件共享限制为仅使用最安全的选项,可能会导致无法连接某些客户端。 例如,从 Windows Server 2022 和 Windows 11 开始,引入了 AES-256-GCM 作为 SMB 通道加密的一种选项。 此限制意味着不支持 AES-256-GCM 的旧客户端无法连接。 如果仅选择 AES-256-GCM,则需要告知Windows Server 2022和Windows 11客户端仅使用 AES-256-GCM,方法是在每个客户端上以管理员身份打开 PowerShell 终端,并运行 Set-SmbClientConfiguration -EncryptionCiphers "AES_256_GCM" -Confirm:$false。
az storage account file-service-properties update \
--resource-group $RESOURCE_GROUP_NAME \
--account-name $STORAGE_ACCOUNT_NAME \
--versions "SMB3.1.1" \
--channel-encryption "AES-256-GCM" \
--auth-methods "Kerberos" \
--kerb-ticket-encryption "AES-256"
限制
SMB Azure文件共享支持 SMB 协议和 NTFS 文件系统支持的功能子集。 尽管大多数用例和应用程序不需要这些功能,但如果某些应用程序依赖于不支持的功能,则某些应用程序可能无法正常使用Azure 文件存储。 不支持以下功能:
区域可用性
SMB Azure 文件共享在每个 Azure 区域中可用。 SSD 文件共享在 区域子集中可用。
后续步骤