Hantera lagringskontonycklar med Key Vault och Azure PowerShell (äldre)

Viktigt!

Nyckelvalvshanterade lagringskontonycklar (äldre) stöds i befintligt format utan att fler uppdateringar planeras. Endast konto-SAS stöds med SAS-definitioner signerad lagringstjänstversion senast 2018-03-28.

Viktigt!

Vi rekommenderar att du använder Azure Storage-integrering med Microsoft Entra ID, Microsofts molnbaserade tjänst för identitets- och åtkomsthantering. Microsoft Entra-integrering är tillgängligt för Azure-blobar och köer och ger OAuth2 tokenbaserad åtkomst till Azure Storage (precis som Azure Key Vault). Med Microsoft Entra-ID kan du autentisera klientprogrammet med hjälp av ett program eller en användaridentitet, i stället för autentiseringsuppgifter för lagringskontot. Du kan använda en Microsoft Entra-hanterad identitet när du kör på Azure. Hanterade identiteter tar bort behovet av klientautentisering och lagring av autentiseringsuppgifter i eller med ditt program. Använd endast den här lösningen när Microsoft Entra-autentisering inte är möjlig.

Ett Azure Storage-konto använder autentiseringsuppgifter som består av ett kontonamn och en nyckel. Nyckeln genereras automatiskt och fungerar som ett lösenord i stället för en kryptografisk nyckel. Key Vault hanterar lagringskontonycklar genom att regelbundet återskapa dem i lagringskontot och ger signaturtoken för delad åtkomst för delegerad åtkomst till resurser i ditt lagringskonto.

Du kan använda key vault-funktionen för hanterade lagringskonton för att lista (synkronisera) nycklar med ett Azure-lagringskonto och återskapa (rotera) nycklarna med jämna mellanrum. Du kan hantera nycklar för både lagringskonton och klassiska lagringskonton.

Tänk på följande när du använder nyckelfunktionen för det hanterade lagringskontot:

  • Nyckelvärden returneras aldrig som svar till en anropare.
  • Endast Key Vault ska hantera dina lagringskontonycklar. Hantera inte nycklarna själv och undvik att störa Key Vault-processer.
  • Endast ett enda Key Vault-objekt ska hantera lagringskontonycklar. Tillåt inte nyckelhantering från flera objekt.
  • Återskapa nycklar med endast Key Vault. Återskapa inte lagringskontonycklarna manuellt.

Viktigt!

Om du återskapar nyckeln direkt i lagringskontot bryts konfigurationen av det hanterade lagringskontot och kan ogiltigförklara SAS-token som används och orsaka ett avbrott.

Kommentar

Vi rekommenderar att du använder Azure Az PowerShell-modulen för att interagera med Azure. Se Installera Azure PowerShell för att komma igång. Information om hur du migrerar till Az PowerShell-modulen finns i artikeln om att migrera Azure PowerShell från AzureRM till Az.

Program-ID för tjänstens huvudnamn

En Microsoft Entra-klientorganisation tillhandahåller varje registrerat program med tjänstens huvudnamn. Tjänstens huvudnamn fungerar som program-ID, som används under auktoriseringskonfigurationen för åtkomst till andra Azure-resurser via Azure RBAC.

Key Vault är ett Microsoft-program som är förregistrerat i alla Microsoft Entra-klienter. Key Vault registreras under samma program-ID i varje Azure-moln.

Klientorganisationer Moln Program-ID:t
Microsoft Entra ID Azure Government 7e7c393b-45d0-48b1-a35e-2905ddf8183c
Microsoft Entra ID Azure, offentlig cfa8b339-82a2-471a-a3c9-0fc0be7a4093
Övrigt Alla cfa8b339-82a2-471a-a3c9-0fc0be7a4093

Förutsättningar

För att slutföra den här guiden måste du först göra följande:

Hantera lagringskontonycklar

Anslut till ditt Azure-konto

Autentisera PowerShell-sessionen med cmdleten Anslut-AzAccount.

Connect-AzAccount

Om du har flera Azure-prenumerationer kan du lista dem med cmdleten Get-AzSubscription och ange den prenumeration som du vill använda med cmdleten Set-AzContext .

Set-AzContext -SubscriptionId <subscriptionId>

Ange variabler

Ange först variablerna som ska användas av PowerShell-cmdletarna i följande steg. Se till att uppdatera platshållarna "YourResourceGroupName", "YourStorageAccountName" och "YourKeyVaultName" och ange $keyVaultSpAppId till cfa8b339-82a2-471a-a3c9-0fc0be7a4093 (enligt beskrivningen i program-ID för tjänstens huvudnamn).

Vi använder även cmdletarna Azure PowerShell Get-AzContext och Get-AzStorageAccount för att hämta ditt användar-ID och kontexten för ditt Azure-lagringskonto.

$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

Kommentar

För klassiskt lagringskonto använder du "primärt" och "sekundärt" för $storageAccountKey
Använd "Get-AzResource -Name "ClassicStorageAccountName" -ResourceGroupName $resourceGroupName i stället för "Get-AzStorageAccount" för det klassiska lagringskontot

Ge Key Vault åtkomst till ditt lagringskonto

Innan Key Vault kan komma åt och hantera dina lagringskontonycklar måste du auktorisera dess åtkomst till ditt lagringskonto. Key Vault-programmet kräver behörighet att lista och återskapa nycklar för ditt lagringskonto. De här behörigheterna aktiveras via den inbyggda rollen Azure Storage Account Key Operator Service Role.These permissions are enabled through the Azure built-in role Storage Account Key Operator Service Role.

Tilldela den här rollen till Key Vault-tjänstens huvudnamn, vilket begränsar omfånget till ditt lagringskonto med hjälp av cmdleten Azure PowerShell New-AzRoleAssignment .

# 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

Vid lyckad rolltilldelning bör du se utdata som liknar följande exempel:

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

Om Key Vault redan har lagts till i rollen på ditt lagringskonto får du en "Rolltilldelningen finns redan". Fel. Du kan också verifiera rolltilldelningen med hjälp av sidan Åtkomstkontroll (IAM) för lagringskontot i Azure-portalen.

Ge ditt användarkonto behörighet till hanterade lagringskonton

Använd cmdleten Azure PowerShell Set-AzKeyVaultAccessPolicy för att uppdatera åtkomstprincipen för Key Vault och bevilja lagringskontobehörighet till ditt användarkonto.

# 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

Behörigheterna för lagringskonton är inte tillgängliga på sidan Åtkomstprinciper för lagringskontot i Azure-portalen.

Lägga till ett hanterat lagringskonto i din Key Vault-instans

Använd cmdleten Azure PowerShell Add-AzKeyVaultManagedStorageAccount för att skapa ett hanterat lagringskonto i din Key Vault-instans. Växeln -DisableAutoRegenerateKey anger INTE för att återskapa lagringskontonycklarna.

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

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

När lagringskontot har slutförts utan nyckelregenerering bör du se utdata som liknar följande exempel:

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                :

Aktivera nyckelförnyelse

Om du vill att Key Vault ska återskapa dina lagringskontonycklar regelbundet kan du använda cmdleten Azure PowerShell Add-AzKeyVaultManagedStorageAccount för att ange en regenereringsperiod. I det här exemplet anger vi en regenereringsperiod på 30 dagar. När det är dags att rotera återskapar Key Vault den inaktiva nyckeln och anger sedan den nyligen skapade nyckeln som aktiv. Nyckeln som används för att utfärda SAS-token är den aktiva nyckeln.

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

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

När lagringskontot har utökats med nyckelregenerering bör du se utdata som liknar följande exempel:

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                :

Signaturtoken för delad åtkomst

Du kan också be Key Vault att generera signaturtoken för delad åtkomst. En signatur för delad åtkomst ger delegerad åtkomst till resurser i ditt lagringskonto. Du kan ge klienter åtkomst till resurser i ditt lagringskonto utan att dela dina kontonycklar. En signatur för delad åtkomst ger dig ett säkert sätt att dela dina lagringsresurser utan att äventyra dina kontonycklar.

Kommandona i det här avsnittet slutför följande åtgärder:

  • Ange en definition för signatur för delad åtkomst för ett konto.
  • Ange en key vault-hanterad definition för signatur för delad åtkomst i valvet. Definitionen har mall-URI:n för signaturtoken för delad åtkomst som skapades. Definitionen har signaturtypen account för delad åtkomst och är giltig i N dagar.
  • Kontrollera att signaturen för delad åtkomst sparades i nyckelvalvet som en hemlighet.

Ange variabler

Ange först variablerna som ska användas av PowerShell-cmdletarna i följande steg. Se till att uppdatera <platshållarna YourStorageAccountName> och <YourKeyVaultName> .

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

Definiera en definitionsmall för signatur för delad åtkomst

Key Vault använder SAS-definitionsmall för att generera token för klientprogram.

Exempel på SAS-definitionsmall:

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

Konto-SAS-parametrar som krävs i SAS-definitionsmallen för Key Vault

SAS-frågeparameter Description
SignedVersion (sv) Obligatoriskt. Anger den signerade lagringstjänstversion som ska användas för att auktorisera begäranden som görs med det här kontots SAS. Måste anges till version 2015-04-05 eller senare. Key Vault stöder versioner senast 2018-03-28
SignedServices (ss) Obligatoriska. Anger de signerade tjänster som är tillgängliga med kontots SAS. Möjliga värden omfattar:

– Blob (b)
– Kö (q)
- Tabell (t)
- Fil (f)

Du kan kombinera värden för att ge åtkomst till mer än en tjänst. Till exempel ss=bf anger åtkomst till blob- och filslutpunkterna.
SignedResourceTypes (srt) Obligatoriska. Anger de signerade resurstyper som är tillgängliga med kontots SAS.

– Tjänst (s): Åtkomst till API:er på tjänstnivå (till exempel Get/Set Service Properties, Get Service Stats, List Containers/Queues/Tables/Shares)
– Container (c): Åtkomst till API:er på containernivå (till exempel Skapa/ta bort container, Skapa/ta bort kö, Skapa/ta bort tabell, Skapa/ta bort resurs, Listblobar/Filer och kataloger)
- Objekt (o): Åtkomst till API:er på objektnivå för blobar, kömeddelanden, tabellentiteter och filer (till exempel Put Blob, Query Entity, Get Messages, Create File osv.)

Du kan kombinera värden för att ge åtkomst till mer än en resurstyp. Till exempel srt=sc anger åtkomst till tjänst- och containerresurser.
SignedPermission (sp) Obligatoriska. Anger de signerade behörigheterna för kontots SAS. Behörigheter är endast giltiga om de matchar den angivna signerade resurstypen. annars ignoreras de.

– Läs (r): Giltig för alla signerade resurstyper (tjänst, container och objekt). Tillåter läsbehörighet till den angivna resurstypen.
– Skriv (w): Giltigt för alla signerade resurstyper (tjänst, container och objekt). Tillåter skrivbehörighet till den angivna resurstypen.
– Ta bort (d): Giltigt för resurstyper för container och objekt, förutom kömeddelanden.
– Permanent borttagning (y): Gäller endast för objektresurstypen Blob.
– Lista (l): Gäller endast för tjänst- och containerresurstyper.
– Lägg till (a): Gäller endast för följande objektresurstyper: kömeddelanden, tabellentiteter och tilläggsblobar.
– Skapa (c): Gäller endast för följande objektresurstyper: blobar och filer. Användare kan skapa nya blobar eller filer, men kanske inte skriver över befintliga blobar eller filer.
– Uppdatera (u): Gäller endast för följande objektresurstyper: kömeddelanden och tabellentiteter.
– Process (p): Gäller endast för följande objektresurstyp: kömeddelanden.
– Tagg (t): Gäller endast för följande objektresurstyp: blobar. Tillåter åtgärder för blobtaggen.
– Filter (f): Gäller endast för följande objektresurstyp: blob. Tillåter filtrering efter blobtagg.
– Ange oföränderlighetsprincip (i): Gäller endast för följande objektresurstyp: blob. Tillåter princip för att ange/ta bort oföränderlighet och bevarande av juridiska skäl för en blob.
SignedProtocol (spr) Valfritt. Anger det protokoll som tillåts för en begäran som görs med kontots SAS. Möjliga värden är både HTTPS och HTTP (https,http) eller endast HTTPS (https). Standardvärdet är https,http.

ENDAST HTTP är inte ett tillåtet värde.

Mer information om konto-SAS finns i: Skapa ett KONTO SAS

Kommentar

Key Vault ignorerar livslängdsparametrar som "Signerad utgång", "Signerad start" och parametrar som introducerades efter 2018-03-28-versionen

Ange signaturdefinition för delad åtkomst i Key Vault

Använd cmdleten Azure PowerShell Set-AzKeyVaultManagedStorageSasDefinition för att skapa en definition för signatur för delad åtkomst. Du kan ange det namn som du väljer för parametern -Name .

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

Verifiera signaturdefinitionen för delad åtkomst

Du kan kontrollera att signaturdefinitionen för delad åtkomst har lagrats i nyckelvalvet med hjälp av cmdleten Azure PowerShell Get-AzKeyVaultSecret .

Leta först upp signaturdefinitionen för delad åtkomst i nyckelvalvet.

Get-AzKeyVaultSecret -VaultName <YourKeyVaultName>

Hemligheten som motsvarar din SAS-definition har följande egenskaper:

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

Nu kan du använda cmdleten Get-AzKeyVaultSecret med parametrarna VaultName och Name för att visa innehållet i hemligheten.

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

Utdata från det här kommandot visar SAS-definitionssträngen.

Nästa steg