Hantera lagringskontonycklar med Key Vault och Azure PowerShell
Viktigt
Vi rekommenderar att Azure Storage integrering med Azure Active Directory (Azure AD), Microsofts molnbaserade tjänst för identitets- och åtkomsthantering. Azure AD-integrering är tillgängligt för Azure-blobaroch köer och ger OAuth2-tokenbaserad åtkomst till Azure Storage (precis som Azure Key Vault). Med Azure AD kan du autentisera klientprogrammet med hjälp av ett program eller en användaridentitet i stället för autentiseringsuppgifterna för lagringskontot. Du kan använda en azure AD-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 lösningen nedan när Azure AD-autentisering inte är möjligt.
Ett Azure Storage-konto använder autentiseringsuppgifter som består av ett kontonamn och en nyckel. Nyckeln är automatiskt genererad och fungerar som ett lösenord, i stället för en som en kryptografisk nyckel. Key Vault hanterar lagringskontonycklar genom att regelbundet återskapa dem i lagringskontot och tillhandahåller signaturtoken för delad åtkomst för delegerad åtkomst till resurser i ditt lagringskonto.
Du kan använda funktionen Key Vault för hanterade lagringskontonycklar 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 hanterat lagringskonto:
- Nyckelvärden returneras aldrig som svar på 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 ska hantera lagringskontonycklar. Tillåt inte nyckelhantering från flera objekt.
- Återskapa nycklar med hjälp Key Vault endast. Återskapa inte dina lagringskontonycklar manuellt.
Viktigt
Omgenerering av nyckeln direkt i lagringskontot bryter konfigurationen av det hanterade lagringskontot och kan ogiltigförklara SAS-token som används och orsaka ett avbrott.
Anteckning
I den här artikeln används Azure Az PowerShell-modulen, som är den rekommenderade PowerShell-modulen för att interagera med Azure. För att komma igång med Az PowerShell kan du läsa artikeln om att installera Azure PowerShell. 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 Azure AD-klientorganisation ger varje registrerat program ett huvudnamn för tjänsten. Tjänstens huvudnamn fungerar som program-ID som används vid auktoriseringskonfigurationen för åtkomst till andra Azure-resurser via Azure RBAC.
Key Vault är ett Microsoft-program som är förregistrerat i alla Azure AD-klienter. Key Vault registreras under samma program-ID i varje Azure-moln.
| Klientorganisationer | Moln | Program-ID:t |
|---|---|---|
| Azure AD | Azure Government | 7e7c393b-45d0-48b1-a35e-2905ddf8183c |
| Azure AD | Azure, offentlig | cfa8b339-82a2-471a-a3c9-0fc0be7a4093 |
| Annat | Valfri | 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:
- Installera Azure PowerShell modulen.
- Skapa ett nyckelvalv
- Skapa ett Azure Storage-konto. Lagringskontots namn får bara innehålla gemener och siffror. Namnet måste vara mellan 3 och 24 tecken långt.
Hantera lagringskontonycklar
Anslut till ditt Azure-konto
Autentisera PowerShell-sessionen med hjälp Anslut-AzAccount-cmdleten.
Connect-AzAccount
Om du har flera Azure-prenumerationer kan du visa dem med hjälp av 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 de variabler 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 (enligt vad som anges i program-ID för tjänstens huvudnamn cfa8b339-82a2-471a-a3c9-0fc0be7a4093 , ovan).
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 Storage-konto.
$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
Anteckning
För klassiskt Storage konto 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 klassiskt Storage konto
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. Programmet Key Vault kräver behörighet att lista och återskapa nycklar för ditt lagringskonto. Dessa behörigheter aktiveras via den inbyggda Azure-rollen Storage för kontonyckeloperatortjänstrollen.
Tilldela den här rollen Key Vault tjänstens huvudnamn, vilket begränsar omfånget till ditt lagringskonto med hjälp Azure PowerShell cmdleten 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
När rolltilldelningen har lyckats 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 ett meddelande om att rolltilldelningen redan finns. error. Du kan också verifiera rolltilldelningen med hjälp av lagringskontots sida "Åtkomstkontroll (IAM)" i Azure Portal.
Ge ditt användarkonto behörighet till hanterade lagringskonton
Använd cmdleten Azure PowerShell Set-AzKeyVaultAccessPolicy för att uppdatera Key Vault-åtkomstprincipen och bevilja lagringskontobehörigheter 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
Observera att behörigheter för lagringskonton inte är tillgängliga på sidan Åtkomstprinciper för lagringskontot i Azure Portal.
Lägga till ett hanterat lagringskonto till din Key Vault instans
Använd cmdlet Azure PowerShell en Add-AzKeyVaultManagedStorageAccount för att skapa ett hanterat lagringskonto i din Key Vault instans. Växeln -DisableAutoRegenerateKey anger INTE att lagringskontonycklarna ska återskapas.
# 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 tillägg utan nyckelgenerering 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 återskapande av nycklar
Om du vill Key Vault att återskapa lagringskontonycklarna med jämna mellanrum kan du använda cmdleten Azure PowerShell Add-AzKeyVaultManagedStorageAccount för att ange en återskapandeperiod. I det här exemplet anger vi en återskapandeperiod på tre dagar. När det är dags att rotera Key Vault den nyckel som inte är aktiv och anger sedan den nya nyckeln som aktiv. Endast en av nycklarna används för att utfärda SAS-token åt gången. Det här är den aktiva nyckeln.
$regenPeriod = [System.Timespan]::FromDays(3)
Add-AzKeyVaultManagedStorageAccount -VaultName $keyVaultName -AccountName $storageAccountName -AccountResourceId $storageAccount.Id -ActiveKeyName $storageAccountKey -RegenerationPeriod $regenPeriod
När lagringskontot har tilläggts med nyckelgenerering 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 : 3.00:00:00
Enabled : True
Created : 11/19/2018 11:54:47 PM
Updated : 11/19/2018 11:54:47 PM
Tags :
Token för signatur 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 kompromissa med dina kontonycklar.
Kommandona i det här avsnittet utför följande åtgärder:
- Ange en signaturdefinition för delad åtkomst för ett konto.
- Skapa en signaturtoken för delad åtkomst för blob-, fil-, tabell- och kötjänster. Token skapas för resurstyper, tjänst, container och objekt. Token skapas med alla behörigheter, över https, och med de angivna start- och slutdatumen.
- Ange en Key Vault signaturdefinition för delad åtkomst för hanterad lagring i valvet. Definitionen har mall-URI för den signaturtoken för delad åtkomst som skapades. Definitionen har signaturtypen för delad åtkomst
accountoch är giltig i N dagar. - Kontrollera att signaturen för delad åtkomst har sparats i nyckelvalvet som en hemlighet.
Ange variabler
Ange först de variabler som ska användas av PowerShell-cmdletarna i följande steg. Se till att uppdatera <YourStorageAccountName> <YourKeyVaultName> platshållarna och .
Vi använder även cmdletarna Azure PowerShell New-AzStorageContext för att hämta kontexten för ditt Azure Storage-konto.
$storageAccountName = <YourStorageAccountName>
$keyVaultName = <YourKeyVaultName>
$storageContext = New-AzStorageContext -StorageAccountName $storageAccountName -Protocol Https -StorageAccountKey Key1 #(or "Primary" for Classic Storage Account)
Skapa en signaturtoken för delad åtkomst
Skapa en signaturdefinition för delad åtkomst med hjälp Azure PowerShell cmdletarna New-AzStorageAccountSASToken.
$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
Värdet för $sasToken ser ut ungefär så här.
?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
Generera en definition för signatur för delad åtkomst
Använd cmdleten Azure PowerShell Set-AzKeyVaultManagedStorageSasDefinition för att skapa en signaturdefinition för delad åtkomst. Du kan ange det namn du väljer för -Name parametern .
Set-AzKeyVaultManagedStorageSasDefinition -AccountName $storageAccountName -VaultName $keyVaultName -Name <YourSASDefinitionName> -TemplateUri $sasToken -SasType 'account' -ValidityPeriod ([System.Timespan]::FromDays(30))
Verifiera definitionen för signatur för delad åtkomst
Du kan kontrollera att signaturen för delad åtkomst har lagrats i ditt nyckelvalv med hjälp av Azure PowerShell cmdleten Get-AzKeyVaultSecret.
Leta först reda på definitionen för signatur 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 och VaultName för att visa innehållet i Name hemligheten.
$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
Utdata från det här kommandot visar SAS-definitionssträngen.