Gérer les clés de compte de stockage avec Key Vault et Azure PowerShellManage storage account keys with Key Vault and Azure PowerShell

Important

Nous vous recommandons d’utiliser l’intégration de Stockage Azure avec Azure Active Directory (Azure AD), le service Microsoft basé sur le cloud qui gère les identités et les accès.We recommend using Azure Storage integration with Azure Active Directory (Azure AD), Microsoft's cloud-based identity and access management service. L’intégration d’Azure AD 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).Azure AD integration is available for Azure blobs and queues, and provides OAuth2 token-based access to Azure Storage (just like Azure Key Vault). Azure AD 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.Azure AD allows you to authenticate your client application by using an application or user identity, instead of storage account credentials. Vous pouvez utiliser une identité Azure AD managée lors de l’exécution sur Azure.You can use an Azure AD managed identity when you run on Azure. Les identités managées suppriment l’authentification du client ainsi que le stockage des informations d’identification dans ou avec votre application.Managed identities remove the need for client authentication and storing credentials in or with your application. Utilisez la solution ci-dessous uniquement lorsque l’authentification Azure AD n’est pas possible.Use below solution only when Azure AD authentication is not possible.

Un compte de stockage Azure utilise des informations d’identification comprenant un nom de compte et une clé.An Azure storage account uses credentials comprising an account name and a key. La clé qui est générée automatiquement sert de mot de passe et non pas de clé de chiffrement.The key is autogenerated and serves as a password, rather than an as a cryptographic key. 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.Key Vault manages storage account keys by periodically regenerating them in storage account and provides shared access signature tokens for delegated access to resources in your storage account.

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.You can use the Key Vault managed storage account key feature to list (sync) keys with an Azure storage account, and regenerate (rotate) the keys periodically. Vous pouvez gérer les clés des comptes de stockage et des comptes de stockage classiques.You can manage keys for both storage accounts and Classic storage accounts.

Lorsque vous utilisez la fonctionnalité de clé de compte de stockage managé, tenez compte des points suivants :When you use the managed storage account key feature, consider the following points:

  • Les valeurs de clés ne sont jamais retournées en réponse à l’appelant.Key values are never returned in response to a caller.
  • Seul Key Vault doit gérer vos clés de compte de stockage.Only Key Vault should manage your storage account keys. Ne gérez pas les clés vous-même et évitez d’interférer avec les processus de Key Vault.Don't manage the keys yourself and avoid interfering with Key Vault processes.
  • Un seul objet Key Vault doit gérer les clés de compte de stockage.Only a single Key Vault object should manage storage account keys. Vous ne devez pas autoriser la gestion des clients par des objets multiples.Don't allow key management from multiple objects.
  • Régénérez les clés à l’aide de Key Vault uniquement.Regenerate keys by using Key Vault only. Ne régénérez pas manuellement vos clés de compte de stockage.Don't manually regenerate your storage account keys.

Notes

Cet article a été mis à jour pour tenir compte de l’utilisation du nouveau module Az d’Azure PowerShell.This article has been updated to use the new Azure PowerShell Az module. Vous pouvez toujours utiliser le module AzureRM, qui continue à recevoir des correctifs de bogues jusqu’à au moins décembre 2020.You can still use the AzureRM module, which will continue to receive bug fixes until at least December 2020. Pour en savoir plus sur le nouveau module Az et la compatibilité avec AzureRM, consultez Présentation du nouveau module Az d’Azure PowerShell.To learn more about the new Az module and AzureRM compatibility, see Introducing the new Azure PowerShell Az module. Pour des instructions d’installation du module Az, consultez Installer Azure PowerShell.For Az module installation instructions, see Install Azure PowerShell.

ID d’application du principal de serviceService principal application ID

Un locataire Azure AD fournit à chaque application inscrite un principal de service,An Azure AD tenant provides each registered application with a service principal. 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.The service principal serves as the application ID, which is used during authorization setup for access to other Azure resources via Azure RBAC.

Key Vault est une application Microsoft préinscrite dans tous les locataires Azure AD.Key Vault is a Microsoft application that's pre-registered in all Azure AD tenants. Key Vault est inscrit sous le même ID d’application dans chaque cloud Azure.Key Vault is registered under the same Application ID in each Azure cloud.

LocatairesTenants CloudCloud ID de l'applicationApplication ID
Azure ADAzure AD Azure GovernmentAzure Government 7e7c393b-45d0-48b1-a35e-2905ddf8183c
Azure ADAzure AD Azure publicAzure public cfa8b339-82a2-471a-a3c9-0fc0be7a4093
AutresOther QuelconqueAny cfa8b339-82a2-471a-a3c9-0fc0be7a4093

PrérequisPrerequisites

Pour suivre ce guide, vous devez d’abord effectuer ce qui suit :To complete this guide, you must first do the following:

Gérer les clés de compte de stockageManage storage account keys

Se connecter au compte AzureConnect to your Azure account

Authentifiez votre session PowerShell à l’aide de l’applet de commande Connect-AzAccount.Authenticate your PowerShell session using the Connect-AzAccount cmdlet.

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.If you have multiple Azure subscriptions, you can list them using the Get-AzSubscription cmdlet, and specify the subscription you wish to use with the Set-AzContext cmdlet.

Set-AzContext -SubscriptionId <subscriptionId>

Définition des variablesSet variables

Commencez par définir les variables utilisées par les cmdlets PowerShell dans les étapes suivantes.First, set the variables to be used by the PowerShell cmdlets in the following steps. 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 ci-dessus).Be sure to update the "YourResourceGroupName", "YourStorageAccountName", and "YourKeyVaultName" placeholders, and set $keyVaultSpAppId to cfa8b339-82a2-471a-a3c9-0fc0be7a4093 (as specified in Service principal application ID, above).

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.We will also use the Azure PowerShell Get-AzContext and Get-AzStorageAccount cmdlets to get your user ID and the context of your Azure storage account.

$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

Notes

Pour le compte de stockage classique, utilisez « primary » et « secondary » pour $storageAccountKeyFor Classic Storage Account use "primary" and "secondary" for $storageAccountKey
Utilisez 'Get-AzResource -Name "ClassicStorageAccountName" -ResourceGroupName $resourceGroupName' au lieu de 'Get-AzStorageAccount' pour le compte de stockage classiqueUse 'Get-AzResource -Name "ClassicStorageAccountName" -ResourceGroupName $resourceGroupName' instead of'Get-AzStorageAccount' for Classic Storage Account

Octroyer un accès Key Vault à votre compte de stockageGive Key Vault access to your storage account

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.Before Key Vault can access and manage your storage account keys, you must authorize its access your storage account. 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.The Key Vault application requires permissions to list and regenerate keys for your storage account. 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.These permissions are enabled through the Azure built-in role Storage Account Key Operator Service Role.

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 this role to the Key Vault service principal, limiting scope to your storage account, using the Azure PowerShell New-AzRoleAssignment cmdlet.

# 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 :Upon successful role assignment, you should see output similar to the following example:

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à » .If Key Vault has already been added to the role on your storage account, you'll receive a "The role assignment already exists." erreur.error. 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.You can also verify the role assignment, using the storage account "Access control (IAM)" page in the Azure portal.

Autoriser votre compte d’utilisateur à accéder à des comptes de stockage managésGive your user account permission to managed storage accounts

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.Use the Azure PowerShell Set-AzKeyVaultAccessPolicy cmdlet to update the Key Vault access policy and grant storage account permissions to your user account.

# 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

Notez que les autorisations pour les comptes de stockage ne sont pas disponibles sur la page « Stratégies d’accès » du compte de stockage dans le portail Azure.Note that permissions for storage accounts aren't available on the storage account "Access policies" page in the Azure portal.

Ajouter un compte de stockage managé à votre instance Key VaultAdd a managed storage account to your Key Vault instance

Utilisez la cmdlet Azure PowerShell Add-AzKeyVaultManagedStorageAccount pour créer un compte de stockage géré dans votre instance Key Vault.Use the Azure PowerShell Add-AzKeyVaultManagedStorageAccount cmdlet to create a managed storage account in your Key Vault instance. Le commutateur -DisableAutoRegenerateKey spécifie de ne PAS régénérer les clés de compte de stockage.The -DisableAutoRegenerateKey switch specifies NOT to regenerate the storage account keys.

# 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 :Upon successful addition of the storage account with no key regeneration, you should see output similar to the following example:

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ésEnable key regeneration

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.If you want Key Vault to regenerate your storage account keys periodically, you can use the Azure PowerShell Add-AzKeyVaultManagedStorageAccount cmdlet to set a regeneration period. Dans cet exemple, nous définissons une période de régénération de trois jours.In this example, we set a regeneration period of three days. Le moment venu d’opérer une rotation, Key Vault régénère la clé qui n’est pas active, puis définit la clé nouvellement créée comme active.When it is time to rotate, Key Vault regenerates the key that is not active, and then sets the newly created key as active. Une seule des clés est utilisée pour émettre des jetons SAS à tout moment.Only one of the keys are used to issue SAS tokens at any one time. Il s’agit du nœud actif.This is the active key.

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

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 :Upon successful addition of the storage account with key regeneration, you should see output similar to the following example:

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 : 3.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éShared access signature tokens

Vous pouvez également demander à Key Vault de générer des jetons de signature d’accès partagé.You can also ask Key Vault to generate shared access signature tokens. 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. Vous pouvez accorder aux clients l’accès aux ressources dans votre compte de stockage sans partager les clés de votre compte.You can grant clients access to resources in your storage account without sharing your account keys. Une signature d’accès partagé constitue un moyen sécurisé de partager vos ressources de stockage sans compromettre vos clés de compte.A shared access signature provides you with a secure way to share your storage resources without compromising your account keys.

Les commandes figurant dans cette section effectuent les actions suivantes :The commands in this section complete the following actions:

  • Définissez une définition de signature d’accès partagé.Set an account shared access signature definition.
  • Créez un jeton de signature d’accès partagé pour les services Blob, Fichier, Table et File d’attente.Create an account shared access signature token for Blob, File, Table, and Queue services. Le jeton est créé pour les types de ressource Service, Conteneur et Objet.The token is created for resource types Service, Container, and Object. Le jeton est créé avec toutes les autorisations, via le protocole https et avec les dates de début et de fin spécifiées.The token is created with all permissions, over https, and with the specified start and end dates.
  • Définissez une définition de signature d’accès partagé au stockage géré par Key Vault dans le coffre.Set a Key Vault managed storage shared access signature definition in the vault. La définition comporte l’URI du modèle du jeton de signature d’accès partagé créé.The definition has the template URI of the shared access signature token that was created. La définition possède le type de signature d’accès partagé account et est valide pendant N jours.The definition has the shared access signature type account and is valid for N days.
  • Vérifiez que la signature d’accès partagé a été enregistrée dans votre coffre de clés en tant que secret.Verify that the shared access signature was saved in your key vault as a secret.

Définition des variablesSet variables

Commencez par définir les variables utilisées par les cmdlets PowerShell dans les étapes suivantes.First, set the variables to be used by the PowerShell cmdlets in the following steps. Veillez à mettre à jour les espaces réservés et .Be sure to update the and placeholders.

Nous utiliserons également les cmdlets Azure PowerShell New-AzStorageContext pour obtenir le contexte de votre compte de stockage Azure.We will also use the Azure PowerShell New-AzStorageContext cmdlets to get the context of your Azure storage account.

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

$storageContext = New-AzStorageContext -StorageAccountName $storageAccountName -Protocol Https -StorageAccountKey Key1 #(or "Primary" for Classic Storage Account)

Créer un jeton de signature d’accès partagéCreate a shared access signature token

Créez une définition de signature d’accès partagé à l’aide des cmdlets Azure PowerShell New-AzStorageAccountSASToken.Create a shared access signature definition using the Azure PowerShell New-AzStorageAccountSASToken cmdlets.

$start = [System.DateTime]::Now.AddDays(-1)
$end = [System.DateTime]::Now.AddMonths(1)

$sasToken = New-AzStorageAccountSasToken -Service blob,file,Table,Queue -ResourceType Service,Container,Object -Permission "racwdlup" -Protocol HttpsOnly -StartTime $start -ExpiryTime $end -Context $storageContext

La valeur de $sasToken se présente comme suit.The value of $sasToken will look similar to this.

?sv=2018-11-09&sig=5GWqHFkEOtM7W9alOgoXSCOJO%2B55qJr4J7tHQjCId9S%3D&spr=https&st=2019-09-18T18%3A25%3A00Z&se=2019-10-19T18%3A25%3A00Z&srt=sco&ss=bfqt&sp=racupwdl

Générer une définition de signature d’accès partagéGenerate a shared access signature definition

Utilisez la cmdlet Azure PowerShell Set-AzKeyVaultManagedStorageSasDefinition pour créer une définition de signature d’accès partagé.Use the the Azure PowerShell Set-AzKeyVaultManagedStorageSasDefinition cmdlet to create a shared access signature definition. Vous pouvez fournir le nom de votre choix au paramètre -Name.You can provide the name of your choice to the -Name parameter.

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

Vérifier la définition de la signature d’accès partagéVerify the shared access signature definition

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.You can verify that the shared access signature definition has been stored in your key vault using the Azure PowerShell Get-AzKeyVaultSecret cmdlet.

Commencez par rechercher la définition de signature d’accès partagé dans votre coffre de clés.First, find the shared access signature definition in your key vault.

Get-AzKeyVaultSecret -VaultName <YourKeyVaultName>

Le secret correspondant à votre définition SAS a les propriétés suivantes :The secret corresponding to your SAS definition will have these properties:

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.You can now use the Get-AzKeyVaultSecret cmdlet with the VaultName and Name parameters to view the contents of that secret.

$secret = Get-AzKeyVaultSecret -VaultName <YourKeyVaultName> -Name <SecretName>
$ssPtr = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($secret.SecretValue)
try {
   $secretValueText = [System.Runtime.InteropServices.Marshal]::PtrToStringBSTR($ssPtr)
} finally {
   [System.Runtime.InteropServices.Marshal]::ZeroFreeBSTR($ssPtr)
}
Write-Output $secretValueText

La sortie de cette commande affiche la chaîne de votre définition SAP.The output of this command will show your SAS definition string.

Étapes suivantesNext steps