Nouvelles Chroniques d'Amethyste

Penser au Sens, pas au Verbe

Prise en charge des accessibilités dans le stockage Azure

Poster un commentaire

Chaque requête vers un compte de stockage réclame une authentification. Il y a tout de même une exception avec les blobs que l’on peut exposer à des requêtes anonymes, mais en lecture seule.

Azure propose 3 niveaux d’accessibilités:

  1. Private (off dans certaines API)
  2. Container
  3. Blob

PRIVATE offre un accès non anonyme au conteneur et aux blobs qu’il contient. Il s’agit bien sûr de l’option par défaut. On ne peut accéder au blog qu’en fournissant une authentification.

CONTAINER n’offre aucune restriction d’accès que ce soit pour énumérer le contenu du conteneur ou lire un blob.

BLOB ne permet pas d’énumérer les blobs du conteneur de façon anonyme. Par contre on peut accéder à un blob particulier via un simple navigateur de façon anonyme.

 

On dispose de 3 possibilités d’authentifications:

  1. Fournir le nom du compte de stockage avec une clef d’authentification
    On accède au niveau administrateur à tout ce qui se trouve dans le compte de stockage et au compte lui même. La clef peut être obtenue par code ou bien depuis le portail.
    Nous démontrerons cette technique dans la partie PowerShell.
  2. Share Access Signature (SAS)
    La signature d’accès partagée est un jeton pré-authentifié que l’on ajoute à une l’URI qui pointe vers la ressource de stockage (conteneur, blob, table, queue). Le jeton contient une date limite d’utilisation et des permissions.
    SAS est donc beaucoup plus précis que la clef d’authentification et surtout évite de distribuer une clef de sécurité. La signature est simplement un hash que le serveur pourra valider.
  3. Configurer une Store Access Policy au niveau du blob ou du conteneur
    Ajoute un niveau de contrôle supplémentaire à SAS côté serveur.Dans ce modèle on va créer un profil qui sera ajouté aux propriétés de la ressource. Le client n’a donc pas de clef à sa disposition comme dans le cas qui précède, mais juste le nom du profil qui est passé dans le jeton SAS.
    Le profil contient les permissions et la date limite d’utilisation.
    La différence avec le cas précédent est que l’on en garde le profil côté serveur. Il est donc possible de la révoquer, modifier la date d’expiration sans avoir à redéployer la signature ou bien modifier la clef d’authentification.

Démonstrations

On a besoin d’un compte de stockage amethystedemo avec un conteneur logs. Dans ce conteneur on charge des fichiers, des images en l’occurrence.

Modifier les ACL

Le changement d’ACL se gère sélectionnant le conteneur puis en cliquant sur EDIT. Ce formulaire s’ouvre:

2015-05-21_18-31-37

On commence la démo en PRIVATE (off dans l’interface).

Dans un navigateur:

https://amethystedemo.blob.core.windows.net/logs/m_4.JPG

 

2015-05-18_16-19-37

 

C’est normal le conteneur est PRIVATE. Basculons le en BLOB et recommençons.

Cette fois il est possible de télécharge le fichier et notre navigateur affiche une magnifique image:

2015-05-20_20-55-04

Par contre l’url:

https://amethystedemo.blob.core.windows.net/logs?restype=container&comp=list

Affiche le même message d’erreur que précédemment, il n’est pas possible d’énumérer le contenu du blob. La documentation de l’API REST du service blob se trouve ici:

https://msdn.microsoft.com/fr-fr/library/azure/dd135733.aspx

 

Basculons à CONTAINER. Il est toujours possible de télécharger le blob, mais cette fois on peut aussi énumérer le contenu du blob:

 

2015-05-18_16-47-15

Le blob contient deux fichiers.

 

ACL est une méthode efficace qui fonctionne bien, mais souffre de diverses limitations:

  • On ne régule que des accès en lecture, pas en écriture par exemple
  • Pas de contrôle sur qui peut accéder à la ressource
  • Pas de possibilité de révoquer ou limiter dans le temps un droit d’accès

SAS et SAP nous offrirons des solutions à ce problème.

SAS et SAP

On peut gérer SAS et SAP avec PowerShell, mais il y a peu de raisons de le faire. Il est nettement plus facile d’utiliser un outil tiers comme Azure Storage Explorer.

 

L’outil permet de tester directement les différents scénarios (SAP ici avec le profil testAmethyste):

2015-05-20_19-08-54

Ou bien SAS:

2015-05-21_18-37-23

C’est purement visuel, je vous laisserai donc jouer.

On notera un point, la date de départ est un paramètre optionnel que l’on peut ne pas fournir si l’accès doit fonctionner immédiatement.

 

Un jeton SAS ressemble à ceci:

sv=2014-02-14&sr=b&sig=5c7oqw1gg10t1PX%2FHnZxrDV478G3yy04rsowPekBWIg%3D&st=2015-05-20T16%3A38%3A05Z&se=2015-05-20T21%3A38%3A05Z

On a juste à l’ajouter à la chaîne de requête. Il y a au moins deux paramètres de la chaîne à savoir repérer:

  • sr=b indique que la ressource qui reçoit la signature est un blob. On trouvera c pour un conteneur
  • sv= est la version de la chaîne

On trouve des infos plus complètes sur la syntaxe de la chaîne:

https://msdn.microsoft.com/fr-fr/library/azure/dn140255.aspx

 

Un jeton SAP ressemble à:

sr=c&si=testAmethyste&sig=U1wJJybk1mvMJLIOtWEhhvypL%2F%2FFsMSfLkVn0XtzCN4%3D

  • si indique le nom de la Policy (le profil)

 

On peut lire également ceci au sujet des accessibilités:

http://azure.microsoft.com/en-us/documentation/articles/storage-manage-access-to-resources/

http://azure.microsoft.com/fr-fr/documentation/articles/storage-dotnet-shared-access-signature-part-1/

 

Quel que soit le modèle de clef/jeton que vous utilisez, il faudra le sécuriser au niveau de vos applications clientes:

  • Ne persister que des versions encryptées de la clef ou du jeton
  • utiliser cert pour décrypter/encrypter
  • ne pas laisser cert sur les nœuds qui n’en ont pas besoin
  • transférer en HTTPS les jetons SAS
  • De préférence automatiser le changement régulier de la clef et/ou des jetons SAS

 

 

Publicités

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s