get_account_sas | R Documentation |
The simplest way for a user to access files and data in a storage account is to give them the account's access key. This gives them full control of the account, and so may be a security risk. An alternative is to provide the user with a shared access signature (SAS), which limits access to specific resources and only for a set length of time. There are three kinds of SAS: account, service and user delegation.
get_account_sas(account, ...) ## S3 method for class 'az_storage' get_account_sas(account, key = account$list_keys()[1], ...) ## S3 method for class 'storage_endpoint' get_account_sas(account, key = account$key, ...) ## Default S3 method: get_account_sas(account, key, start = NULL, expiry = NULL, services = "bqtf", permissions = "rl", resource_types = "sco", ip = NULL, protocol = NULL, auth_api_version = getOption("azure_storage_api_version"), ...) get_user_delegation_key(account, ...) ## S3 method for class 'az_resource' get_user_delegation_key(account, token = account$token, ...) ## S3 method for class 'blob_endpoint' get_user_delegation_key(account, token = account$token, key_start = NULL, key_expiry = NULL, ...) revoke_user_delegation_keys(account) ## S3 method for class 'az_storage' revoke_user_delegation_keys(account) get_user_delegation_sas(account, ...) ## S3 method for class 'az_storage' get_user_delegation_sas(account, key, ...) ## S3 method for class 'blob_endpoint' get_user_delegation_sas(account, key, ...) ## Default S3 method: get_user_delegation_sas(account, key, resource, start = NULL, expiry = NULL, permissions = "rl", resource_type = "c", ip = NULL, protocol = NULL, snapshot_time = NULL, directory_depth = NULL, auth_api_version = getOption("azure_storage_api_version"), ...) get_service_sas(account, ...) ## S3 method for class 'az_storage' get_service_sas(account, resource, service = c("blob", "file"), key = account$list_keys()[1], ...) ## S3 method for class 'storage_endpoint' get_service_sas(account, resource, key = account$key, ...) ## Default S3 method: get_service_sas(account, resource, key, service, start = NULL, expiry = NULL, permissions = "rl", resource_type = NULL, ip = NULL, protocol = NULL, policy = NULL, snapshot_time = NULL, directory_depth = NULL, auth_api_version = getOption("azure_storage_api_version"), ...)
account |
An object representing a storage account. Depending on the generic, this can be one of the following: an Azure resource object (of class |
... |
Arguments passed to lower-level functions. |
key |
For |
start, expiry |
The start and end dates for the account or user delegation SAS. These should be |
services |
For |
permissions |
The permissions that the SAS grants. The default value of |
resource_types |
For an account SAS, the resource types for which the SAS is valid. For |
ip |
The IP address(es) or IP address range(s) for which the SAS is valid. The default is not to restrict access by IP. |
protocol |
The protocol required to use the SAS. Possible values are |
auth_api_version |
The storage API version to use for authenticating. |
token |
For |
key_start, key_expiry |
For |
resource |
For |
resource_type |
For a service or user delegation SAS, the type of resource for which the SAS is valid. For blob storage, the default value is "b" meaning a single blob. For file storage, the default value is "f" meaning a single file. Other possible values include "bs" (a blob snapshot), "c" (a blob container), "d" (a directory in a blob container), or "s" (a file share). Note however that a user delegation SAS only supports blob storage. |
snapshot_time |
For a user delegation or service SAS, the blob snapshot for which the SAS is valid. Only required if |
directory_depth |
For a service SAS, the depth of the directory, starting at 0 for the root. This is required if |
service |
For a service SAS, the storage service for which the SAS is valid: either "blob" or "file". Currently AzureStor does not support creating a service SAS for queue or table storage. |
policy |
For a service SAS, optionally the name of a stored access policy to correlate the SAS with. Revoking the policy will also invalidate the SAS. |
Listed here are S3 generics and methods to obtain a SAS for accessing storage; in addition, the az_storage
resource class has R6 methods for get_account_sas
, get_service_sas
, get_user_delegation_key
and revoke_user_delegation_keys
which simply call the corresponding S3 method.
Note that you don't need to worry about these methods if you have been given a SAS, and only want to use it to access a storage account.
An account SAS is secured with the storage account key. An account SAS delegates access to resources in one or more of the storage services. All of the operations available via a user delegation SAS are also available via an account SAS. You can also delegate access to read, write, and delete operations on blob containers, tables, queues, and file shares. To obtain an account SAS, call get_account_sas
.
A service SAS is like an account SAS, but allows finer-grained control of access. You can create a service SAS that allows access only to specific blobs in a container, or files in a file share. To obtain a service SAS, call get_service_sas
.
A user delegation SAS is a SAS secured with Azure AD credentials. It's recommended that you use Azure AD credentials when possible as a security best practice, rather than using the account key, which can be more easily compromised. When your application design requires shared access signatures, use Azure AD credentials to create a user delegation SAS for superior security.
Every SAS is signed with a key. To create a user delegation SAS, you must first request a user delegation key, which is then used to sign the SAS. The user delegation key is analogous to the account key used to sign a service SAS or an account SAS, except that it relies on your Azure AD credentials. To request the user delegation key, call get_user_delegation_key
. With the user delegation key, you can then create the SAS with get_user_delegation_sas
.
To invalidate all user delegation keys, as well as the SAS's generated with them, call revoke_user_delegation_keys
.
See the examples and Microsoft Docs pages below for how to specify arguments like the services, permissions, and resource types. Also, while not explicitly mentioned in the documentation, ADLSgen2 storage can use any SAS that is valid for blob storage.
blob_endpoint, file_endpoint, Date, POSIXt
Azure Storage Provider API reference, Azure Storage Services API reference
Create an account SAS, Create a user delegation SAS, Create a service SAS
# account SAS valid for 7 days get_account_sas("mystorage", "access_key", start=Sys.Date(), expiry=Sys.Date() + 7) # SAS with read/write/create/delete permissions get_account_sas("mystorage", "access_key", permissions="rwcd") # SAS limited to blob (+ADLS2) and file storage get_account_sas("mystorage", "access_key", services="bf") # SAS for file storage, allows access to files only (not shares) get_account_sas("mystorage", "access_key", services="f", resource_types="o") # getting the key from an endpoint object endp <- storage_endpoint("https://mystorage.blob.core.windows.net", key="access_key") get_account_sas(endp, permissions="rwcd") # service SAS for a container get_service_sas(endp, "containername") # service SAS for a directory get_service_sas(endp, "containername/dirname") # read/write service SAS for a blob get_service_sas(endp, "containername/blobname", permissions="rw") ## Not run: # user delegation key valid for 24 hours token <- AzureRMR::get_azure_token("https://storage.azure.com", "mytenant", "app_id") endp <- storage_endpoint("https://mystorage.blob.core.windows.net", token=token) userkey <- get_user_delegation_key(endp, start=Sys.Date(), expiry=Sys.Date() + 1) # user delegation SAS for a container get_user_delegation_sas(endp, userkey, resource="mycontainer") # user delegation SAS for a specific file, read/write/create/delete access # (order of permissions is important!) get_user_delegation_sas(endp, userkey, resource="mycontainer/myfile", resource_types="b", permissions="rcwd") ## End(Not run)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.