Sleutels voor opslagaccounts beheren met Key Vault en Azure PowerShellManage storage account keys with Key Vault and Azure PowerShell

Belangrijk

We adviseren om Azure Storage-integratie te gebruiken met Azure Active Directory (Azure AD), de identiteits- en toegangsbeheerservice van Microsoft op basis van de cloud.We recommend using Azure Storage integration with Azure Active Directory (Azure AD), Microsoft's cloud-based identity and access management service. Azure AD-integratie is beschikbaar voor Azure-blobs en -wachtrijen en biedt toegang tot Azure Storage op basis van OAuth2-tokens (net als 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). Met Azure AD kunt u uw clienttoepassing verifiëren met behulp van een toepassings- of gebruikers-id in plaats van de referenties van het opslagaccount.Azure AD allows you to authenticate your client application by using an application or user identity, instead of storage account credentials. U kunt een beheerde identiteit van Azure AD gebruiken wanneer u met Azure werkt.You can use an Azure AD managed identity when you run on Azure. Door beheerde identiteiten te gebruiken, zijn clientverificatie en opslag van referenties in of met uw toepassing niet meer nodig.Managed identities remove the need for client authentication and storing credentials in or with your application. Gebruik de onderstaande oplossing alleen wanneer Azure AD-verificatie niet mogelijk is.Use below solution only when Azure AD authentication is not possible.

Een Azure-opslagaccount gebruikt referenties die bestaan uit een accountnaam en een sleutel.An Azure storage account uses credentials comprising an account name and a key. De sleutel wordt automatisch gegenereerd en fungeert als wachtwoord in plaats van als een cryptografische sleutel.The key is autogenerated and serves as a password, rather than an as a cryptographic key. Key Vault beheert de sleutels voor opslagaccounts door ze periodiek opnieuw te genereren in het opslagaccount en biedt SAS-tokens (Shared Access Signature) voor gedelegeerde toegang tot resources in uw opslagaccount.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.

U kunt de functie voor sleutels van beheerde opslagaccounts van Key Vault gebruiken om de sleutels voor een Azure-opslagaccount op te vragen (synchroniseren) en om de sleutels periodiek opnieuw te genereren (roteren).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. U kunt sleutels beheren voor zowel opslagaccounts als klassieke opslagaccounts.You can manage keys for both storage accounts and Classic storage accounts.

Houd rekening met het volgende wanneer u de functie voor sleutels van beheerde opslagaccounts gebruikt:When you use the managed storage account key feature, consider the following points:

  • Sleutelwaarden worden nooit geretourneerd als antwoord op een aanroep.Key values are never returned in response to a caller.
  • De sleutels van uw opslagaccount mogen alleen door Key Vault worden beheerd.Only Key Vault should manage your storage account keys. Beheer de sleutels niet zelf en voorkom conflicten met Key Vault-processen.Don't manage the keys yourself and avoid interfering with Key Vault processes.
  • De sleutels van een opslagaccount mogen alleen door één Key Vault-object worden beheerd.Only a single Key Vault object should manage storage account keys. Sta geen sleutelbeheer door meerdere objecten toe.Don't allow key management from multiple objects.
  • Genereer sleutels alleen opnieuw met behulp van Key Vault.Regenerate keys by using Key Vault only. Genereer de sleutels voor uw opslagaccount niet handmatig opnieuw.Don't manually regenerate your storage account keys.

Notitie

Dit artikel is bijgewerkt om gebruik te maken van de Azure Az PowerShell-module.This article has been updated to use the Azure Az PowerShell module. De Az PowerShell-module is de aanbevolen PowerShell-module voor interactie met Azure.The Az PowerShell module is the recommended PowerShell module for interacting with Azure. Raadpleeg Azure PowerShell installeren om aan de slag te gaan met de Az PowerShell-module.To get started with the Az PowerShell module, see Install Azure PowerShell. Raadpleeg Azure PowerShell migreren van AzureRM naar Az om te leren hoe u naar de Azure PowerShell-module migreert.To learn how to migrate to the Az PowerShell module, see Migrate Azure PowerShell from AzureRM to Az.

Toepassings-id in de vorm van een service-principalService principal application ID

Een Azure AD-tenant voorziet elke geregistreerde toepassing van een service-principal.An Azure AD tenant provides each registered application with a service principal. De service-principal fungeert als de toepassings-id, die wordt gebruikt tijdens het instellen van de autorisatie voor toegang tot andere Azure-resources via Azure RBAC.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 is een Microsoft-toepassing die vooraf wordt geregistreerd in alle Azure AD-tenants.Key Vault is a Microsoft application that's pre-registered in all Azure AD tenants. Key Vault wordt in elke Azure-cloud geregistreerd onder dezelfde toepassings-id.Key Vault is registered under the same Application ID in each Azure cloud.

TenantsTenants CloudCloud Toepassings-idApplication ID
Azure ADAzure AD Azure GovernmentAzure Government 7e7c393b-45d0-48b1-a35e-2905ddf8183c
Azure ADAzure AD Openbare Azure-peeringAzure public cfa8b339-82a2-471a-a3c9-0fc0be7a4093
AndersOther AlleAny cfa8b339-82a2-471a-a3c9-0fc0be7a4093

VereistenPrerequisites

U moet eerst het volgende doen om deze handleiding te voltooien:To complete this guide, you must first do the following:

Sleutels voor opslagaccounts beherenManage storage account keys

Verbinding maken met uw Azure-accountConnect to your Azure account

Verifieer uw PowerShell-sessie met de cmdlet Connect-AzAccount.Authenticate your PowerShell session using the Connect-AzAccount cmdlet.

Connect-AzAccount

Als u meerdere Azure-abonnementen hebt, kunt u deze weergeven met behulp van de cmdlet Get-AzSubscription en vervolgens het gewenste abonnement opgeven met de cmdlet 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>

Variabelen instellenSet variables

Stel eerst de variabelen in die door de PowerShell-cmdlets moeten worden gebruikt in de volgende stappen.First, set the variables to be used by the PowerShell cmdlets in the following steps. Zorg ervoor dat u de tijdelijke aanduidingen "YourResourceGroupName", "YourStorageAccountName" en "YourKeyVaultName" bijwerkt en $keyVaultSpAppId instelt op cfa8b339-82a2-471a-a3c9-0fc0be7a4093 (zoals hierboven is aangegeven in Toepassings-id in de vorm van een service-principal).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).

We gebruiken ook de Azure PowerShell-cmdlets Get-AzContext en Get-AzStorageAccount om uw gebruikers-id en de context van uw Azure opslagaccount op te halen.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

Notitie

Gebruik voor een klassiek opslagaccount 'primary' en 'secondary' voor $storageAccountKey.For Classic Storage Account use "primary" and "secondary" for $storageAccountKey
Gebruik 'Get-AzResource -Name "ClassicStorageAccountName" -ResourceGroupName $resourceGroupName' in plaats van 'Get-AzStorageAccount' voor een klassiek opslagaccount.Use 'Get-AzResource -Name "ClassicStorageAccountName" -ResourceGroupName $resourceGroupName' instead of'Get-AzStorageAccount' for Classic Storage Account

Key Vault toegang geven tot uw opslagaccountGive Key Vault access to your storage account

Voordat Key Vault toegang kan krijgen tot de sleutels voor uw opslagaccount en deze kan beheren, moet u de toegang tot uw opslagaccount autoriseren.Before Key Vault can access and manage your storage account keys, you must authorize its access your storage account. De Key Vault-toepassing vereist machtigingen voor het opvragen en opnieuw genereren van sleutels voor uw opslagaccount.The Key Vault application requires permissions to list and regenerate keys for your storage account. Deze machtigingen worden ingeschakeld via de ingebouwde Azure-rol De servicerol Sleuteloperator voor opslagaccounts.These permissions are enabled through the Azure built-in role Storage Account Key Operator Service Role.

Wijs deze rol toe aan de service-principal van Key Vault Service om het bereik te beperken tot uw opslagaccount. Gebruik hiervoor de Azure PowerShell-cmdlet New-AzRoleAssignment.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

Als de rol is toegewezen, ziet u uitvoer die lijkt op het volgende voorbeeld: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

Als Key Vault al is toegevoegd aan de rol van uw opslagaccount, ziet u tekst dat de roltoewijzing al bestaat.If Key Vault has already been added to the role on your storage account, you'll receive a "The role assignment already exists." fout.error. U kunt de roltoewijzing ook controleren met behulp van de pagina Toegangsbeheer (IAM) van het opslagaccount in Azure Portal.You can also verify the role assignment, using the storage account "Access control (IAM)" page in the Azure portal.

Uw gebruikersaccount machtigingen geven voor beheerde opslagaccountsGive your user account permission to managed storage accounts

Gebruik de Azure PowerShell-cmdlet Set-AzKeyVaultAccessPolicy om het toegangsbeleid van Key Vault bij te werken en machtigingen voor het opslagaccount te verlenen aan uw gebruikersaccount.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

Houd er rekening mee dat machtigingen voor opslagaccounts niet beschikbaar zijn op de pagina Toegangsbeleid van het opslagaccount in Azure Portal.Note that permissions for storage accounts aren't available on the storage account "Access policies" page in the Azure portal.

Een beheerd opslagaccount toevoegen aan uw Key Vault-instantieAdd a managed storage account to your Key Vault instance

Gebruik de Azure PowerShell-cmdlet Add-AzKeyVaultManagedStorageAccount om een beheerd opslagaccount te maken in uw instantie van Key Vault.Use the Azure PowerShell Add-AzKeyVaultManagedStorageAccount cmdlet to create a managed storage account in your Key Vault instance. De schakeloptie -DisableAutoRegenerateKey geeft aan dat de sleutels voor het opslagaccount NIET opnieuw moeten worden gegenereerd.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

Wanneer het opslagaccount is toegevoegd zonder opnieuw een sleutel te genereren, ziet u uitvoer die lijkt op het volgende voorbeeld: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                :

Opnieuw genereren van sleutel inschakelenEnable key regeneration

Als u wilt dat Key Vault de sleutels voor uw opslagaccount periodiek opnieuw genereert, kunt u de Azure PowerShell-cmdlet Add-AzKeyVaultManagedStorageAccount gebruiken om hiervoor een periode in te stellen.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. In dit voorbeeld willen we dat er elke drie dagen een nieuwe sleutel wordt gegenereerd.In this example, we set a regeneration period of three days. Wanneer het tijd is om te roteren, genereert Key Vault de sleutel die niet actief is opnieuw. Vervolgens wordt de zojuist gemaakte sleutel als actief ingesteld.When it is time to rotate, Key Vault regenerates the key that is not active, and then sets the newly created key as active. Er wordt altijd slechts een van de sleutels gebruikt voor het uitgeven van SAS-tokens.Only one of the keys are used to issue SAS tokens at any one time. Dat is de actieve sleutel.This is the active key.

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

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

Wanneer het opslagaccount is toegevoegd en er een nieuwe sleutel is gegenereerd, ziet u uitvoer die lijkt op het volgende voorbeeld: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                :

SAS-tokensShared access signature tokens

U kunt Key Vault ook instellen om zogenaamde SAS-tokens (Shared Access Signature, handtekening voor gedeelde toegang) te genereren.You can also ask Key Vault to generate shared access signature tokens. Een SAS (een handtekening voor gedeelde toegang) biedt gedelegeerde toegang tot resources in uw opslagaccount.A shared access signature provides delegated access to resources in your storage account. Met behulp van een SAS kunt u toegang geven tot resources in uw opslagaccount zonder dat u de sleutels van uw account hoeft te delen.You can grant clients access to resources in your storage account without sharing your account keys. Een SAS biedt een veilige manier om opslagresources te delen zonder dat uw accountsleutels in gevaar komen.A shared access signature provides you with a secure way to share your storage resources without compromising your account keys.

Met de opdrachten in deze sectie voert u de volgende acties uit:The commands in this section complete the following actions:

  • Definitie opgeven voor SAS van account.Set an account shared access signature definition.
  • Een SAS-token maken voor de Blob-, File-, Table- en Queue-services.Create an account shared access signature token for Blob, File, Table, and Queue services. Het token wordt gemaakt voor de resourcetypen Service, Container en Object.The token is created for resource types Service, Container, and Object. Het token wordt gemaakt met alle machtigingen, via https, en met de opgegeven begin- en einddatum.The token is created with all permissions, over https, and with the specified start and end dates.
  • Geef een definitie op voor de SAS van door Key Vault beheerde opslag in de kluis.Set a Key Vault managed storage shared access signature definition in the vault. De definitie bevat de sjabloon-URI van het SAS-token dat is gemaakt.The definition has the template URI of the shared access signature token that was created. De definitie heeft het SAS-type account en is N dagen geldig.The definition has the shared access signature type account and is valid for N days.
  • Controleer of de SAS als een geheim is opgeslagen in de sleutelkluis.Verify that the shared access signature was saved in your key vault as a secret.

Variabelen instellenSet variables

Stel eerst de variabelen in die door de PowerShell-cmdlets moeten worden gebruikt in de volgende stappen.First, set the variables to be used by the PowerShell cmdlets in the following steps. Zorg ervoor dat u de tijdelijke aanduidingen en bijwerkt.Be sure to update the and placeholders.

We gebruiken ook de Azure PowerShell-cmdlet New-AzStorageContext om de context van uw Azure opslagaccount op te halen.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)

Een SAS-token makenCreate a shared access signature token

Maak een definitie van een SAS met behulp van de Azure PowerShell-cmdlet 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

De waarde van $sasToken ziet er ongeveer als volgt uit.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

Een SAS-definitie genererenGenerate a shared access signature definition

Gebruik de Azure PowerShell-cmdlet Set-AzKeyVaultManagedStorageSasDefinition om een definitie van een SAS te maken.Use the the Azure PowerShell Set-AzKeyVaultManagedStorageSasDefinition cmdlet to create a shared access signature definition. U kunt elke gewenste naam doorgeven aan de parameter -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))

De SAS-definitie verifiërenVerify the shared access signature definition

Gebruik de Azure PowerShell-cmdlet Get-AzKeyVaultSecret om te controleren of de definitie van de SAS is opgeslagen in uw sleutelkluis.You can verify that the shared access signature definition has been stored in your key vault using the Azure PowerShell Get-AzKeyVaultSecret cmdlet.

Zoek eerst de definitie van de SAS in uw sleutelkluis.First, find the shared access signature definition in your key vault.

Get-AzKeyVaultSecret -VaultName <YourKeyVaultName>

Het geheim dat overeenkomt met uw SAS-definitie heeft de volgende eigenschappen:The secret corresponding to your SAS definition will have these properties:

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

U kunt nu de cmdlet Get-AzKeyVaultSecret gebruiken met de parameters VaultName en Name om de inhoud van dat geheim te bekijken.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

De uitvoer van deze opdracht bevat de tekenreeks van de SAS-definitie.The output of this command will show your SAS definition string.

Volgende stappenNext steps