Déployer un compte de stockage géré dans Microsoft Azure

novembre 17, 2019 Sécurité et conformité, MOVEit

Aujourd’hui, je vais vous montrer comment créer ce que Microsoft appelle un compte de stockage géré. Peut-être savez-vous que chaque compte de stockage dispose de deux clés privées interchangeables que vous pouvez utiliser pour vous authentifier par programmation afin d'accéder aux quatre services suivants :

  • blob
  • fichier
  • table
  • file d'attente

Voyons de plus près le compte de stockage général v2 ipstorage704 illustré à la Figure 1. Ce compte est non géré, ce qui implique que nous gérons ces deux clés privées et non Azure.

Figure 1. Compte de stockage Azure non géré.

Si vous oubliez de régénérer et d'effectuer la rotation des clés, ou pire, que vous laissez les clés en texte clair dans le code source, vous mettez carrément en péril la sécurité des données Azure.

Qu'est-ce qu'un compte de stockage géré ?

Un compte de stockage géré est un compte de stockage général dont la sécurité est gérée par Azure. Nous viserons ainsi les objectifs suivants :

  • enregistrer les deux clés d'accès dans une ressource Azure Key Vault
  • demander à Azure de régénérer les clés périodiquement

Pour configurer votre environnement Azure aux fins de cet exercice, vous devrez accomplir les trois tâches suivantes :

Oui, nous devons définir un compte de stockage géré par programmation avec Azure PowerShell ou l'interface de ligne de commande (CLI) Azure, car cette fonctionnalité n'est pas disponible actuellement sur le portail Azure. J'ai emprunté le code de l'article des docs Microsoft Azure intitulé Manage storage account keys with Key Vault and Azure PowerShell (Gérer les clés de compte de stockage avec Key Vault et Azure PowerShell). Maintenant, au travail !

Configurer l'environnement Azure PowerShell

Ouvrez une console PowerShell avec des privilèges élevés ou une instance Visual Studio Code et authentifiez-vous auprès de votre abonnement Azure :

Connect-AzAccount

Si vous disposez de plusieurs abonnements Azure, vous devrez indiquer votre contexte par défaut :

Set-AzContext -SubscriptionName 'MySub'

Définissons ensuite les variables qui permettront de simplifier les références au compte de stockage et à Key Vault. Notez qu'il vous faudra remplacer mes valeurs par les vôtres :

$resourceGroupName = "ipswitch"

$storageAccountName = "ipstorage704"

$storageAccountKey = "aUQBMQFMnnk2fBNsv2K49mqW31Vc0nHjMDGJm4HAZId+5PgBYfKbrZMippBaTGjlGOsg+EovpVYKwhBCIT0eSA=="

$keyVaultName = "ipswitch-keyvault"

$keyVaultSpAppId = "cfa8b339-82a2-471a-a3c9-0fc0be7a4093"

Quelques remarques concernant le code précédent :

  • Vous pouvez récupérer la clé du compte de stockage sur le portail Azure dans le volet des clés d'accès du compte de stockage (voir la figure 1). Vous pouvez utiliser indifféremment la clé 1 ou la clé 2.
  • L'ID d'application d'Azure Key Vault est définitif et fourni par Microsoft. Pour le cloud public Azure, utilisez la valeur ci-dessus. Pour les autres clouds, consultez les documentations Azure

Nous devons aussi récupérer notre ID utilisateur et référencer le compte de stockage cible :

$userId = (Get-AzContext).Account.Id

$storageAccount = Get-AzStorageAccount -ResourceGroupName $resourceGroupName -StorageAccountName $storageAccountName

Utiliser Key Vault pour gérer les clés du compte de stockage

Au nom du principe du privilège minimal, affectons le rôle de service d'opérateur de clé de compte de stockage (contrôle des accès basé sur les rôles d'Azure, RBAC) à notre Key Vault. Ceci garantit que Key Vault peut uniquement gérer les clés du compte de stockage (pas d'autre secret ou ressource Key Vault) :

New-AzRoleAssignment -ApplicationId $keyVaultSpAppId -RoleDefinitionName 'Storage Account Key Operator Service Role' -Scope $storageAccount.Id

Regardez la figure 2 : vous pouvez constater que mon Key Vault a l'affectation de rôle RBAC appropriée pour mon compte de stockage.

Figure 2. Mon Key Vault peut accéder à mon compte de stockage.

Vous savez peut-être déjà qu'Azure Key Vault utilise des règles d'accès pour accorder aux utilisateurs ou responsables du service des autorisations spécifiques sur les secrets Azure Key Vault. Il nous faut accorder ces autorisations à notre ID utilisateur :

Set-AzKeyVaultAccessPolicy -VaultName $keyVaultName -UserPrincipalName $userId -PermissionsToStorage get, list, delete, set, update, regeneratekey, getsas, listsas, deletesas, setsas, recover, backup, restore, purge

La figure 3 illustre la vue du portail Azure de mes autorisations d'accès Key Vault.

Figure 3. Mon compte utilisateur contrôle totalement les secrets Key Vault.

Terminer la configuration

Enfin, nous allons ajouter le compte de stockage cible à la liste Key Vault des comptes de stockage gérés :

Add-AzKeyVaultManagedStorageAccount -VaultName $keyVaultName -AccountName $storageAccountName -AccountResourceId $storageAccount.Id -ActiveKeyName 'key1' -DisableAutoRegenerateKey

Quelques remarques sur le code précédent :

  • Notez que la valeur du paramètre ActiveKeyName est le nom de chaîne de la clé, et non pas la valeur elle-même. Ces valeurs sont « key1 » ou « key2 ».
  • Le paramètre de commutateur DisableAutoRegenerateKey demande à Key Vault de régénérer vos clés périodiquement.

Pour configurer Key Vault de manière à utiliser, par exemple, une période de régénération de 90 jours, commencez par définir une variable :

$regenerationPeriod = [System.Timespan]::FromDays(90)

Puis utilisez la paire paramètre/valeur suivante au lieu du commutateur -DisableAutoRegenerateKey :

-RegenerationPeriod $regenerationPeriod

En cas de problème, utilisez un plan B

Lors de l'exécution de Add-AzKeyVaultManagedStorageAccount, il se peut que vous receviez une erreur de type « Bad Request » (requête erronée). Il s'agit d'un problème connu pour lequel il existe au moins un rapport de bogue GitHub.

Même si vous recevez cette erreur, tout n'est pas perdu. Il suffit d'ouvrir Azure Cloud Shell, de vous authentifier auprès de votre abonnement, et d'exécuter la commande Azure CLI suivante, en utilisant les noms et ID de vos ressources :

az keyvault storage add --vault-name ipswitch-keyvault -n ipstorage704 --active-key-name key1 --auto-regenerate-key --regeneration-period P90D --resource-id "/subscriptions/2fbf906e-1101-4bc0-b64f-adc44e462fff/resourceGroups/ipswitch/providers/Microsoft.Storage/storageAccounts/ipstorage704"

Le code précédent a été mis en œuvre avec succès sur mon système. Notez que nous spécifions ainsi une période de régénération de 90 jours.

Faire confiance, mais vérifier

Malheureusement, le portail Azure n'affiche aucune information concernant notre compte de stockage géré dans Key Vault ou le compte de stockage. Nous pouvons cependant exécuter Get-AzKeyVaultManagedStorageAccount pour effectuer la vérification :

Get-AzKeyVaultManagedStorageAccount -VaultName 'ipswitch-keyvault' -Name 'ipstorage704'

Id                  : https://ipswitch-keyvault.vault.azure.net:443/storage/ipstorage704

Vault Name          : ipswitch-keyvault

AccountName         : ipstorage704

Account Resource Id : /subscriptions/2fbf906e-1101-4bc0-b64f-adc44e462fff/resourceGroups/ipswitch/providers/Microsoft.Storage/
storageAccounts/ipstorage704

Active Key Name     : key1

Auto Regenerate Key : True

Regeneration Period : 90.00:00:00

Enabled             : True

Created             : 9/30/19 8:25:18 PM

Updated             : 9/30/19 8:25:18 PM

Tags                :

Nous y sommes ! La procédure de création d'un compte de stockage géré est peu pratique, mais l'avantage de ne plus gérer manuellement les clés d'accès du compte de stockage rend cette configuration très intéressante, quelles que soient les difficultés.

Tim Warner

Tim Warner is a Microsoft MVP, Microsoft Press/Wiley author, and Azure solution architect based in Nashville, TN. Contact Tim at Twitter (@TechTrainerTim) or his website, techtrainertim.com.

Read next Utilisation de la nouvelle API REST de MOVEit 2018 avec PowerShell