Utilisation des signatures d’accès partagé (SAP)Using shared access signatures (SAS)

Une signature d’accès partagé (SAP) constitue un moyen d’octroyer aux autres clients un accès limité aux objets dans votre compte de stockage, sans exposer votre clé de compte.A shared access signature (SAS) provides you with a way to grant limited access to objects in your storage account to other clients, without exposing your account key. Dans cet article, nous vous présentons un aperçu du modèle SAP, passons en revue les bonnes pratiques concernant les signatures d’accès partagé et examinons quelques exemples.In this article, we provide an overview of the SAS model, review SAS best practices, and look at some examples.

Pour obtenir d’autres exemples de code utilisant la SAP, consultez la page Azure Blob Storage Samples for .NET (Exemples de stockage Blob Azure pour .NET). Pour d’autres exemples, consultez la bibliothèque Exemples de code Azure.For additional code examples using SAS beyond those presented here, see Getting Started with Azure Blob Storage in .NET and other samples available in the Azure Code Samples library. Vous pouvez télécharger des exemples d’application et les exécuter ou parcourir le code sur GitHub.You can download the sample applications and run them, or browse the code on GitHub.

Présentation de la signature d’accès partagéWhat is a shared access signature?

Une signature d'accès partagé fournit un accès délégué aux ressources de votre compte de stockage.A shared access signature provides delegated access to resources in your storage account. Avec une signature d’accès partagé, vous pouvez accorder aux clients l’accès aux ressources dans votre compte de stockage sans partager les clés de votre compte.With a SAS, you can grant clients access to resources in your storage account, without sharing your account keys. C’est tout l’intérêt d’utiliser des signatures d’accès partagé dans vos applications : une SAP est un moyen sécurisé de partager vos ressources de stockage sans compromettre vos clés de compte.This is the key point of using shared access signatures in your applications--a SAS is a secure way to share your storage resources without compromising your account keys.

Important

Votre clé de compte de stockage est similaire au mot de passe racine pour votre compte de stockage.Your storage account key is similar to the root password for your storage account. Veillez toujours à protéger votre clé de compte.Always be careful to protect your account key. Évitez de la communiquer à d’autres utilisateurs, de la coder en dur ou de l’enregistrer en texte brut dans un emplacement accessible à d’autres personnes.Avoid distributing it to other users, hard-coding it, or saving it anywhere in plaintext that is accessible to others. Régénérez votre clé de compte à l’aide du Portail Azure si vous pensez que sa confidentialité est compromise.Regenerate your account key using the Azure portal if you believe it may have been compromised.

Les jetons de signature d'accès partagé (SAS) sont essentiels à la protection, tout comme les clés d'accès au compte.SAS (Shared Access Signature) tokens are critical to protect just like the account access keys. Outre la granularité qu'elle fournit, la signature d'accès partagé permet aux clients d'accéder aux ressources de votre compte de stockage et ne doit pas être partagée publiquement.While providing granularity SAS grants clients access to the resources in your storage account and should not be shared publicly. Lorsqu'un partage est requis à des fins de résolution des problèmes, pensez à utiliser une version expurgée de tous les fichiers journaux ou à supprimer les jetons SAS (le cas échéant) des fichiers journaux. Vérifiez également que les captures d'écran ne contiennent pas d'informations SAS.When sharing is required for troubleshooting reasons consider using a redacted version of any log files or deleting the SAS tokens (if present) from the log files, and make sure the screenshots don't contain the SAS information either.

Lorsque cela est possible, Microsoft recommande d’utiliser l’authentification Azure Active Directory (Azure AD) pour vos applications de stockage d’objets blob et de file d’attente (préversion) pour une sécurité renforcée.Microsoft recommends using Azure Active Directory (Azure AD) authentication for your Blob and Queue storage applications (preview) when possible for enhanced security. Pour plus d’informations, consultez Authentifier l’accès aux objets blob et files d’attente Azure à l’aide d’Azure Active Directory (préversion).For more information, see Authenticate access to Azure blobs and queues using Azure Active Directory (preview).

Une SAP vous donne un contrôle précis sur le type d’accès que vous accordez aux clients qui disposent de la SAP, notamment :A SAS gives you granular control over the type of access you grant to clients who have the SAS, including:

  • L’intervalle pendant lequel la SAP est valide, y compris l’heure de début et l’heure d’expiration.The interval over which the SAS is valid, including the start time and the expiry time.
  • Les autorisations accordées par la SAP.The permissions granted by the SAS. Par exemple, une SAP pour un objet blob peut accorder des autorisations en lecture et en écriture sur cet objet blob, mais pas d’autorisations de suppression.For example, a SAS for a blob might grant read and write permissions to that blob, but not delete permissions.
  • Une adresse IP ou plage d’adresses IP facultative à partir de laquelle le stockage Azure acceptera la signature d’accès partagé.An optional IP address or range of IP addresses from which Azure Storage will accept the SAS. Par exemple, vous pouvez spécifier une plage d’adresses IP appartenant à votre organisation.For example, you might specify a range of IP addresses belonging to your organization.
  • Le protocole sur lequel le stockage Azure acceptera la SAP.The protocol over which Azure Storage will accept the SAS. Vous pouvez utiliser ce paramètre facultatif pour restreindre l’accès aux clients à l’aide de HTTPS.You can use this optional parameter to restrict access to clients using HTTPS.

Quand devez-vous utiliser une signature d’accès partagé ?When should you use a shared access signature?

Vous pouvez utiliser une signature d’accès partagé quand vous voulez fournir un accès aux ressources dans votre compte de stockage à un client qui ne dispose pas des clés d’accès de votre compte de stockage.You can use a SAS when you want to provide access to resources in your storage account to any client not possessing your storage account's access keys. Votre compte de stockage inclut une clé d’accès primaire et une clé d’accès secondaire, qui octroient toutes deux un accès administratif à votre compte et à toutes les ressources qu’il contient.Your storage account includes both a primary and secondary access key, both of which grant administrative access to your account, and all resources within it. En exposant l’une ou l’autre de ces clés, vous courez le risque d’une utilisation malveillante ou négligente de votre compte.Exposing either of these keys opens your account to the possibility of malicious or negligent use. Les signatures d’accès partagé offrent une alternative sûre qui permet aux clients de lire, d’écrire et de supprimer des données dans votre compte de stockage en fonction des autorisations que vous avez explicitement octroyées, sans avoir besoin d’une clé du compte.Shared access signatures provide a safe alternative that allows clients to read, write, and delete data in your storage account according to the permissions you've explicitly granted, and without need for an account key.

Un service où les utilisateurs lisent et écrivent leurs propres données dans votre compte de stockage correspond à un scénario courant dans lequel une signature d'accès partagé peut s'avérer utile.A common scenario where a SAS is useful is a service where users read and write their own data to your storage account. Dans un scénario où un compte de stockage stocke les données utilisateur, il existe deux modèles de conception types :In a scenario where a storage account stores user data, there are two typical design patterns:

  1. Les clients chargent et téléchargent les données par le biais d’un service proxy frontal, qui se charge de l’authentification.Clients upload and download data via a front-end proxy service, which performs authentication. Ce service présente l'avantage de permettre la validation des règles métier, mais pour de grosses quantités de données ou des transactions à haut volume, la création d'un service qui peut être mis à l'échelle en fonction de la demande peut se révéler coûteuse ou difficile.This front-end proxy service has the advantage of allowing validation of business rules, but for large amounts of data or high-volume transactions, creating a service that can scale to match demand may be expensive or difficult.

    Schéma du scénario : service proxy frontal

  2. Un service léger authentifie le client en fonction des besoins, puis génère une signature d’accès partagé.A lightweight service authenticates the client as needed and then generates a SAS. Une fois que le client reçoit la signature, il peut accéder aux ressources du compte de stockage directement avec les autorisations définies par la signature d'accès partagé et pendant l'intervalle autorisé par cette dernière.Once the client receives the SAS, they can access storage account resources directly with the permissions defined by the SAS and for the interval allowed by the SAS. La signature d'accès partagé atténue la nécessité du routage de toutes les données via le service proxy frontal.The SAS mitigates the need for routing all data through the front-end proxy service.

    Schéma du scénario : service de fournisseur SAS

De nombreux services réels peuvent utiliser un mélange de ces deux approches.Many real-world services may use a hybrid of these two approaches. Par exemple, certaines données peuvent être traitées et validées via le proxy frontal, tandis que les autres données sont enregistrées et/ou lues directement à l’aide de SAP.For example, some data might be processed and validated via the front-end proxy, while other data is saved and/or read directly using SAS.

En outre, vous devez utiliser une SAP pour autoriser l’accès à l’objet source d’une opération de copie dans certains cas de figure :Additionally, you will need to use a SAS to authorize access to the source object in a copy operation in certain scenarios:

  • Quand vous copiez un objet blob dans un autre objet blob qui réside dans un autre compte de stockage, vous devez utiliser une SAP pour autoriser l’accès à l’objet blob source.When you copy a blob to another blob that resides in a different storage account, you must use a SAS to authorize access to the source blob. Vous pouvez éventuellement utiliser une SAP pour autoriser également l’accès à l’objet blob de destination.You can optionally use a SAS to authorize access to the destination blob as well.
  • Quand vous copiez un fichier dans un autre fichier qui réside dans un autre compte de stockage, vous devez utiliser une SAP pour autoriser l’accès au fichier source.When you copy a file to another file that resides in a different storage account, you must use a SAS to authorize access to the source file. Vous pouvez éventuellement utiliser une SAP pour autoriser également l’accès au fichier de destination.You can optionally use a SAS to authorize access to the destination file as well.
  • Quand vous copiez un objet blob dans un fichier ou un fichier dans un objet blob, vous devez utiliser une SAP pour autoriser l’accès à l’objet source, même si les objets source et de destination résident dans le même compte de stockage.When you copy a blob to a file, or a file to a blob, you must use a SAS to authorize access to the source object, even if the source and destination objects reside within the same storage account.

Types de signatures d’accès partagéTypes of shared access signatures

Vous pouvez créer deux types de signatures d’accès partagé :You can create two types of shared access signatures:

  • SAP de service.Service SAS. Une SAP de service délègue l’accès à une ressource d’un seul des services de stockage : le service blob, de file d’attente, de table ou de fichiers.The service SAS delegates access to a resource in just one of the storage services: the Blob, Queue, Table, or File service. Pour obtenir des informations détaillées sur la construction du jeton de SAP de service, consultez les pages Construction d’une SAP de service et Exemples de SAP de service.See Constructing a Service SAS and Service SAS Examples for in-depth information about constructing the service SAS token.
  • SAP de compte.Account SAS. La SAP de compte délègue l’accès aux ressources d’un ou plusieurs des services de stockage.The account SAS delegates access to resources in one or more of the storage services. Toutes les opérations disponibles via une SAP de service sont également disponibles via une SAP de compte.All of the operations available via a service SAS are also available via an account SAS. En outre, avec la SAP de compte, vous pouvez déléguer l’accès à des opérations qui s’appliquent à un service donné, telles que Get/Set Service Properties et Get Service Stats. Vous pouvez également déléguer l'accès aux opérations de lecture, d’écriture et de suppression sur les conteneurs d'objets blob, les tables, les files d'attente et les partages de fichiers qui ne sont pas autorisées avec une SAP de service.Additionally, with the account SAS, you can delegate access to operations that apply to a given service, such as Get/Set Service Properties and Get Service Stats. You can also delegate access to read, write, and delete operations on blob containers, tables, queues, and file shares that are not permitted with a service SAS. Pour obtenir des informations détaillées sur la construction du jeton SAP de compte, consultez la page Construction d’une SAP de compte.See Constructing an Account SAS for in-depth information about constructing the account SAS token.

Fonctionnement d’une signature d’accès partagéHow a shared access signature works

Une signature d’accès partagé est un URI signé qui désigne une ou plusieurs ressources de stockage et inclut un jeton qui contient un ensemble spécial de paramètres de requête.A shared access signature is a signed URI that points to one or more storage resources and includes a token that contains a special set of query parameters. Le jeton indique comment le client peut accéder aux ressources.The token indicates how the resources may be accessed by the client. L’un des paramètres de requête, la signature, est construit à partir des paramètres de signature d’accès partagé et signé avec la clé du compte.One of the query parameters, the signature, is constructed from the SAS parameters and signed with the account key. Cette signature est utilisée par le stockage Azure pour autoriser l’accès à la ressource de stockage.This signature is used by Azure Storage to authorize access to the storage resource.

Voici un exemple d’URI de SAP, montrant l’URI de la ressource et le jeton de la SAP :Here's an example of a SAS URI, showing the resource URI and the SAS token:

Composants d’un URI SAP

Le jeton de la SAP est une chaîne que vous générez côté client (consultez la section Exemples de SAP pour obtenir des exemples de code).The SAS token is a string you generate on the client side (see the SAS examples section for code examples). Un jeton de la SAP que vous générez avec la bibliothèque cliente de stockage, par exemple, n’est pas suivi par le stockage Azure.A SAS token you generate with the storage client library, for example, is not tracked by Azure Storage in any way. Vous pouvez créer un nombre illimité de jetons de SAP côté client.You can create an unlimited number of SAS tokens on the client side.

Lorsqu’un client fournit un URI de SAP au stockage Azure dans le cadre d’une demande, le service vérifie les paramètres et la signature de la SAP pour s’assurer que celle-ci est valide pour authentifier la demande.When a client provides a SAS URI to Azure Storage as part of a request, the service checks the SAS parameters and signature to verify that it is valid for authenticating the request. Si le service vérifie que la signature est valide, la demande est autorisée.If the service verifies that the signature is valid, then the request is authorized. Dans le cas contraire, la demande est refusée avec le code d’erreur 403 (Interdit).Otherwise, the request is declined with error code 403 (Forbidden).

Paramètres de la signature d’accès partagé (SAP)Shared access signature parameters

Les jetons SAP de compte et de service incluent des paramètres communs ainsi que quelques paramètres différents.The account SAS and service SAS tokens include some common parameters, and also take a few parameters that are different.

Paramètres communs aux jetons de SAP de compte et de SAP de serviceParameters common to account SAS and service SAS tokens

  • Version de l’API. Paramètre facultatif qui spécifie la version du service de stockage à utiliser pour exécuter la demande.Api version An optional parameter that specifies the storage service version to use to execute the request.
  • Version du service Paramètre obligatoire qui spécifie la version du service de stockage à utiliser pour autoriser la demande.Service version A required parameter that specifies the storage service version to use to authorize the request.
  • Heure de début.Start time. Il s'agit de l'heure à laquelle la signature d'accès partagé devient valide.This is the time at which the SAS becomes valid. L’heure de début pour une signature d’accès partagé est facultative.The start time for a shared access signature is optional. Si elle est omise, la signature d’accès partagé prend effet immédiatement.If a start time is omitted, the SAS is effective immediately. L’heure de début doit être exprimée en temps universel coordonné (UTC), par un indicateur UTC spécial (« Z »), par exemple 1994-11-05T13:15:30Z.The start time must be expressed in UTC (Coordinated Universal Time), with a special UTC designator ("Z"), for example 1994-11-05T13:15:30Z.
  • Heure d’expiration.Expiry time. Il s'agit de l'heure à laquelle la signature d'accès partagé cesse d'être valide.This is the time after which the SAS is no longer valid. Les meilleures pratiques recommandent soit de spécifier une heure d’expiration pour une signature d’accès partagé, soit de l’associer à une stratégie d’accès stockée.Best practices recommend that you either specify an expiry time for a SAS, or associate it with a stored access policy. L’heure d’expiration doit être exprimée en temps universel coordonné (UTC), par un indicateur UTC spécial (« Z »), par exemple 1994-11-05T13:15:30Z (voir détails ci-dessous).The expiry time must be expressed in UTC (Coordinated Universal Time), with a special UTC designator ("Z"), for example 1994-11-05T13:15:30Z (see more below).
  • Autorisations.Permissions. Les autorisations spécifiées sur la signature d'accès partagé indiquent quelles opérations le client peut exécuter avec cette dernière sur la ressource de stockage.The permissions specified on the SAS indicate what operations the client can perform against the storage resource using the SAS. Les autorisations disponibles ne sont pas les mêmes pour une SAP de compte et une SAP de service.Available permissions differ for an account SAS and a service SAS.
  • IP.IP. Paramètre facultatif qui spécifie une adresse IP ou une plage d’adresses IP en dehors d’Azure en provenance de laquelle accepter les demandes (consultez la section État de configuration d’une session de routage pour ExpressRoute).An optional parameter that specifies an IP address or a range of IP addresses outside of Azure (see the section Routing session configuration state for Express Route) from which to accept requests.
  • Protocole.Protocol. Paramètre facultatif qui spécifie le protocole autorisé pour une demande.An optional parameter that specifies the protocol permitted for a request. Les valeurs possibles sont HTTPS et HTTP à la fois (https,http), qui est la valeur par défaut, ou HTTPS uniquement (https).Possible values are both HTTPS and HTTP (https,http), which is the default value, or HTTPS only (https). Notez que HTTP uniquement n’est pas une valeur autorisée.Note that HTTP only is not a permitted value.
  • Signature.Signature. La signature est construite à partir des autres paramètres spécifiés pour le jeton, puis chiffrée.The signature is constructed from the other parameters specified as part token and then encrypted. La signature est utilisée pour autoriser l’accès aux ressources de stockage spécifiées.The signature is used to authorize access to the specified storage resources.

Paramètres d’un jeton de SAP de serviceParameters for a service SAS token

  • Ressource de stockage.Storage resource. Les ressources de stockage dont vous pouvez déléguer l’accès à l’aide d’une SAP de service incluent :Storage resources for which you can delegate access with a service SAS include:
    • Conteneurs et objets blobContainers and blobs
    • Partages de fichiers et fichiersFile shares and files
    • Files d’attenteQueues
    • Tables et plages d’entités de table.Tables and ranges of table entities.

Paramètres d’un jeton de compte SAPParameters for an account SAS token

  • Service ou services.Service or services. Une SAP de compte peut déléguer l’accès à un ou plusieurs des services de stockage.An account SAS can delegate access to one or more of the storage services. Par exemple, vous pouvez créer une SAP de compte qui délègue l’accès au service BLOB et au service de fichiers.For example, you can create an account SAS that delegates access to the Blob and File service. Vous pouvez également créer une SAP qui délègue l’accès à l’ensemble des quatre services (BLOB, File d’attente, Table et fichiers).Or you can create a SAS that delegates access to all four services (Blob, Queue, Table, and File).
  • Types de ressources de stockage.Storage resource types. Une SAP de compte s’applique à une ou plusieurs classes de ressources de stockage plutôt qu’à une ressource spécifique.An account SAS applies to one or more classes of storage resources, rather than a specific resource. Vous pouvez créer une SAP de compte pour déléguer l’accès à :You can create an account SAS to delegate access to:
    • Des API au niveau de service, qui sont appelées sur la ressource du compte de stockage.Service-level APIs, which are called against the storage account resource. Exemples : Get/Set Service Properties, Get Service Stats et List Containers/Queues/Tables/Shares.Examples include Get/Set Service Properties, Get Service Stats, and List Containers/Queues/Tables/Shares.
    • Des API au niveau du conteneur, qui sont appelés sur les objets de conteneur pour chaque service : conteneurs d’objets blob, files d’attente, tables et partages de fichiers.Container-level APIs, which are called against the container objects for each service: blob containers, queues, tables, and file shares. Exemples : Create/Delete Container, Create/Delete Queue, Create/Delete Table, Create/Delete Share et List Blobs/Files and Directories.Examples include Create/Delete Container, Create/Delete Queue, Create/Delete Table, Create/Delete Share, and List Blobs/Files and Directories.
    • Des API au niveau de l’objet, qui sont appelées sur les objets blob, les messages de file d’attente, les entités de table et les fichiers.Object-level APIs, which are called against blobs, queue messages, table entities, and files. Exemples : Put Blob, Query Entity, Get Messages et Create File.For example, Put Blob, Query Entity, Get Messages, and Create File.

Exemples d’URI de SAPExamples of SAS URIs

Exemple d’URI SAP de serviceService SAS URI example

Voici un exemple d’URI de SAP de service qui fournit des autorisations d’accès en lecture et en écriture sur un objet blob.Here is an example of a service SAS URI that provides read and write permissions to a blob. La table décompose chaque partie de l’URI pour comprendre comment elle contribue à la signature d’accès partagé :The table breaks down each part of the URI to understand how it contributes to the SAS:

https://myaccount.blob.core.windows.net/sascontainer/sasblob.txt?sv=2015-04-05&st=2015-04-29T22%3A18%3A26Z&se=2015-04-30T02%3A23%3A26Z&sr=b&sp=rw&sip=168.1.5.60-168.1.5.70&spr=https&sig=Z%2FRHIX5Xcg0Mq2rqI3OlWTjEg2tYkboXr1P9ZUXDtkk%3D
NomName Partie de la SAPSAS portion DescriptionDescription
URI de l’objet blobBlob URI https://myaccount.blob.core.windows.net/sascontainer/sasblob.txt Adresse de l'objet blob.The address of the blob. Notez que l'utilisation de HTTPS est fortement recommandée.Note that using HTTPS is highly recommended.
Version des services de stockageStorage services version sv=2015-04-05 Pour la version 2012-02-12 des services de stockage et les versions ultérieures, ce paramètre indique la version à utiliser.For storage services version 2012-02-12 and later, this parameter indicates the version to use.
Heure de débutStart time st=2015-04-29T22%3A18%3A26Z Spécifiée en heure UTC.Specified in UTC time. Si vous voulez que la signature d'accès partagé soit valide immédiatement, omettez l'heure de début.If you want the SAS to be valid immediately, omit the start time.
Heure d’expirationExpiry time se=2015-04-30T02%3A23%3A26Z Spécifiée en heure UTC.Specified in UTC time.
RessourceResource sr=b La ressource est un objet blob.The resource is a blob.
AutorisationsPermissions sp=rw Les autorisations octroyées par la signature d'accès partagé incluent les opérations de lecture (r) et d'écriture (w).The permissions granted by the SAS include Read (r) and Write (w).
Plage d’adresses IPIP range sip=168.1.5.60-168.1.5.70 Plage d’adresses IP dont les demandes seront acceptées.The range of IP addresses from which a request will be accepted.
ProtocolProtocol spr=https Seules les demandes utilisant HTTPS sont autorisées.Only requests using HTTPS are permitted.
SignatureSignature sig=Z%2FRHIX5Xcg0Mq2rqI3OlWTjEg2tYkboXr1P9ZUXDtkk%3D Utilisée pour autoriser l’accès à l’objet blob.Used to authorize access to the blob. La signature est un HMAC calculé sur une chaîne de signature et une clé à l'aide de l'algorithme SHA256, puis codé en Base64.The signature is an HMAC computed over a string-to-sign and key using the SHA256 algorithm, and then encoded using Base64 encoding.

Exemple d’URI SAP de compteAccount SAS URI example

Voici un exemple de SAP de compte qui utilise les mêmes paramètres communs sur le jeton.Here is an example of an account SAS that uses the same common parameters on the token. Dans la mesure où ces paramètres sont décrits ci-dessus, ils ne sont pas décrits ici.Since these parameters are described above, they are not described here. Seuls les paramètres propres à la SAP de compte sont décrits dans le tableau ci-dessous.Only the parameters that are specific to account SAS are described in the table below.

https://myaccount.blob.core.windows.net/?restype=service&comp=properties&sv=2015-04-05&ss=bf&srt=s&st=2015-04-29T22%3A18%3A26Z&se=2015-04-30T02%3A23%3A26Z&sr=b&sp=rw&sip=168.1.5.60-168.1.5.70&spr=https&sig=F%6GRVAZ5Cdj2Pw4tgU7IlSTkWgn7bUkkAg8P6HESXwmf%4B
NomName Partie de la SAPSAS portion DescriptionDescription
URI de ressourceResource URI https://myaccount.blob.core.windows.net/?restype=service&comp=properties Point de terminaison du service BLOB, avec les paramètres d’obtention des propriétés du service (appel avec la méthode GET) ou de définition des propriétés du service (appel avec la méthode SET).The Blob service endpoint, with parameters for getting service properties (when called with GET) or setting service properties (when called with SET).
ServicesServices ss=bf La SAP s’applique au service BLOB et au service de fichiers.The SAS applies to the Blob and File services
Types de ressourcesResource types srt=s La SAP s’applique aux opérations au niveau du service.The SAS applies to service-level operations.
AutorisationsPermissions sp=rw Les autorisations accordent l’accès aux opérations de lecture et d’écriture.The permissions grant access to read and write operations.

Étant donné que les autorisations sont limitées au niveau du service, les opérations accessibles avec cette SAP sont Get Blob Service Properties (lecture) et Set Blob Service Properties (écriture).Given that permissions are restricted to the service level, accessible operations with this SAS are Get Blob Service Properties (read) and Set Blob Service Properties (write). Cependant, avec un autre URI de ressource, le même jeton de SAP peut également être utilisé pour déléguer l’accès à l’opération Get Blob Service Stats (lecture).However, with a different resource URI, the same SAS token could also be used to delegate access to Get Blob Service Stats (read).

Contrôle d’une SAP avec une stratégie d’accès stockéeControlling a SAS with a stored access policy

Une signature d’accès partagé peut prendre deux formes :A shared access signature can take one of two forms:

  • SAP ad hoc : quand vous créez une signature d’accès partagé ad hoc, l’heure de début, l’heure d’expiration et les autorisations associées à cette signature sont spécifiées dans l’URI SAP (ou sont implicites, dans le cas où l’heure de début est omise).Ad hoc SAS: When you create an ad hoc SAS, the start time, expiry time, and permissions for the SAS are all specified in the SAS URI (or implied, in the case where start time is omitted). Ce type de SAP peut être créé en tant que SAP de compte ou SAP de service.This type of SAS can be created as an account SAS or a service SAS.
  • SAP avec stratégie d’accès stockée : une stratégie d’accès stockée est définie dans un conteneur de ressources (conteneur d’objets blob, table, file d’attente ou partage de fichiers) et permet de gérer les contraintes d’une ou de plusieurs signatures d’accès partagé.SAS with stored access policy: A stored access policy is defined on a resource container--a blob container, table, queue, or file share--and can be used to manage constraints for one or more shared access signatures. Quand vous associez une signature d’accès partagé à une stratégie d’accès stockée, la signature hérite des contraintes (heure de début, heure d’expiration et autorisations) définies pour la stratégie.When you associate a SAS with a stored access policy, the SAS inherits the constraints--the start time, expiry time, and permissions--defined for the stored access policy.

Notes

À l’heure actuelle, une SAP de compte doit être une SAP ad hoc.Currently, an account SAS must be an ad hoc SAS. Les stratégies d’accès stockées ne sont pas encore prises en charge pour les SAP de compte.Stored access policies are not yet supported for account SAS.

La différence entre les deux formes est importante pour un scénario clé : la révocation.The difference between the two forms is important for one key scenario: revocation. Comme un URI SAP est une URL, toute personne qui obtient la signature d’accès partagé peut s’en servir, quel que soit celui qui l’a créée initialement.Because a SAS URI is a URL, anyone that obtains the SAS can use it, regardless of who originally created it. Si une SAP est publiée publiquement, elle peut être utilisée par n’importe qui.If a SAS is published publicly, it can be used by anyone in the world. Une signature d’accès partagé accorde l’accès aux ressources à toute personne qui la possède jusqu’à ce que l’un des quatre événements suivants ait lieu :A SAS grants access to resources to anyone possessing it until one of four things happens:

  1. L'heure d'expiration spécifiée sur la signature d'accès partagé est atteinte.The expiry time specified on the SAS is reached.
  2. L'heure d'expiration spécifiée sur la stratégie d'accès stockée référencée par la signature d'accès partagé est atteinte (si une stratégie d'accès stockée est référencée et si elle spécifie une heure d'expiration).The expiry time specified on the stored access policy referenced by the SAS is reached (if a stored access policy is referenced, and if it specifies an expiry time). Cela peut arriver soit parce que l’intervalle s’est écoulé, soit parce que vous avez modifié la stratégie d’accès stockée pour définir une heure d’expiration dans le passé, ce qui est une manière de révoquer la signature d’accès partagé.This can occur either because the interval elapses, or because you've modified the stored access policy with an expiry time in the past, which is one way to revoke the SAS.
  3. La stratégie d'accès stockée référencée par la signature d'accès partagé est supprimée, ce qui est une autre manière de révoquer la signature d'accès partagé.The stored access policy referenced by the SAS is deleted, which is another way to revoke the SAS. Notez que si vous recréez la stratégie d'accès stockée avec exactement le même nom, tous les jetons de signature d'accès partagé existants seront de nouveau valides en fonction des autorisations associées à cette stratégie d'accès stockée (en partant du principe que l'heure d'expiration sur la signature d'accès partagé n'est pas passée).Note that if you recreate the stored access policy with exactly the same name, all existing SAS tokens will again be valid according to the permissions associated with that stored access policy (assuming that the expiry time on the SAS has not passed). Si vous avez l'intention de révoquer la signature d'accès partagé, veillez à utiliser un nom différent si vous recréez la stratégie d'accès avec une heure d'expiration située dans le futur.If you are intending to revoke the SAS, be sure to use a different name if you recreate the access policy with an expiry time in the future.
  4. La clé de compte qui a été utilisée pour créer la signature d'accès partagé est régénérée.The account key that was used to create the SAS is regenerated. La regénération d’une clé de compte provoquera l’échec de l’autorisation de tous les composants de l’application qui utilisent cette clé jusqu’à ce qu’ils soient mis à jour afin d’utiliser l’autre clé de compte valide ou la clé de compte nouvellement regénérée.Regenerating an account key will cause all application components using that key to fail to authorize until they're updated to use either the other valid account key or the newly regenerated account key.

Important

L’URI d’une signature d’accès partagé est associé à la clé du compte utilisée pour créer la signature et à la stratégie d’accès stockée correspondante (le cas échéant).A shared access signature URI is associated with the account key used to create the signature, and the associated stored access policy (if any). Si aucune stratégie d’accès stockée n’est spécifiée, la seule façon de révoquer une signature d’accès partagé consiste à modifier la clé du compte.If no stored access policy is specified, the only way to revoke a shared access signature is to change the account key.

Authentification à partir d’une application cliente avec la SAPAuthenticating from a client application with a SAS

Un client qui est en possession d’une SAP peut l’utiliser pour autoriser une demande sur un compte de stockage pour lequel il ne possède pas les clés de compte.A client who is in possession of a SAS can use the SAS to authorize a request against a storage account for which they do not possess the account keys. Une SAP peut être incluse dans une chaîne de connexion ou utilisée directement à partir de la méthode ou du constructeur approprié(e).A SAS can be included in a connection string, or used directly from the appropriate constructor or method.

Utilisation d’une SAP dans une chaîne de connexionUsing a SAS in a connection string

Si vous disposez d’une URL de signature d’accès partagé (SAP) qui vous permet d’accéder aux ressources d’un compte de stockage, vous pouvez utiliser la SAP dans une chaîne de connexion.If you possess a shared access signature (SAS) URL that grants you access to resources in a storage account, you can use the SAS in a connection string. Étant donné que la SAP contient les informations requises pour authentifier la requête, une chaîne de connexion avec une SAP fournit le protocole, le point de terminaison de service et les informations d’identification nécessaires pour accéder à la ressource.Because the SAS contains the information required to authenticate the request, a connection string with a SAS provides the protocol, the service endpoint, and the necessary credentials to access the resource.

Pour créer une chaîne de connexion incluant une signature d’accès partagé, spécifiez la chaîne au format suivant :To create a connection string that includes a shared access signature, specify the string in the following format:

BlobEndpoint=myBlobEndpoint;
QueueEndpoint=myQueueEndpoint;
TableEndpoint=myTableEndpoint;
FileEndpoint=myFileEndpoint;
SharedAccessSignature=sasToken

Chaque point de terminaison de service est facultatif, mais la chaîne de connexion doit en contenir au moins un.Each service endpoint is optional, although the connection string must contain at least one.

Notes

Il est recommandé d’utiliser le protocole HTTPS avec une SAS.Using HTTPS with a SAS is recommended as a best practice.

Si vous spécifiez une SAS dans une chaîne de connexion dans un fichier de configuration, vous devrez encoder les caractères spéciaux dans l’URL.If you are specifying a SAS in a connection string in a configuration file, you may need to encode special characters in the URL.

Exemple de SAP de serviceService SAS example

Voici un exemple de chaîne de connexion incluant la SAS d’un service pour Blob Storage :Here's an example of a connection string that includes a service SAS for Blob storage:

BlobEndpoint=https://storagesample.blob.core.windows.net;
SharedAccessSignature=sv=2015-04-05&sr=b&si=tutorial-policy-635959936145100803&sig=9aCzs76n0E7y5BpEi2GvsSv433BZa22leDOZXX%2BXXIU%3D

Et voici un exemple de la même chaîne de connexion avec encodage de caractères spéciaux :And here's an example of the same connection string with encoding of special characters:

BlobEndpoint=https://storagesample.blob.core.windows.net;
SharedAccessSignature=sv=2015-04-05&sr=b&si=tutorial-policy-635959936145100803&sig=9aCzs76n0E7y5BpEi2GvsSv433BZa22leDOZXX%2BXXIU%3D

Exemple de SAP de compteAccount SAS example

Voici un exemple de chaîne de connexion incluant la SAS d’un compte pour Blob Storage et File Storage.Here's an example of a connection string that includes an account SAS for Blob and File storage. Notez que les points de terminaison des deux services sont spécifiés :Note that endpoints for both services are specified:

BlobEndpoint=https://storagesample.blob.core.windows.net;
FileEndpoint=https://storagesample.file.core.windows.net;
SharedAccessSignature=sv=2015-07-08&sig=iCvQmdZngZNW%2F4vw43j6%2BVz6fndHF5LI639QJba4r8o%3D&spr=https&st=2016-04-12T03%3A24%3A31Z&se=2016-04-13T03%3A29%3A31Z&srt=s&ss=bf&sp=rwl

Et voici un exemple de la même chaîne de connexion avec encodage de l’URL :And here's an example of the same connection string with URL encoding:

BlobEndpoint=https://storagesample.blob.core.windows.net;
FileEndpoint=https://storagesample.file.core.windows.net;
SharedAccessSignature=sv=2015-07-08&sig=iCvQmdZngZNW%2F4vw43j6%2BVz6fndHF5LI639QJba4r8o%3D&spr=https&st=2016-04-12T03%3A24%3A31Z&se=2016-04-13T03%3A29%3A31Z&srt=s&ss=bf&sp=rwl

Utilisation d’une SAP dans un constructeur ou une méthodeUsing a SAS in a constructor or method

Plusieurs surcharges de méthodes et constructeurs de bibliothèques clientes du stockage Azure offrent un paramètre SAP, afin de vous permettre d’autoriser une demande au service avec une SAP.Several Azure Storage client library constructors and method overloads offer a SAS parameter, so that you can authorize a request to the service with a SAS.

Ici, par exemple, un URI de SAP est utilisé pour créer une référence à un objet blob de blocs.For example, here a SAS URI is used to create a reference to a block blob. La SAP fournit uniquement les informations d’identification nécessaires à la demande.The SAS provides the only credentials needed for the request. La référence à l’objet blob de bloc est ensuite utilisée pour une opération d’écriture :The block blob reference is then used for a write operation:

string sasUri = "https://storagesample.blob.core.windows.net/sample-container/" +
    "sampleBlob.txt?sv=2015-07-08&sr=b&sig=39Up9JzHkxhUIhFEjEH9594DJxe7w6cIRCg0V6lCGSo%3D" +
    "&se=2016-10-18T21%3A51%3A37Z&sp=rcw";

CloudBlockBlob blob = new CloudBlockBlob(new Uri(sasUri));

// Create operation: Upload a blob with the specified name to the container.
// If the blob does not exist, it will be created. If it does exist, it will be overwritten.
try
{
    MemoryStream msWrite = new MemoryStream(Encoding.UTF8.GetBytes(blobContent));
    msWrite.Position = 0;
    using (msWrite)
    {
        await blob.UploadFromStreamAsync(msWrite);
    }

    Console.WriteLine("Create operation succeeded for SAS {0}", sasUri);
    Console.WriteLine();
}
catch (StorageException e)
{
    if (e.RequestInformation.HttpStatusCode == 403)
    {
        Console.WriteLine("Create operation failed for SAS {0}", sasUri);
        Console.WriteLine("Additional error information: " + e.Message);
        Console.WriteLine();
    }
    else
    {
        Console.WriteLine(e.Message);
        Console.ReadLine();
        throw;
    }
}

Bonnes pratiques lors de l’utilisation de SAPBest practices when using SAS

Lorsque vous utilisez des signatures d'accès partagé dans vos applications, vous devez être conscient de deux risques potentiels :When you use shared access signatures in your applications, you need to be aware of two potential risks:

  • Si une signature d'accès partagé est divulguée, toute personne qui se la procure peut s'en servir et votre compte de stockage court donc le risque d'être compromis.If a SAS is leaked, it can be used by anyone who obtains it, which can potentially compromise your storage account.
  • Si une signature d'accès partagé fournie à une application cliente expire et que l'application est incapable d'en récupérer une nouvelle à partir de votre service, la fonctionnalité de votre application risque d'être entravée.If a SAS provided to a client application expires and the application is unable to retrieve a new SAS from your service, then the application's functionality may be hindered.

Les recommandations suivantes relatives à l’utilisation des signatures d’accès partagé peuvent aider à limiter ces risques :The following recommendations for using shared access signatures can help mitigate these risks:

  1. Utilisez toujours HTTPS pour créer ou distribuer une signature d’accès partagé.Always use HTTPS to create or distribute a SAS. Si une signature d’accès partagé est transmise sur HTTP et interceptée, un pirate qui lance une attaque de type « attaque de l’intercepteur » (man-in-the-middle) peut lire la signature et s’en servir exactement comme l’utilisateur concerné aurait pu le faire, d’où le risque que les données sensibles soient compromises ou que les données soient altérées par l’utilisateur malveillant.If a SAS is passed over HTTP and intercepted, an attacker performing a man-in-the-middle attack is able to read the SAS and then use it just as the intended user could have, potentially compromising sensitive data or allowing for data corruption by the malicious user.
  2. Référencez si possible les stratégies d'accès stockées.Reference stored access policies where possible. Celles-ci vous donnent la possibilité de révoquer les autorisations sans avoir à régénérer les clés de compte de stockage.Stored access policies give you the option to revoke permissions without having to regenerate the storage account keys. Définissez une échéance très éloignée dans le temps (voire infinie) pour l’expiration de ces dernières et veillez à ce qu’elle soit régulièrement mise à jour et repoussée dans le futur.Set the expiration on these very far in the future (or infinite) and make sure it's regularly updated to move it farther into the future.
  3. Utilisez des heures d'expiration avec une échéance à court terme sur une signature d'accès partagé ad hoc.Use near-term expiration times on an ad hoc SAS. De cette manière, même si une signature d’accès partagé est compromise, elle n’est valide que pendant une courte durée.In this way, even if a SAS is compromised, it's valid only for a short time. Cette pratique est particulièrement importante si vous ne pouvez pas référencer une stratégie d'accès stockée.This practice is especially important if you cannot reference a stored access policy. Des heures d’expiration avec une échéance à court terme permettent également de limiter la quantité de données pouvant être écrites dans un objet blob en limitant le temps disponible pour le chargement vers ce dernier.Near-term expiration times also limit the amount of data that can be written to a blob by limiting the time available to upload to it.
  4. Faites en sorte que les clients renouvellent automatiquement la signature d'accès partagé si nécessaire.Have clients automatically renew the SAS if necessary. Les clients doivent renouveler la signature d’accès partagé bien avant l’heure d’expiration afin de laisser suffisamment de temps pour de nouvelles tentatives, si le service qui fournit la signature est indisponible.Clients should renew the SAS well before the expiration, in order to allow time for retries if the service providing the SAS is unavailable. Si votre signature d’accès partagé doit être utilisée pour un petit nombre d’opérations immédiates de courte durée, censées être terminées avant l’heure d’expiration, cela ne sera peut-être pas nécessaire, car il n’est pas prévu que la signature d’accès partagé soit renouvelée.If your SAS is meant to be used for a small number of immediate, short-lived operations that are expected to be completed within the expiration period, then this may be unnecessary as the SAS is not expected to be renewed. Toutefois, si vous avez un client qui effectue régulièrement des demandes par le biais de signatures d'accès partagé, le risque d'expiration est à prendre en compte.However, if you have client that is routinely making requests via SAS, then the possibility of expiration comes into play. La principale considération consiste à trouver un équilibre entre la nécessité que la signature d’accès partagé ait une durée de vie limitée (comme indiqué plus haut) et la nécessité de veiller à ce que le client demande le renouvellement suffisamment tôt pour éviter une interruption due à une expiration de la signature avant le renouvellement effectif.The key consideration is to balance the need for the SAS to be short-lived (as previously stated) with the need to ensure that the client is requesting renewal early enough (to avoid disruption due to the SAS expiring prior to successful renewal).
  5. Faites attention à la date de début de la signature d’accès partagé.Be careful with SAS start time. Si vous définissez la date de début d’une signature d’accès partagé sur maintenant, en raison du décalage d’horloge (différences constatées dans l’heure actuelle sur des machines différentes), des défaillances peuvent être observées par intermittence pendant les premières minutes.If you set the start time for a SAS to now, then due to clock skew (differences in current time according to different machines), failures may be observed intermittently for the first few minutes. En règle générale, définissez une heure de début située au moins 15 minutes avant l’heure couranteIn general, set the start time to be at least 15 minutes in the past. ou ne la définissez pas du tout, et elle sera alors valide immédiatement dans tous les cas.Or, don't set it at all, which will make it valid immediately in all cases. Cela vaut également d’une manière générale pour l’heure d’expiration. Souvenez-vous que vous pouvez observer jusqu’à 15 minutes de décalage d’horloge (dans l’une ou l’autre direction) sur une demande.The same generally applies to expiry time as well--remember that you may observe up to 15 minutes of clock skew in either direction on any request. Pour les clients qui utilisent une version de REST antérieure à la version 2012-02-12, la durée maximale pour une signature d’accès partagé qui ne renvoie pas à une stratégie d’accès stockée est de 1 heure et toutes les stratégies spécifiant une période plus longue échouent.For clients using a REST version prior to 2012-02-12, the maximum duration for a SAS that does not reference a stored access policy is 1 hour, and any policies specifying longer term than that will fail.
  6. Soyez précis quant à la ressource pour laquelle vous voulez configurer l'accès.Be specific with the resource to be accessed. Une bonne pratique en matière de sécurité consiste à fournir à l’utilisateur les privilèges minimaux requis.A security best practice is to provide a user with the minimum required privileges. Si un utilisateur a besoin d'un accès en lecture à une seule entité, accordez-lui un accès en lecture à cette seule entité, plutôt qu'un accès en lecture/écriture/suppression à toutes les entités.If a user only needs read access to a single entity, then grant them read access to that single entity, and not read/write/delete access to all entities. Cela permet également d’atténuer les dégâts si une signature d’accès partagé est compromise, car son pouvoir est moindre entre les mains d’une personne malveillante.This also helps lessen the damage if a SAS is compromised because the SAS has less power in the hands of an attacker.
  7. Sachez que toute utilisation de votre compte sera facturée, y compris pour les signatures d'accès partagé.Understand that your account will be billed for any usage, including that done with SAS. Si vous fournissez un accès en écriture à un objet blob, un utilisateur peut choisir de charger un objet blob de 200 Go.If you provide write access to a blob, a user may choose to upload a 200GB blob. Si vous lui avez également accordé un accès en lecture, il peut choisir de le télécharger 10 fois, et vous devrez alors acquitter des frais de sortie pour l’équivalent de 2 To.If you've given them read access as well, they may choose to download it 10 times, incurring 2 TB in egress costs for you. Accordez des autorisations limitées pour atténuer les risques liés aux actions éventuelles d’utilisateurs malveillants.Again, provide limited permissions to help mitigate the potential actions of malicious users. Utilisez des signatures d'accès partagé à durée de vie limitée pour atténuer cette menace (mais pensez au décalage d'horloge pour l'heure de fin).Use short-lived SAS to reduce this threat (but be mindful of clock skew on the end time).
  8. Validez les données écrites avec une signature d'accès partagé.Validate data written using SAS. Lorsqu'une application cliente écrit des données dans votre compte de stockage, n'oubliez pas que ces données peuvent être une source de problèmes.When a client application writes data to your storage account, keep in mind that there can be problems with that data. Si votre application exige que ces données soient validées ou autorisées avant de pouvoir être utilisées, vous devez effectuer cette validation après l’écriture des données et avant qu’elles ne soient utilisées par votre application.If your application requires that data be validated or authorized before it is ready to use, you should perform this validation after the data is written and before it is used by your application. Cette pratique assure également une protection contre l'écriture de données endommagées ou malveillantes dans votre compte, soit par un utilisateur qui a acquis correctement la signature d'accès partagé, soit par un utilisateur qui exploite sa divulgation.This practice also protects against corrupt or malicious data being written to your account, either by a user who properly acquired the SAS, or by a user exploiting a leaked SAS.
  9. N'utilisez pas toujours une signature d'accès partagé.Don't always use SAS. Parfois, les risques associés à une opération particulière sur votre compte de stockage l'emportent sur les avantages offerts par la signature d'accès partagé.Sometimes the risks associated with a particular operation against your storage account outweigh the benefits of SAS. Pour ces opérations, créez un service de niveau intermédiaire qui écrit dans votre compte de stockage après avoir effectué la validation des règles métier, l'authentification et un audit.For such operations, create a middle-tier service that writes to your storage account after performing business rule validation, authentication, and auditing. Parfois aussi, il est plus simple de gérer l'accès par d'autres moyens.Also, sometimes it's simpler to manage access in other ways. Par exemple, si vous voulez que tous les objets blob dans un conteneur soient publiquement lisibles, vous pouvez rendre le conteneur public, au lieu de fournir une signature d'accès partagé à chaque client.For example, if you want to make all blobs in a container publicly readable, you can make the container Public, rather than providing a SAS to every client for access.
  10. Utilisez Storage Analytics pour surveiller votre application.Use Storage Analytics to monitor your application. Vous pouvez utiliser la journalisation et les mesures pour observer tout pic dans les échecs d’authentification dus à une interruption du service de votre fournisseur de signatures d’accès partagé ou à la suppression par inadvertance d’une stratégie d’accès stockée.You can use logging and metrics to observe any spike in authentication failures due to an outage in your SAS provider service or to the inadvertent removal of a stored access policy. Pour plus d'informations, consultez le blog de l'équipe Azure Storage .See the Azure Storage Team Blog for additional information.

Exemples de SAPSAS examples

Vous trouverez ci-dessous des exemples des deux types de signatures d’accès partagé, SAP de compte et SAP de service.Below are some examples of both types of shared access signatures, account SAS and service SAS.

Pour exécuter ces exemples C#, vous devez référencer les packages NuGet suivants dans votre projet :To run these C# examples, you need to reference the following NuGet packages in your project:

Pour obtenir des exemples supplémentaires expliquant comment créer et tester une SAP, consultez les Exemples de code Azure pour le stockage.For additional examples that show how to create and test a SAS, see Azure Code Samples for Storage.

Exemple : création et utilisation d’une SAP de compteExample: Create and use an account SAS

L’exemple de code suivant crée une SAP de compte valide pour le service BLOB et le service de fichiers, et donne au client des autorisations d’accès en lecture, en écriture et en liste pour accéder aux API au niveau du service.The following code example creates an account SAS that is valid for the Blob and File services, and gives the client permissions read, write, and list permissions to access service-level APIs. Le SAP de compte limitant le protocole à HTTPS, la demande doit être effectuée avec ce protocole.The account SAS restricts the protocol to HTTPS, so the request must be made with HTTPS.

static string GetAccountSASToken()
{
    // To create the account SAS, you need to use your shared key credentials. Modify for your account.
    const string ConnectionString = "DefaultEndpointsProtocol=https;AccountName=account-name;AccountKey=account-key";
    CloudStorageAccount storageAccount = CloudStorageAccount.Parse(ConnectionString);

    // Create a new access policy for the account.
    SharedAccessAccountPolicy policy = new SharedAccessAccountPolicy()
        {
            Permissions = SharedAccessAccountPermissions.Read | SharedAccessAccountPermissions.Write | SharedAccessAccountPermissions.List,
            Services = SharedAccessAccountServices.Blob | SharedAccessAccountServices.File,
            ResourceTypes = SharedAccessAccountResourceTypes.Service,
            SharedAccessExpiryTime = DateTime.UtcNow.AddHours(24),
            Protocols = SharedAccessProtocol.HttpsOnly
        };

    // Return the SAS token.
    return storageAccount.GetSharedAccessSignature(policy);
}

Afin utiliser la SAP de compte pour accéder aux API au niveau du service pour le service BLOB, construisez un client d’objet blob à l’aide de la SAP et du point de terminaison de stockage d’objets blob de votre compte de stockage.To use the account SAS to access service-level APIs for the Blob service, construct a Blob client object using the SAS and the Blob storage endpoint for your storage account.

static void UseAccountSAS(string sasToken)
{
    // Create new storage credentials using the SAS token.
    StorageCredentials accountSAS = new StorageCredentials(sasToken);
    // Use these credentials and the account name to create a Blob service client.
    CloudStorageAccount accountWithSAS = new CloudStorageAccount(accountSAS, "account-name", endpointSuffix: null, useHttps: true);
    CloudBlobClient blobClientWithSAS = accountWithSAS.CreateCloudBlobClient();

    // Now set the service properties for the Blob client created with the SAS.
    blobClientWithSAS.SetServiceProperties(new ServiceProperties()
    {
        HourMetrics = new MetricsProperties()
        {
            MetricsLevel = MetricsLevel.ServiceAndApi,
            RetentionDays = 7,
            Version = "1.0"
        },
        MinuteMetrics = new MetricsProperties()
        {
            MetricsLevel = MetricsLevel.ServiceAndApi,
            RetentionDays = 7,
            Version = "1.0"
        },
        Logging = new LoggingProperties()
        {
            LoggingOperations = LoggingOperations.All,
            RetentionDays = 14,
            Version = "1.0"
        }
    });

    // The permissions granted by the account SAS also permit you to retrieve service properties.
    ServiceProperties serviceProperties = blobClientWithSAS.GetServiceProperties();
    Console.WriteLine(serviceProperties.HourMetrics.MetricsLevel);
    Console.WriteLine(serviceProperties.HourMetrics.RetentionDays);
    Console.WriteLine(serviceProperties.HourMetrics.Version);
}

Exemple : création d’une stratégie d’accès stockéeExample: Create a stored access policy

Le code suivant crée une stratégie d’accès stockée sur un conteneur.The following code creates a stored access policy on a container. Vous pouvez utiliser la stratégie d’accès pour spécifier des contraintes pour une SAP de service sur le conteneur ou sur ses objets blob.You can use the access policy to specify constraints for a service SAS on the container or its blobs.

private static async Task CreateSharedAccessPolicyAsync(CloudBlobContainer container, string policyName)
{
    // Create a new shared access policy and define its constraints.
    // The access policy provides create, write, read, list, and delete permissions.
    SharedAccessBlobPolicy sharedPolicy = new SharedAccessBlobPolicy()
    {
        // When the start time for the SAS is omitted, the start time is assumed to be the time when the storage service receives the request.
        // Omitting the start time for a SAS that is effective immediately helps to avoid clock skew.
        SharedAccessExpiryTime = DateTime.UtcNow.AddHours(24),
        Permissions = SharedAccessBlobPermissions.Read | SharedAccessBlobPermissions.List |
            SharedAccessBlobPermissions.Write | SharedAccessBlobPermissions.Create | SharedAccessBlobPermissions.Delete
    };

    // Get the container's existing permissions.
    BlobContainerPermissions permissions = await container.GetPermissionsAsync();

    // Add the new policy to the container's permissions, and set the container's permissions.
    permissions.SharedAccessPolicies.Add(policyName, sharedPolicy);
    await container.SetPermissionsAsync(permissions);
}

Exemple : création d’une SAP de service dans un conteneurExample: Create a service SAS on a container

Le code suivant crée une SAP sur un conteneur.The following code creates a SAS on a container. Si le nom d’une stratégie d’accès stockée existante est fourni, cette stratégie est associée à la SAP.If the name of an existing stored access policy is provided, that policy is associated with the SAS. Si aucune stratégie d’accès stockée n’est fourni, le code crée une SAP ad hoc sur le conteneur.If no stored access policy is provided, then the code creates an ad hoc SAS on the container.

private static string GetContainerSasUri(CloudBlobContainer container, string storedPolicyName = null)
{
    string sasContainerToken;

    // If no stored policy is specified, create a new access policy and define its constraints.
    if (storedPolicyName == null)
    {
        // Note that the SharedAccessBlobPolicy class is used both to define the parameters of an ad hoc SAS, and
        // to construct a shared access policy that is saved to the container's shared access policies.
        SharedAccessBlobPolicy adHocPolicy = new SharedAccessBlobPolicy()
        {
            // When the start time for the SAS is omitted, the start time is assumed to be the time when the storage service receives the request.
            // Omitting the start time for a SAS that is effective immediately helps to avoid clock skew.
            SharedAccessExpiryTime = DateTime.UtcNow.AddHours(24),
            Permissions = SharedAccessBlobPermissions.Write | SharedAccessBlobPermissions.List
        };

        // Generate the shared access signature on the container, setting the constraints directly on the signature.
        sasContainerToken = container.GetSharedAccessSignature(adHocPolicy, null);

        Console.WriteLine("SAS for blob container (ad hoc): {0}", sasContainerToken);
        Console.WriteLine();
    }
    else
    {
        // Generate the shared access signature on the container. In this case, all of the constraints for the
        // shared access signature are specified on the stored access policy, which is provided by name.
        // It is also possible to specify some constraints on an ad hoc SAS and others on the stored access policy.
        sasContainerToken = container.GetSharedAccessSignature(null, storedPolicyName);

        Console.WriteLine("SAS for blob container (stored access policy): {0}", sasContainerToken);
        Console.WriteLine();
    }

    // Return the URI string for the container, including the SAS token.
    return container.Uri + sasContainerToken;
}

Exemple : création d’une SAP de service dans un objet blobExample: Create a service SAS on a blob

Le code suivant crée une SAP sur un objet blob.The following code creates a SAS on a blob. Si le nom d’une stratégie d’accès stockée existante est fourni, cette stratégie est associée à la SAP.If the name of an existing stored access policy is provided, that policy is associated with the SAS. Si aucune stratégie d’accès stockée n’est fourni, le code crée une SAP ad hoc sur l’objet blob.If no stored access policy is provided, then the code creates an ad hoc SAS on the blob.

private static string GetBlobSasUri(CloudBlobContainer container, string blobName, string policyName = null)
{
    string sasBlobToken;

    // Get a reference to a blob within the container.
    // Note that the blob may not exist yet, but a SAS can still be created for it.
    CloudBlockBlob blob = container.GetBlockBlobReference(blobName);

    if (policyName == null)
    {
        // Create a new access policy and define its constraints.
        // Note that the SharedAccessBlobPolicy class is used both to define the parameters of an ad hoc SAS, and
        // to construct a shared access policy that is saved to the container's shared access policies.
        SharedAccessBlobPolicy adHocSAS = new SharedAccessBlobPolicy()
        {
            // When the start time for the SAS is omitted, the start time is assumed to be the time when the storage service receives the request.
            // Omitting the start time for a SAS that is effective immediately helps to avoid clock skew.
            SharedAccessExpiryTime = DateTime.UtcNow.AddHours(24),
            Permissions = SharedAccessBlobPermissions.Read | SharedAccessBlobPermissions.Write | SharedAccessBlobPermissions.Create
        };

        // Generate the shared access signature on the blob, setting the constraints directly on the signature.
        sasBlobToken = blob.GetSharedAccessSignature(adHocSAS);

        Console.WriteLine("SAS for blob (ad hoc): {0}", sasBlobToken);
        Console.WriteLine();
    }
    else
    {
        // Generate the shared access signature on the blob. In this case, all of the constraints for the
        // shared access signature are specified on the container's stored access policy.
        sasBlobToken = blob.GetSharedAccessSignature(null, policyName);

        Console.WriteLine("SAS for blob (stored access policy): {0}", sasBlobToken);
        Console.WriteLine();
    }

    // Return the URI string for the container, including the SAS token.
    return blob.Uri + sasBlobToken;
}

ConclusionConclusion

Les signatures d'accès partagé sont utiles pour fournir des autorisations d'accès limitées à votre compte de stockage aux clients qui ne doivent pas avoir la clé du compte.Shared access signatures are useful for providing limited permissions to your storage account to clients that should not have the account key. À ce titre, elles sont un élément crucial du modèle de sécurité pour toute application utilisant Azure Storage.As such, they are a vital part of the security model for any application using Azure Storage. Si vous suivez les meilleures pratiques énumérées ci-dessus, vous pouvez utiliser une signature d'accès partagé pour offrir une plus grande souplesse d'accès aux ressources de votre compte de stockage, sans compromettre la sécurité de votre application.If you follow the best practices listed here, you can use SAS to provide greater flexibility of access to resources in your storage account, without compromising the security of your application.

Étapes suivantesNext Steps