Skip to content

Microsoft Azure Files Storage

Capability Support
rclone support tier Tier 2: Stable
Checksums MD5
Modification times Kept, to 100 ns
Case-insensitive names Yes
Duplicate names allowed No
Server-side copy Yes
Server-side move and rename Yes
Folder move and rename Yes, in one step
Free space reporting Yes
Empty folders Yes
Change notifications No
Uploads of unknown size Yes
Public links No

e.g. remote:path/to/dir.

In CloudMount you add this drive from the Add drive screen, and the wizard asks for the options listed under Options. The notes below come from rclone’s setup guide.

The modified time is stored as the SMB LastWriteTime property on files. It has a precision of 100 ns.

When uploading large files, increasing the value of --azurefiles-upload-concurrency will increase performance at the cost of using more memory. The default of 16 is set quite conservatively to use less memory. It maybe be necessary raise it to 64 or higher to fully utilize a 1 GBit/s link with a single file transfer.

In addition to the default restricted characters set the following characters are also replaced:

Character Value Replacement
“ 0x22 "
* 0x2A *
: 0x3A :
< 0x3C <
> 0x3E >
? 0x3F ?
\ 0x5C \
| 0x7C |

File names can also not end with the following characters. These only get replaced if they are the last character in the name:

Character Value Replacement
. 0x2E .

Invalid UTF-8 bytes will also be replaced, as they can’t be used in JSON strings.

MD5 hashes are stored with files. Not all files will have MD5 hashes as these have to be uploaded with the file.

There are a number of ways of supplying credentials for Azure Files Storage. Rclone tries them in the order of the sections below.

If the env_auth config parameter is true then rclone will pull credentials from the environment or runtime.

It tries these authentication methods in this order:

  1. Environment Variables
  2. Managed Service Identity Credentials
  3. Azure CLI credentials (as used by the az tool)

These are described in the following sections

If env_auth is set and environment variables are present rclone authenticates a service principal with a secret or certificate, or a user with a password, depending on which environment variable are set. It reads configuration from these variables, in the following order:

  1. Service principal with client secret
    • AZURE_TENANT_ID: ID of the service principal’s tenant. Also called its “directory” ID.
    • AZURE_CLIENT_ID: the service principal’s client ID
    • AZURE_CLIENT_SECRET: one of the service principal’s client secrets
  2. Service principal with certificate
    • AZURE_TENANT_ID: ID of the service principal’s tenant. Also called its “directory” ID.
    • AZURE_CLIENT_ID: the service principal’s client ID
    • AZURE_CLIENT_CERTIFICATE_PATH: path to a PEM or PKCS12 certificate file including the private key.
    • AZURE_CLIENT_CERTIFICATE_PASSWORD: (optional) password for the certificate file.
    • AZURE_CLIENT_SEND_CERTIFICATE_CHAIN: (optional) Specifies whether an authentication request will include an x5c header to support subject name / issuer based authentication. When set to “true” or “1”, authentication requests include the x5c header.
  3. User with username and password
    • AZURE_TENANT_ID: (optional) tenant to authenticate in. Defaults to “organizations”.
    • AZURE_CLIENT_ID: client ID of the application the user will authenticate to
    • AZURE_USERNAME: a username (usually an email address)
    • AZURE_PASSWORD: the user’s password
  4. Workload Identity
    • AZURE_TENANT_ID: Tenant to authenticate in
    • AZURE_CLIENT_ID: Client ID of the application the user will authenticate to
    • AZURE_FEDERATED_TOKEN_FILE: Path to projected service account token file
    • AZURE_AUTHORITY_HOST: Authority of an Azure Active Directory endpoint (default: login.microsoftonline.com).
Env Auth: 2. Managed Service Identity Credentials
Section titled “Env Auth: 2. Managed Service Identity Credentials”

When using Managed Service Identity if the VM(SS) on which this program is running has a system-assigned identity, it will be used by default. If the resource has no system-assigned but exactly one user-assigned identity, the user-assigned identity will be used by default.

If the resource has multiple user-assigned identities you will need to unset env_auth and set use_msi instead. See the use_msi section.

If you are operating in disconnected clouds, or private clouds such as Azure Stack you may want to set disable_instance_discovery = true. This determines whether rclone requests Microsoft Entra instance metadata from https://login.microsoft.com/ before authenticating. Setting this to true will skip this request, making you responsible for ensuring the configured authority is valid and trustworthy.

Env Auth: 3. Azure CLI credentials (as used by the az tool)
Section titled “Env Auth: 3. Azure CLI credentials (as used by the az tool)”

Credentials created with the az tool can be picked up using env_auth.

For example if you were to login with a service principal like this:

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

Then you could access rclone resources like this:

Terminal window
rclone lsf :azurefiles,env_auth,account=ACCOUNT:

Or

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

This is the most straight forward and least flexible way. Just fill in the account and key lines and leave the rest blank.

To use it leave account, key and connection_string blank and fill in sas_url.

To use it leave account, key and “sas_url” blank and fill in connection_string.

If these variables are set, rclone will authenticate with a service principal with a client secret.

  • tenant: ID of the service principal’s tenant. Also called its “directory” ID.
  • client_id: the service principal’s client ID
  • client_secret: one of the service principal’s client secrets

The credentials can also be placed in a file using the service_principal_file configuration option.

If these variables are set, rclone will authenticate with a service principal with certificate.

  • tenant: ID of the service principal’s tenant. Also called its “directory” ID.
  • client_id: the service principal’s client ID
  • client_certificate_path: path to a PEM or PKCS12 certificate file including the private key.
  • client_certificate_password: (optional) password for the certificate file.
  • client_send_certificate_chain: (optional) Specifies whether an authentication request will include an x5c header to support subject name / issuer based authentication. When set to “true” or “1”, authentication requests include the x5c header.

NB client_certificate_password must be obscured - see rclone obscure.

If these variables are set, rclone will authenticate with username and password.

  • tenant: (optional) tenant to authenticate in. Defaults to “organizations”.
  • client_id: client ID of the application the user will authenticate to
  • username: a username (usually an email address)
  • password: the user’s password

Microsoft doesn’t recommend this kind of authentication, because it’s less secure than other authentication flows. This method is not interactive, so it isn’t compatible with any form of multi-factor authentication, and the application must already have user or admin consent. This credential can only authenticate work and school accounts; it can’t authenticate Microsoft accounts.

NB password must be obscured - see rclone obscure.

If use_msi is set then managed service identity credentials are used. This authentication only works when running in an Azure service. env_auth needs to be unset to use this.

However if you have multiple user identities to choose from these must be explicitly specified using exactly one of the msi_object_id, msi_client_id, or msi_mi_res_id parameters.

If none of msi_object_id, msi_client_id, or msi_mi_res_id is set, this is equivalent to using env_auth.

If these variables are set, rclone will authenticate with federated identity.

  • tenant: tenant ID of the storage
  • client_id: client ID of the application the user will authenticate to storage
  • msi_client_id: managed identity client ID of the application the user will authenticate to

By default “api://AzureADTokenExchange” is used as scope for token retrieval over MSI. This token is then exchanged for actual storage token using ‘tenant’ and ‘client_id’.

If use_az is set, use Azure CLI tool az as the sole means of authentication.

Setting this can be useful if you wish to use the az CLI on a host with a System Managed Identity that you do not want to use.

Don’t set env_auth at the same time.

The wizard asks for these when you add the drive.

Azure Storage Account Name.

Set this to the Azure Storage Account Name in use.

Leave blank to use SAS URL or Emulator, 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.

Type: string

Read credentials from runtime (environment variables, CLI or MSI).

See the authentication docs for full info.

Type: bool · Default: false

Storage Account Shared Key.

Leave blank to use SAS URL or Emulator.

Type: string

SAS URL for container level access only.

Leave blank if using account/key or Emulator.

Type: string

Storage Connection String.

Connection string for the storage. Leave blank if using other auth methods.

Type: string

ID of the service principal’s tenant. Also called its directory ID.

Set this if using

  • Service principal with client secret
  • Service principal with certificate
  • User with username and password

Type: string

The ID of the client in use.

Set this if using

  • Service principal with client secret
  • Service principal with certificate
  • User with username and password

Type: string

One of the service principal’s client secrets

Set this if using

  • Service principal with client secret

Type: string

Path to a PEM or PKCS12 certificate file including the private key.

Set this if using

  • Service principal with certificate

Type: string

Password for the certificate file (optional).

Optionally set this if using

  • Service principal with certificate

And the certificate has a password.

NB Input to this must be obscured - see rclone obscure.

Type: string

Azure Files Share Name.

This is required and is the name of the share to access.

Type: string

The wizard shows these under Advanced options. Most drives work without changing any of them.

Send the certificate chain when using certificate auth.

Specifies whether an authentication request will include an x5c header to support subject name / issuer based authentication. When set to true, authentication requests include the x5c header.

Optionally set this if using

  • Service principal with certificate

Type: bool · Default: false

User name (usually an email address)

Set this if using

  • User with username and password

Type: string

The user’s password

Set this if using

  • User with username and password

NB Input to this must be obscured - see rclone obscure.

Type: string

Path to file containing credentials for use with a service principal.

Leave blank normally. Needed only if you want to use a service principal instead of interactive login.

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

See “Create an Azure service principal” and “Assign an Azure role for access to blob data” pages for more details.

It may be more convenient to put the credentials directly into the rclone config file under the client_id, tenant and client_secret keys instead of setting service_principal_file.

Type: string

Skip requesting Microsoft Entra instance metadata

This should be set true only by applications authenticating in disconnected clouds, or private clouds such as Azure Stack.

It determines whether rclone requests Microsoft Entra instance metadata from https://login.microsoft.com/ before authenticating.

Setting this to true will skip this request, making you responsible for ensuring the configured authority is valid and trustworthy.

Type: bool · Default: false

Use a managed service identity to authenticate (only works in Azure).

When true, use a managed service identity to authenticate to Azure Storage instead of a SAS token or account key.

If the VM(SS) on which this program is running has a system-assigned identity, it will be used by default. If the resource has no system-assigned but exactly one user-assigned identity, the user-assigned identity will be used by default. If the resource has multiple user-assigned identities, the identity to use must be explicitly specified using exactly one of the msi_object_id, msi_client_id, or msi_mi_res_id parameters.

Type: bool · Default: false

Object ID of the user-assigned MSI to use, if any.

Leave blank if msi_client_id or msi_mi_res_id specified.

Type: string

Object ID of the user-assigned MSI to use, if any.

Leave blank if msi_object_id or msi_mi_res_id specified.

Type: string

Azure resource ID of the user-assigned MSI to use, if any.

Leave blank if msi_client_id or msi_object_id specified.

Type: string

Uses local storage emulator if provided as ‘true’.

Leave blank if using real azure storage endpoint.

Type: bool · Default: false

Use Azure CLI tool az for authentication

Set to use the Azure CLI tool az as the sole means of authentication.

Setting this can be useful if you wish to use the az CLI on a host with a System Managed Identity that you do not want to use.

Don’t set env_auth at the same time.

Type: bool · Default: false

Endpoint for the service.

Leave blank normally.

Type: string

Upload chunk size.

Note that this is stored in memory and there may be up to “–transfers” * “–azurefile-upload-concurrency” chunks stored at once in memory.

Type: SizeSuffix · Default: 4Mi

Concurrency for multipart uploads.

This is the number of chunks of the same file that are uploaded concurrently.

If you are uploading small numbers of large files over high-speed links and these uploads do not fully utilize your bandwidth, then increasing this may help to speed up the transfers.

Note that chunks are stored in memory and there may be up to “–transfers” * “–azurefile-upload-concurrency” chunks stored at once in memory.

Type: int · Default: 16

Max size for streamed files.

Azure files needs to know in advance how big the file will be. When rclone doesn’t know it uses this value instead.

This will be used when rclone is streaming data, the most common uses are:

  • Uploading files with --vfs-cache-mode off with rclone mount
  • Using rclone rcat
  • Copying files with unknown length

You will need this much free space in the share as the file will be this size temporarily.

Type: SizeSuffix · Default: 10Gi

The encoding for the backend.

See the encoding section in the overview for more info.

Type: Encoding · Default: Slash,LtGt,DoubleQuote,Colon,Question,Asterisk,Pipe,BackSlash,Del,Ctl,RightPeriod,InvalidUtf8,Dot

Description of the remote.

Type: string

You can set custom upload headers with the --header-upload flag.

  • Cache-Control
  • Content-Disposition
  • Content-Encoding
  • Content-Language
  • Content-Type

Eg --header-upload "Content-Type: text/potato"

MD5 sums are only uploaded with chunked files if the source has an MD5 sum. This will always be the case for a local to azure copy.