Microsoft Azure Files Storage

Microsoft Azure Files Storage

路径指定为 remote:,你也可以指定子目录, 例如 remote:path/to/dir

配置

以下是一个配置 Microsoft Azure 文件存储的示例,远程存储名为 remote。首先运行:

 rclone config

这将引导你完成一个交互式的设置过程:

No remotes found, make a new one?
n) New remote
s) Set configuration password
q) Quit config
n/s/q> n
name> remote
Type of storage to configure.
Choose a number from below, or type in your own value
[snip]
XX / Microsoft Azure Files Storage
   \ "azurefiles"
[snip]

Option account.
Azure Storage Account Name.
Set this to the Azure Storage Account Name in use.
Leave blank to use SAS URL or connection string, otherwise it needs to be set.
If this is blank and if env_auth is set it will be read from the
environment variable `AZURE_STORAGE_ACCOUNT_NAME` if possible.
Enter a value. Press Enter to leave empty.
account> account_name

Option share_name.
Azure Files Share Name.
This is required and is the name of the share to access.
Enter a value. Press Enter to leave empty.
share_name> share_name

Option env_auth.
Read credentials from runtime (environment variables, CLI or MSI).
See the [authentication docs](/azurefiles#authentication) for full info.
Enter a boolean value (true or false). Press Enter for the default (false).
env_auth> 

Option key.
Storage Account Shared Key.
Leave blank to use SAS URL or connection string.
Enter a value. Press Enter to leave empty.
key> base64encodedkey==

Option sas_url.
SAS URL.
Leave blank if using account/key or connection string.
Enter a value. Press Enter to leave empty.
sas_url> 

Option connection_string.
Azure Files Connection String.
Enter a value. Press Enter to leave empty.
connection_string> 
[snip]

Configuration complete.
Options:
- type: azurefiles
- account: account_name
- share_name: share_name
- key: base64encodedkey==
Keep this "remote" remote?
y) Yes this is OK (default)
e) Edit this remote
d) Delete this remote
y/e/d> 

配置完成后,你就可以使用 rclone 了。

查看顶级目录下的所有文件:

rclone lsf remote:

在根目录下创建一个新目录:

rclone mkdir remote:dir

递归列出目录内容:

rclone ls remote:

/home/local/directory 同步到远程目录,并删除该目录中多余的文件。

rclone sync --interactive /home/local/directory remote:dir

修改时间

文件的修改时间以 Azure 标准的 LastModified 时间存储。

性能

上传大文件时,增加 --azurefiles-upload-concurrency 的值可以提高性能,但会消耗更多内存。默认值 16 设置得比较保守,以减少内存使用。对于单文件传输,可能需要将其提高到 64 或更高,才能充分利用 1 Gbit/s 的链接。

受限文件名字符

除了 默认受限字符集 之外,以下字符也会被替换:

字符 编码值 替换字符
" 0x22
* 0x2A
: 0x3A
< 0x3C
> 0x3E
? 0x3F
\ 0x5C
| 0x7C

文件名也不能以以下字符结尾。只有当这些字符是文件名的最后一个字符时才会被替换:

字符 编码值 替换字符
. 0x2E

无效的 UTF-8 字节也会被 替换,因为它们不能用于 JSON 字符串。

哈希值

MD5 哈希值与文件一起存储。并非所有文件都有 MD5 哈希值,因为这些哈希值必须与文件一起上传。

认证

有多种方式可以为 Azure 文件存储提供凭据。rclone 会按以下部分的顺序尝试这些方式。

环境认证

如果 env_auth 配置参数为 true,则 rclone 将从环境或运行时获取凭据。

它按以下顺序尝试这些认证方法:

  1. 环境变量
  2. 托管服务标识凭据
  3. Azure CLI 凭据(与 az 工具使用的相同)

以下各节将详细介绍这些方法。

环境认证:1. 环境变量

如果设置了 env_auth 且存在环境变量,rclone 将根据设置的环境变量,使用密钥或证书对服务主体进行认证,或使用密码对用户进行认证。它按以下顺序从这些变量中读取配置:

  1. 使用客户端密钥的服务主体
    • AZURE_TENANT_ID:服务主体的租户 ID,也称为“目录” ID。
    • AZURE_CLIENT_ID:服务主体的客户端 ID。
    • AZURE_CLIENT_SECRET:服务主体的一个客户端密钥。
  2. 使用证书的服务主体
    • AZURE_TENANT_ID:服务主体的租户 ID,也称为“目录” ID。
    • AZURE_CLIENT_ID:服务主体的客户端 ID。
    • AZURE_CLIENT_CERTIFICATE_PATH:包含私钥的 PEM 或 PKCS12 证书文件的路径。
    • AZURE_CLIENT_CERTIFICATE_PASSWORD:(可选)证书文件的密码。
    • AZURE_CLIENT_SEND_CERTIFICATE_CHAIN:(可选)指定认证请求是否将包含 x5c 标头以支持基于主题名称/颁发者的认证。当设置为 “true” 或 “1” 时,认证请求将包含 x5c 标头。
  3. 使用用户名和密码的用户
    • AZURE_TENANT_ID:(可选)要进行认证的租户,默认为 “organizations”。
    • AZURE_CLIENT_ID:用户要认证的应用程序的客户端 ID。
    • AZURE_USERNAME:用户名(通常是电子邮件地址)。
    • AZURE_PASSWORD:用户的密码。
  4. 工作负载身份
    • AZURE_TENANT_ID:要进行认证的租户。
    • AZURE_CLIENT_ID:用户要认证的应用程序的客户端 ID。
    • AZURE_FEDERATED_TOKEN_FILE:投影服务账户令牌文件的路径。
    • AZURE_AUTHORITY_HOST:Azure Active Directory 端点的权限(默认:login.microsoftonline.com)。
环境认证:2. 托管服务标识凭据

使用托管服务标识时,如果运行此程序的虚拟机(SS)具有系统分配的标识,则默认使用该标识。如果资源没有系统分配的标识,但只有一个用户分配的标识,则默认使用该用户分配的标识。

如果资源有多个用户分配的标识,则需要取消设置 env_auth 并设置 use_msi。请参阅 use_msi 部分

如果在断开连接的云或私有云(如 Azure Stack)中操作,你可能希望将 disable_instance_discovery 设置为 true。这决定了 rclone 在认证之前是否从 https://login.microsoft.com/ 请求 Microsoft Entra 实例元数据。将此设置为 true 将跳过此请求,这意味着你需要确保配置的权限是有效且可信任的。

环境认证:3. Azure CLI 凭据(与 az 工具使用的相同)

使用 az 工具创建的凭据可以通过 env_auth 获取。

例如,如果你使用以下命令以服务主体身份登录:

az login --service-principal -u XXX -p XXX --tenant XXX

然后你可以使用以下方式访问 rclone 资源:

rclone lsf :azurefiles,env_auth,account=ACCOUNT:

或者

rclone lsf --azurefiles-env-auth --azurefiles-account=ACCOUNT :azurefiles:

账户和共享密钥

这是最直接但灵活性最低的方法。只需填写 accountkey 字段,其余字段留空即可。

SAS URL

使用此方法时,将 accountkeyconnection_string 留空,并填写 sas_url

连接字符串

使用此方法时,将 accountkeysas_url 留空,并填写 connection_string

使用客户端密钥的服务主体

如果设置了以下变量,rclone 将使用客户端密钥对服务主体进行认证。

  • tenant:服务主体的租户 ID,也称为“目录” ID。
  • client_id:服务主体的客户端 ID。
  • client_secret:服务主体的一个客户端密钥。

凭据也可以使用 service_principal_file 配置选项放在文件中。

使用证书的服务主体

如果设置了以下变量,rclone 将使用证书对服务主体进行认证。

  • tenant:服务主体的租户 ID,也称为“目录” ID。
  • client_id:服务主体的客户端 ID。
  • client_certificate_path:包含私钥的 PEM 或 PKCS12 证书文件的路径。
  • client_certificate_password:(可选)证书文件的密码。
  • client_send_certificate_chain:(可选)指定认证请求是否将包含 x5c 标头以支持基于主题名称/颁发者的认证。当设置为 “true” 或 “1” 时,认证请求将包含 x5c 标头。

注意client_certificate_password 必须进行加密处理 - 请参阅 rclone obscure

使用用户名和密码的用户

如果设置了以下变量,rclone 将使用用户名和密码进行认证。

  • tenant:(可选)要进行认证的租户,默认为 “organizations”。
  • client_id:用户要认证的应用程序的客户端 ID。
  • username:用户名(通常是电子邮件地址)。
  • password:用户的密码。

微软不建议使用这种认证方式,因为它比其他认证流程的安全性低。这种方法是非交互式的,因此与任何形式的多因素认证都不兼容,并且应用程序必须已经获得用户或管理员的同意。此凭据只能对工作和学校账户进行认证,不能对 Microsoft 账户进行认证。

注意password 必须进行加密处理 - 请参阅 rclone obscure

托管服务标识凭据

如果设置了 use_msi,则使用托管服务标识凭据。此认证仅在 Azure 服务中运行时有效。要使用此功能,需要取消设置 env_auth

但是,如果你有多个用户标识可供选择,则必须使用 msi_object_idmsi_client_idmsi_mi_res_id 中的一个参数明确指定要使用的标识。

如果未设置 msi_object_idmsi_client_idmsi_mi_res_id,则等同于使用 env_auth

Azure CLI 工具 az

设置为使用 Azure CLI 工具 az 作为唯一的认证方式。

如果你希望在具有系统托管标识但不想使用该标识的主机上使用 az CLI,设置此选项会很有用。

不要同时设置 env_auth

标准选项

以下是 Azure Files(Microsoft Azure 文件存储)特定的标准选项。

–azurefiles-account

Azure 存储账户名称。

将此设置为正在使用的 Azure 存储账户名称。

若要使用 SAS URL 或连接字符串,请留空;否则需要设置此选项。

如果此选项为空且设置了 env_auth,则会尽可能从环境变量 AZURE_STORAGE_ACCOUNT_NAME 中读取该值。

属性:

  • 配置项:account
  • 环境变量:RCLONE_AZUREFILES_ACCOUNT
  • 类型:字符串
  • 是否必需:否

–azurefiles-share-name

Azure 文件共享名称。

这是必需的,是要访问的共享的名称。

属性:

  • 配置项:share_name
  • 环境变量:RCLONE_AZUREFILES_SHARE_NAME
  • 类型:字符串
  • 是否必需:否

–azurefiles-env-auth

从运行时(环境变量、CLI 或 MSI)读取凭据。

有关详细信息,请参阅 认证文档

属性:

  • 配置项:env_auth
  • 环境变量:RCLONE_AZUREFILES_ENV_AUTH
  • 类型:布尔值
  • 默认值:false

–azurefiles-key

存储账户共享密钥。

若要使用 SAS URL 或连接字符串,请留空。

属性:

  • 配置项:key
  • 环境变量:RCLONE_AZUREFILES_KEY
  • 类型:字符串
  • 是否必需:否

–azurefiles-sas-url

SAS URL。

如果使用账户/密钥或连接字符串,请留空。

属性:

  • 配置项:sas_url
  • 环境变量:RCLONE_AZUREFILES_SAS_URL
  • 类型:字符串
  • 是否必需:否

–azurefiles-connection-string

Azure 文件连接字符串。

属性:

  • 配置项:connection_string
  • 环境变量:RCLONE_AZUREFILES_CONNECTION_STRING
  • 类型:字符串
  • 是否必需:否

–azurefiles-tenant

服务主体的租户 ID,也称为目录 ID。

在以下情况下设置此选项:

  • 使用客户端密钥的服务主体
  • 使用证书的服务主体
  • 使用用户名和密码的用户

属性:

  • 配置项:tenant
  • 环境变量:RCLONE_AZUREFILES_TENANT
  • 类型:字符串
  • 是否必需:否

–azurefiles-client-id

正在使用的客户端的 ID。

在以下情况下设置此选项:

  • 使用客户端密钥的服务主体
  • 使用证书的服务主体
  • 使用用户名和密码的用户

属性:

  • 配置项:client_id
  • 环境变量:RCLONE_AZUREFILES_CLIENT_ID
  • 类型:字符串
  • 是否必需:否

–azurefiles-client-secret

服务主体的一个客户端密钥

在以下情况下设置此选项:

  • 使用客户端密钥的服务主体

属性:

  • 配置项:client_secret
  • 环境变量:RCLONE_AZUREFILES_CLIENT_SECRET
  • 类型:字符串
  • 是否必需:否

–azurefiles-client-certificate-path

包含私钥的 PEM 或 PKCS12 证书文件的路径。

在以下情况下设置此选项:

  • 使用证书的服务主体

属性:

  • 配置项:client_certificate_path
  • 环境变量:RCLONE_AZUREFILES_CLIENT_CERTIFICATE_PATH
  • 类型:字符串
  • 是否必需:否

–azurefiles-client-certificate-password

证书文件的密码(可选)。

在以下情况下可选择设置此选项:

  • 使用证书的服务主体

并且证书有密码。

注意:输入此选项的值必须进行加密处理 - 请参阅 rclone obscure

属性:

  • 配置项:client_certificate_password
  • 环境变量:RCLONE_AZUREFILES_CLIENT_CERTIFICATE_PASSWORD
  • 类型:字符串
  • 是否必需:否

高级选项

以下是 Azure Files(Microsoft Azure 文件存储)特定的高级选项。

–azurefiles-client-send-certificate-chain

使用证书认证时发送证书链。

指定认证请求是否将包含 x5c 标头以支持基于主题名称/颁发者的认证。当设置为 true 时,认证请求将包含 x5c 标头。

在以下情况下可选择设置此选项:

  • 使用证书的服务主体

属性:

  • 配置项:client_send_certificate_chain
  • 环境变量:RCLONE_AZUREFILES_CLIENT_SEND_CERTIFICATE_CHAIN
  • 类型:布尔值
  • 默认值:false

–azurefiles-username

用户名(通常是电子邮件地址)

在以下情况下设置此选项:

  • 使用用户名和密码的用户

属性:

  • 配置项:username
  • 环境变量:RCLONE_AZUREFILES_USERNAME
  • 类型:字符串
  • 是否必需:否

–azurefiles-password

用户的密码

在以下情况下设置此选项:

  • 使用用户名和密码的用户

注意:输入此选项的值必须进行加密处理 - 请参阅 rclone obscure

属性:

  • 配置项:password
  • 环境变量:RCLONE_AZUREFILES_PASSWORD
  • 类型:字符串
  • 是否必需:否

–azurefiles-service-principal-file

包含服务主体凭据的文件路径。

通常留空。仅当你想使用服务主体而不是交互式登录时才需要设置。

$ az ad sp create-for-rbac --name "<name>" \
  --role "Storage Files Data Owner" \
  --scopes "/subscriptions/<subscription>/resourceGroups/<resource-group>/providers/Microsoft.Storage/storageAccounts/<storage-account>/blobServices/default/containers/<container>" \
  > azure-principal.json

有关更多详细信息,请参阅 “创建 Azure 服务主体”“分配 Azure 角色以访问文件数据” 页面。

注意:此部分需要针对 Azure 文件进行更新 - 欢迎提交拉取请求!

将凭据直接放在 rclone 配置文件中的 client_idtenantclient_secret 键下,而不是设置 service_principal_file,可能会更方便。

属性:

  • 配置项:service_principal_file
  • 环境变量:RCLONE_AZUREFILES_SERVICE_PRINCIPAL_FILE
  • 类型:字符串
  • 是否必需:否

–azurefiles-use-msi

使用托管服务标识进行认证(仅在 Azure 中有效)。

当设置为 true 时,使用 托管服务标识 而不是 SAS 令牌或账户密钥来对 Azure 存储进行认证。

如果运行此程序的虚拟机(SS)具有系统分配的标识,则默认使用该标识。如果资源没有系统分配的标识,但只有一个用户分配的标识,则默认使用该用户分配的标识。如果资源有多个用户分配的标识,则必须使用 msi_object_idmsi_client_idmsi_mi_res_id 中的一个参数明确指定要使用的标识。

属性:

  • 配置项:use_msi
  • 环境变量:RCLONE_AZUREFILES_USE_MSI
  • 类型:布尔值
  • 默认值:false

–azurefiles-msi-object-id

要使用的用户分配的 MSI 的对象 ID(如果有)。

如果指定了 msi_client_idmsi_mi_res_id,则留空。

属性:

  • 配置项:msi_object_id
  • 环境变量:RCLONE_AZUREFILES_MSI_OBJECT_ID
  • 类型:字符串
  • 是否必需:否

–azurefiles-msi-client-id

要使用的用户分配的 MSI 的对象 ID(如果有)。

如果指定了 msi_object_idmsi_mi_res_id,则留空。

属性:

  • 配置项:msi_client_id
  • 环境变量:RCLONE_AZUREFILES_MSI_CLIENT_ID
  • 类型:字符串
  • 是否必需:否

–azurefiles-msi-mi-res-id

要使用的用户分配的 MSI 的 Azure 资源 ID(如果有)。

如果指定了 msi_client_idmsi_object_id,则留空。

属性:

  • 配置项:msi_mi_res_id
  • 环境变量:RCLONE_AZUREFILES_MSI_MI_RES_ID
  • 类型:字符串
  • 是否必需:否

–azurefiles-endpoint

服务的端点。

通常留空。

属性:

  • 配置项:endpoint
  • 环境变量:RCLONE_AZUREFILES_ENDPOINT
  • 类型:字符串
  • 是否必需:否

–azurefiles-chunk-size

上传块大小。

请注意,此块会存储在内存中,并且内存中可能会同时存储多达 “–transfers” * “–azurefile-upload-concurrency” 个块。

属性:

  • 配置项:chunk_size
  • 环境变量:RCLONE_AZUREFILES_CHUNK_SIZE
  • 类型:SizeSuffix
  • 默认值:4Mi

–azurefiles-upload-concurrency

多部分上传的并发数。

这是同一文件的多个块同时上传的数量。

如果你通过高速链接上传少量大文件,并且这些上传没有充分利用你的带宽,那么增加此值可能有助于加快传输速度。

请注意,块会存储在内存中,并且内存中可能会同时存储多达 “–transfers” * “–azurefile-upload-concurrency” 个块。

属性:

  • 配置项:upload_concurrency
  • 环境变量:RCLONE_AZUREFILES_UPLOAD_CONCURRENCY
  • 类型:整数
  • 默认值:16

–azurefiles-max-stream-size

流式传输文件的最大大小。

Azure 文件需要提前知道文件的大小。当 rclone 不知道时,会使用此值代替。

这将在 rclone 流式传输数据时使用,最常见的用途包括:

  • 使用 rclone mount 并设置 --vfs-cache-mode off 上传文件
  • 使用 rclone rcat
  • 复制长度未知的文件

由于文件临时大小将为此值,因此共享中需要有这么多的可用空间。

属性:

  • 配置项:max_stream_size
  • 环境变量:RCLONE_AZUREFILES_MAX_STREAM_SIZE
  • 类型:SizeSuffix
  • 默认值:10Gi

–azurefiles-encoding

后端的编码方式。

有关更多信息,请参阅 概述中的编码部分

属性:

  • 配置项:encoding
  • 环境变量:RCLONE_AZUREFILES_ENCODING
  • 类型:Encoding
  • 默认值:Slash,LtGt,DoubleQuote,Colon,Question,Asterisk,Pipe,BackSlash,Del,Ctl,RightPeriod,InvalidUtf8,Dot

–azurefiles-description

远程存储的描述。

属性:

  • 配置项:description
  • 环境变量:RCLONE_AZUREFILES_DESCRIPTION
  • 类型:字符串
  • 是否必需:否

自定义上传头部

你可以使用 --header-upload 标志来设置自定义上传头部。

  • 缓存控制(Cache-Control)
  • 内容处置(Content-Disposition)
  • 内容编码(Content-Encoding)
  • 内容语言(Content-Language)
  • 内容类型(Content-Type)

例如 --header-upload "Content-Type: text/potato"

限制

只有当源文件有 MD5 哈希值时,分块文件的 MD5 哈希值才会被上传。从本地复制到 Azure 时总是会有这种情况。