Gérer les clés de compte de stockage avec Key Vault et Azure PowerShell (hérité)

Important

La fonctionnalité de clés de compte de stockage managé Key Vault (héritées) est prise en charge telle quelle sans aucune autre mise à jour planifiée. Seules les signatures d’accès partagé (SAP) de compte sont prises en charge avec une version du service de stockage signé par des définitions SAP antérieure à la version 2018-03-28.

Important

Nous vous recommandons d’utiliser l’intégration de Stockage Azure avec Microsoft Entra ID, le service Microsoft basé sur le cloud qui gère les identités et les accès. L’intégration de Microsoft Entra est disponible pour les objets blob et les files d’attente Azure et fournit un accès basé sur les jetons OAuth2 au Stockage Azure (comme Azure Key Vault). Microsoft Entra ID vous permet d’authentifier votre application cliente en utilisant une identité d’application ou d’utilisateur plutôt que les informations d’identification du compte de stockage. Vous pouvez utiliser une identité managée Microsoft Entra lorsque vous exécutez sur Azure. Les identités managées suppriment l’authentification du client ainsi que le stockage des informations d’identification dans ou avec votre application. Utilisez cette solution ci-dessous uniquement lorsque l’authentification Microsoft Entra n’est pas possible.

Un compte de stockage Azure utilise des informations d’identification comprenant un nom de compte et une clé. La clé qui est générée automatiquement sert de mot de passe et non pas de clé de chiffrement. Key Vault gère les clés de compte de stockage en les regénérant régulièrement dans le compte de stockage. De plus, il fournit des jetons de signature d’accès partagé pour permettre un accès délégué aux ressources de votre compte de stockage.

Vous pouvez utiliser la fonctionnalité de clé de compte de stockage gérée de Key Vault pour lister (synchroniser) les clés avec un compte de stockage Azure et regénérer (faire tourner) régulièrement les clés. Vous pouvez gérer les clés des comptes de stockage et des comptes de stockage classiques.

Lorsque vous utilisez la fonctionnalité de clé de compte de stockage managé, tenez compte des points suivants :

  • Les valeurs de clés ne sont jamais retournées en réponse à l’appelant.
  • Seul Key Vault doit gérer vos clés de compte de stockage. Ne gérez pas les clés vous-même et évitez d’interférer avec les processus de Key Vault.
  • Un seul objet Key Vault doit gérer les clés de compte de stockage. Vous ne devez pas autoriser la gestion des clients par des objets multiples.
  • Régénérez les clés à l’aide de Key Vault uniquement. Ne régénérez pas manuellement vos clés de compte de stockage.

Important

La regénération de clés directement dans le compte de stockage interrompt la configuration du compte de stockage managé et peut invalider les jetons SAS en cours d’utilisation et provoquer une panne.

Notes

Nous vous recommandons d’utiliser le module Azure Az PowerShell pour interagir avec Azure. Pour commencer, consultez Installer Azure PowerShell. Pour savoir comment migrer vers le module Az PowerShell, consultez Migrer Azure PowerShell depuis AzureRM vers Az.

ID d’application du principal de service

Un tenant Azure AD fournit à chaque application inscrite un principal de service. Le principal de service fait office d’ID d’application, qui est utilisé lors de la configuration de l’autorisation pour l’accès aux autres ressources Azure à l’aide du contrôle d’accès en fonction du rôle (RBAC) Azure.

Key Vault est une application Microsoft préinscrite dans tous les tenants Microsoft Entra. Key Vault est inscrit sous le même ID d’application dans chaque cloud Azure.

Locataires Cloud ID de l'application
Microsoft Entra ID Azure Government 7e7c393b-45d0-48b1-a35e-2905ddf8183c
Microsoft Entra ID Azure public cfa8b339-82a2-471a-a3c9-0fc0be7a4093
Autres Quelconque cfa8b339-82a2-471a-a3c9-0fc0be7a4093

Prérequis

Pour suivre ce guide, vous devez d’abord effectuer ce qui suit :

Gérer les clés de compte de stockage

Se connecter au compte Azure

Authentifiez votre session PowerShell à l’aide de l’applet de commande Connect-AzAccount.

Connect-AzAccount

Si vous avez plusieurs abonnements Azure, vous pouvez les lister à l’aide de l’applet de commande Get-AzSubscription, puis spécifier l’abonnement que vous souhaitez utiliser avec l’applet de commande Set-AzContext.

Set-AzContext -SubscriptionId <subscriptionId>

Définition des variables

Commencez par définir les variables utilisées par les cmdlets PowerShell dans les étapes suivantes. Veillez à mettre à jour les espaces réservés « YourResourceGroupName », « YourStorageAccountName » et « YourKeyVaultName », puis définissez $keyVaultSpAppId avec cfa8b339-82a2-471a-a3c9-0fc0be7a4093 (comme indiqué dans ID d’application du principal de service).

Nous utiliserons également les cmdlets Azure PowerShell Get-AzContext et Get-AzStorageAccount pour récupérer votre ID d’utilisateur et le contexte de votre compte de stockage Azure.

$resourceGroupName = <YourResourceGroupName>
$storageAccountName = <YourStorageAccountName>
$keyVaultName = <YourKeyVaultName>
$keyVaultSpAppId = "cfa8b339-82a2-471a-a3c9-0fc0be7a4093"
$storageAccountKey = "key1" #(key1 or key2 are allowed)

# Get your User Id
$userId = (Get-AzContext).Account.Id

# Get a reference to your Azure storage account
$storageAccount = Get-AzStorageAccount -ResourceGroupName $resourceGroupName -StorageAccountName $storageAccountName

Remarque

Pour le compte de stockage classique, utilisez « primary » et « secondary » pour $storageAccountKey
Utilisez 'Get-AzResource -Name "ClassicStorageAccountName" -ResourceGroupName $resourceGroupName' au lieu de 'Get-AzStorageAccount' pour le compte de stockage classique

Octroyer un accès Key Vault à votre compte de stockage

Pour permettre à Key Vault d’accéder et de gérer vos clés de compte de stockage, vous devez l’autoriser à accéder à votre compte de stockage. L’application Key Vault a besoin d’autorisations afin de répertorier et de regénérer des clés pour votre compte de stockage. Ces autorisations sont activées par le biais du rôle intégré Rôle de service d’opérateur de clé de compte de stockage.

Attribuez ce rôle au principal de service Key Vault, en limitant la portée à votre compte de stockage, à l’aide de la cmdlet New-AzRoleAssignment Azure PowerShell.

# Assign Azure role "Storage Account Key Operator Service Role" to Key Vault, limiting the access scope to your storage account. For a classic storage account, use "Classic Storage Account Key Operator Service Role."
New-AzRoleAssignment -ApplicationId $keyVaultSpAppId -RoleDefinitionName 'Storage Account Key Operator Service Role' -Scope $storageAccount.Id

Si l’attribution du rôle a réussi, le résultat devrait ressembler à l’exemple suivant :

RoleAssignmentId   : /subscriptions/03f0blll-ce69-483a-a092-d06ea46dfb8z/resourceGroups/rgContoso/providers/Microsoft.Storage/storageAccounts/sacontoso/providers/Microsoft.Authorization/roleAssignments/189cblll-12fb-406e-8699-4eef8b2b9ecz
Scope              : /subscriptions/03f0blll-ce69-483a-a092-d06ea46dfb8z/resourceGroups/rgContoso/providers/Microsoft.Storage/storageAccounts/sacontoso
DisplayName        : Azure Key Vault
SignInName         :
RoleDefinitionName : storage account Key Operator Service Role
RoleDefinitionId   : 81a9662b-bebf-436f-a333-f67b29880f12
ObjectId           : 93c27d83-f79b-4cb2-8dd4-4aa716542e74
ObjectType         : ServicePrincipal
CanDelegate        : False

Si Key Vault a déjà été ajouté au rôle sur votre compte de stockage, vous recevrez un message d’erreur « L’attribution de rôle existe déjà ». Vous pouvez également vérifier l’attribution du rôle à la page « Contrôle d’accès (IAM) » du compte de stockage sur le portail Azure.

Autoriser votre compte d’utilisateur à accéder à des comptes de stockage managés

Utilisez la cmdlet Azure PowerShell Set-AzKeyVaultAccessPolicy pour mettre à jour la stratégie d’accès au coffre de clés et accorder des autorisations de compte de stockage à votre compte d’utilisateur.

# Give your user principal access to all storage account permissions, on your Key Vault instance

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

Les autorisations pour les comptes de stockage ne sont pas disponibles dans la page « Stratégies d’accès » du compte de stockage dans le portail Azure.

Ajouter un compte de stockage managé à votre instance Key Vault

Utilisez la cmdlet Azure PowerShell Add-AzKeyVaultManagedStorageAccount pour créer un compte de stockage géré dans votre instance Key Vault. Le commutateur -DisableAutoRegenerateKey spécifie de ne PAS régénérer les clés de compte de stockage.

# Add your storage account to your Key Vault's managed storage accounts

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

Si le compte de stockage a été correctement créé sans régénération des clés, le résultat devrait ressembler à l’exemple suivant :

Id                  : https://kvcontoso.vault.azure.net:443/storage/sacontoso
Vault Name          : kvcontoso
AccountName         : sacontoso
Account Resource Id : /subscriptions/03f0blll-ce69-483a-a092-d06ea46dfb8z/resourceGroups/rgContoso/providers/Microsoft.Storage/storageAccounts/sacontoso
Active Key Name     : key1
Auto Regenerate Key : False
Regeneration Period : 90.00:00:00
Enabled             : True
Created             : 11/19/2018 11:54:47 PM
Updated             : 11/19/2018 11:54:47 PM
Tags                :

Activer la régénération des clés

Pour permettre à Key Vault de régénérer régulièrement vos clés de compte de stockage, utilisez la cmdlet Azure PowerShell Add-AzKeyVaultManagedStorageAccount afin de définir une période de régénération. Dans cet exemple, nous définissons une période de régénération de 30 jours. Le moment venu d’opérer une rotation, Key Vault régénère la clé inactive, puis définit la clé nouvellement créée comme active. La clé utilisée pour émettre des jetons SAP est la clé active.

$regenPeriod = [System.Timespan]::FromDays(30)

Add-AzKeyVaultManagedStorageAccount -VaultName $keyVaultName -AccountName $storageAccountName -AccountResourceId $storageAccount.Id -ActiveKeyName $storageAccountKey -RegenerationPeriod $regenPeriod

Si le compte de stockage a été correctement créé avec régénération des clés, le résultat devrait ressembler à l’exemple suivant :

Id                  : https://kvcontoso.vault.azure.net:443/storage/sacontoso
Vault Name          : kvcontoso
AccountName         : sacontoso
Account Resource Id : /subscriptions/03f0blll-ce69-483a-a092-d06ea46dfb8z/resourceGroups/rgContoso/providers/Microsoft.Storage/storageAccounts/sacontoso
Active Key Name     : key1
Auto Regenerate Key : True
Regeneration Period : 30.00:00:00
Enabled             : True
Created             : 11/19/2018 11:54:47 PM
Updated             : 11/19/2018 11:54:47 PM
Tags                :

Jetons de signature d’accès partagé

Vous pouvez également demander à Key Vault de générer des jetons de signature d’accès partagé. Une signature d'accès partagé fournit un accès délégué aux ressources de votre compte de stockage. Vous pouvez accorder aux clients l’accès aux ressources dans votre compte de stockage sans partager les clés de votre compte. Une signature d’accès partagé constitue un moyen sécurisé de partager vos ressources de stockage sans compromettre vos clés de compte.

Les commandes figurant dans cette section effectuent les actions suivantes :

  • Définissez une définition de signature d’accès partagé.
  • Définissez une définition de signature d’accès partagé au stockage géré par Key Vault dans le coffre. La définition comporte l’URI du modèle du jeton de signature d’accès partagé créé. La définition possède le type de signature d’accès partagé account et est valide pendant N jours.
  • Vérifiez que la signature d’accès partagé a été enregistrée dans votre coffre de clés en tant que secret.

Définition des variables

Commencez par définir les variables utilisées par les cmdlets PowerShell dans les étapes suivantes. N’oubliez pas de mettre à jour les espaces réservés <YourStorageAccountName> et <YourKeyVaultName>.

$storageAccountName = <YourStorageAccountName>
$keyVaultName = <YourKeyVaultName>

Définir un modèle de définition de signature d’accès partagé

Key Vault utilise le modèle de définition SAP pour générer des jetons pour les applications clientes.

Exemple de modèle de définition SAP :

$sasTemplate="sv=2018-03-28&ss=bfqt&srt=sco&sp=rw&spr=https"

Paramètres SAP de compte requis dans un modèle de définition SAP pour Key Vault

Paramètre de demande SAP Description
SignedVersion (sv) Obligatoire. Spécifie la version du service de stockage signé à utiliser pour autoriser les demandes effectuées avec cette signature d’accès partagé (SAP) du compte. Doit être défini sur la version 2015-04-05 ou une version ultérieure. Key Vault prend en charge les versions antérieures à la version 2018-03-28
SignedServices (ss) Obligatoire. Spécifie les services signés accessibles avec la signature SAP du compte. Les valeurs possibles incluent :

- Blob (b)
- File d’attente (q)
- Table (t)
- Fichier (f)

Vous pouvez combiner des valeurs pour fournir l’accès à plusieurs services. Par exemple, ss=bf spécifie l’accès aux points de terminaison Blob et Fichier.
SignedResourceTypes (srt) Obligatoire. Spécifie les types de ressources signés accessibles avec la signature SAP du compte.

- Service (s) : accès aux API au niveau du service (par exemple, Obtenir/Définir des propriétés du service, Obtenir les statistiques du service, Lister les conteneurs/filles d’attente/tables/partages)
- Conteneur (c) : accès aux API au niveau du conteneur (par exemple, Créer/Supprimer un conteneur, Créer/Supprimer une fille d’attente, Créer/Supprimer une table, Créer/Supprimer un partage, Lister les objets blob/fichiers et répertoires)
- Objet (o) : accès aux API au niveau de l’objet pour les objets blob, les messages de file d’attente, les entités de table et les fichiers (par exemple, Placer un objet blob, Interroger une entité, Obtenir des messages, Créer un fichier, etc.)

Vous pouvez combiner des valeurs pour fournir l’accès à plusieurs types de ressources. Par exemple, srt=sc spécifie l’accès aux ressources de service et de conteneur.
SignedPermission (sp) Obligatoire. Spécifie les autorisations signées pour la signature SAP du compte. Les autorisations ne sont valides que si elles correspondent au type de ressource signé spécifié ; dans le cas contraire, elles sont ignorées.

- Lecture (r) : valide pour tous les types de ressources signées (Service, Conteneur et Objet). Permet des autorisations de lecture sur le type de ressource spécifié.
- Écriture (w) : valide pour tous les types de ressources signées (Service, Conteneur et Objet). Permet des autorisations d’écriture sur le type de ressource spécifié.
- Supprimer (d) : valide pour les types de ressources Conteneur et Objet, à l’exception des messages de file d’attente.
- Suppression définitive (y) : valide pour le type de ressource Objet suivant uniquement : Objet blob.
- Liste (l) : valide pour les types de ressources Service et Conteneur uniquement.
- Ajouter (a) : valide pour les types de ressources Objet suivants uniquement : messages de file d’attente, entités de table et objets blob d’ajout.
- Créer (c) : valide pour les types de ressources Objet suivants uniquement : objets blob et fichiers. Les utilisateurs peuvent créer des objets blob ou des fichiers, mais ne peuvent pas remplacer des objets blob ou des fichiers existants.
- Mettre à jour (u) : valide pour les types de ressources Objet suivants uniquement : messages de file d’attente et entités de table.
- Processus (p) : valide pour le type de ressource Objet suivant uniquement : messages de file d’attente.
- Étiquette (t) : valide pour le type de ressource Objet suivant uniquement : objets blob. Autorise les opérations d’étiquette d’objet blob.
- Filtre (f) : valide pour le type de ressource Objet suivant uniquement : objet blob. Autorise le filtrage par étiquette d’objet blob.
- Définir une stratégie d’immuabilité (i) : valide pour le type de ressource Objet suivant uniquement : objet blob. Autorise la définition/suppression d’une stratégie d’immuabilité et la conservation légale sur un objet blob.
SignedProtocol (spr) facultatif. Spécifie le protocoles autorisé pour une demande effectuée avec la signature SAP du compte. Les valeurs possibles sont à la fois HTTPS et HTTP (https,http) ou uniquement HTTPS (https). La valeur par défaut est https,http.

HTTP uniquement n’est pas une valeur autorisée.

Pour plus d’informations sur la signature SAP de compte, consultez Créer une signature SAP de compte

Notes

Key Vault ignore les paramètres de durée de vie tels que « Signed Expiry » (Expiration signée), « Signed Start » (Démarrage signé) et les paramètres introduits après la version 2018-03-28

Établir une définition de signature d’accès partagé dans Key Vault

Utilisez la cmdlet Azure PowerShell Set-AzKeyVaultManagedStorageSasDefinition pour créer une définition de signature d’accès partagé. Vous pouvez fournir le nom de votre choix au paramètre -Name.

Set-AzKeyVaultManagedStorageSasDefinition -AccountName $storageAccountName -VaultName $keyVaultName -Name <YourSASDefinitionName> -TemplateUri $sasTemplate -SasType 'account' -ValidityPeriod ([System.Timespan]::FromDays(1))

Vérifier la définition de la signature d’accès partagé

Vous pouvez vérifier que la définition de la signature d’accès partagé a été stockée dans votre coffre de clés à l’aide de la cmdlet Get-AzKeyVaultSecret Azure PowerShell.

Commencez par rechercher la définition de signature d’accès partagé dans votre coffre de clés.

Get-AzKeyVaultSecret -VaultName <YourKeyVaultName>

Le secret correspondant à votre définition SAS a les propriétés suivantes :

Vault Name   : <YourKeyVaultName>
Name         : <SecretName>
...
Content Type : application/vnd.ms-sastoken-storage
Tags         :

Vous pouvez maintenant utiliser l’applet de commande Get-AzKeyVaultSecret avec les paramètres VaultName et Name pour afficher le contenu de ce secret.

$secretValueText = Get-AzKeyVaultSecret -VaultName <YourKeyVaultName> -Name <SecretName> -AsPlainText
Write-Output $secretValueText

La sortie de cette commande affiche la chaîne de votre définition SAP.

Étapes suivantes