Správa klíčů účtu úložiště pomocí Key Vault a Azure PowerShell
Důležité
Doporučujeme používat Azure Storage s Azure Active Directory (Azure AD), cloudovou službou microsoftu pro správu identit a přístupu. Integrace Azure AD je dostupná pro objekty blob afronty Azure a poskytuje přístup k Azure Storage na základě tokenů OAuth2 (stejně jako Azure Key Vault). Azure AD umožňuje ověřovat klientskou aplikaci pomocí identity aplikace nebo uživatele místo přihlašovacích údajů k účtu úložiště. Spravovanou identitu Azure AD můžete použít při spuštění v Azure. Spravované identity odstraňte potřebu ověřování klientů a ukládání přihlašovacích údajů do aplikace nebo s vaší aplikací. Níže uvedené řešení použijte pouze v případě, že není možné ověřování Azure AD.
Účet úložiště Azure používá přihlašovací údaje, které obsahují název účtu a klíč. Klíč se automaticky vygeneruje a slouží jako heslo, nikoli jako kryptografický klíč. Key Vault spravuje klíče účtu úložiště tím, že je pravidelně obnovuje v účtu úložiště a poskytuje tokeny sdíleného přístupového podpisu pro delegovaný přístup k prostředkům ve vašem účtu úložiště.
Pomocí funkce klíče spravovaného Key Vault úložiště můžete vygenerovat (synchronizovat) klíče s účtem úložiště Azure a klíče pravidelně obnovovat (obměně). Můžete spravovat klíče pro účty úložiště i klasické účty úložiště.
Při použití funkce klíče spravovaného účtu úložiště zvažte následující body:
- Hodnoty klíče se nikdy nevrátily jako odpověď volajícímu.
- Klíče Key Vault úložiště byste měli spravovat jenom vy. Nespravujte klíče sami a nezasahujte do Key Vault procesů.
- Pouze jeden Key Vault by měl spravovat klíče účtu úložiště. Nepovoluje správu klíčů z více objektů.
- Znovu vygenerujte klíče pouze Key Vault klíči. Klíče účtu úložiště negenerujte ručně.
Důležité
Opětovné vygenerování klíče přímo v účtu úložiště přeruší nastavení spravovaného účtu úložiště a může zneplatnění tokenů SAS a způsobit výpadky.
Poznámka
Tento článek používá modul Azure Az PowerShell, což je doporučený modul PowerShellu pro interakci s Azure. Pokud chcete začít s modulem Az PowerShell, projděte si téma věnované instalaci Azure PowerShellu. Informace o tom, jak migrovat na modul Az PowerShell, najdete v tématu Migrace Azure PowerShellu z AzureRM na Az.
ID aplikace instančního objektu
Tenant Azure AD poskytuje každé zaregistrované aplikaci objekt služby. Tento objekt služby slouží jako ID aplikace, které se používá při nastavování autorizace pro přístup k jiným prostředkům Azure prostřednictvím Azure RBAC.
Key Vault je aplikace Microsoftu, která je předem zaregistrovaná ve všech tenantech Azure AD. Key Vault je zaregistrované pod stejným ID aplikace v každém cloudu Azure.
| Tenanti | Cloud | ID aplikace |
|---|---|---|
| Azure AD | Azure Government | 7e7c393b-45d0-48b1-a35e-2905ddf8183c |
| Azure AD | Veřejný Azure | cfa8b339-82a2-471a-a3c9-0fc0be7a4093 |
| Jiné | Všechny | cfa8b339-82a2-471a-a3c9-0fc0be7a4093 |
Požadavky
Abyste tuto příručku dokončili, musíte nejprve provést následující:
- Nainstalujte modul Azure PowerShell .
- Vytvořte trezor klíčů.
- Vytvořte účet úložiště Azure. Název účtu úložiště musí obsahovat pouze malá písmena a číslice. Délka názvu musí být 3 až 24 znaků.
Správa klíčů účtu úložiště
Připojení k účtu Azure
Ověřte relaci PowerShellu pomocí rutiny Připojení-AzAccount.
Connect-AzAccount
Pokud máte více předplatných Azure, můžete je zobrazit pomocí rutiny Get-AzSubscription a zadat předplatné, které chcete použít s rutinou Set-AzContext.
Set-AzContext -SubscriptionId <subscriptionId>
Nastavení proměnných
Nejprve v následujících krocích nastavte proměnné, které budou používat rutiny PowerShellu. Nezapomeňte aktualizovat zástupné symboly YourResourceGroupName, YourStorageAccountName a YourKeyVaultName a nastavit $keyVaultSpAppId na (jak je uvedeno výše v ID instančního objektu cfa8b339-82a2-471a-a3c9-0fc0be7a4093 aplikace).
K získání ID uživatele a kontextu Azure PowerShell azure storage použijeme také rutiny Get-AzContext a Get-AzStorageAccount.
$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
Poznámka
Pro účet Storage Classic použijte jako primární a sekundární $storageAccountKey
Pro účet klasického účtu úložiště použijte get-AzResource -Name "ClassicStorageAccountName" -ResourceGroupName $resourceGroupName' místo Get-AzStorageAccount Storage.
Give Key Vault access to your storage account
Než Key Vault přístup ke klíčům účtu úložiště a spravovat je, musíte autorizovat jeho přístup k vašemu účtu úložiště. Aplikace Key Vault vyžaduje oprávnění k zobrazení seznamu a opětovnému vygenerování klíčů pro váš účet úložiště. Tato oprávnění jsou povolená prostřednictvím předdefinové role Azure Storage role služby operátora klíče účtu.
Přiřaďte tuto roli Key Vault objektu služby a omezte rozsah na váš účet úložiště pomocí rutiny 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
Po úspěšném přiřazení role by se měl zobrazit výstup podobný následujícímu příkladu:
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
Pokud Key Vault účet úložiště už je přidaný do role, zobrazí se zpráva Přiřazení role už existuje. . Přiřazení role můžete také ověřit pomocí stránky Řízení přístupu (IAM) účtu úložiště v Azure Portal.
Udejte uživatelskému účtu oprávnění ke spravovaným účtům úložiště.
Pomocí rutiny Azure PowerShell Set-AzKeyVaultAccessPolicy aktualizujte zásady přístupu Key Vault a udělte uživatelskému účtu oprávnění účtu úložiště.
# 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
Mějte na paměti, že oprávnění pro účty úložiště nejsou k dispozici na stránce Zásady přístupu účtu úložiště v Azure Portal.
Přidání spravovaného účtu úložiště do Key Vault úložiště
Pomocí Azure PowerShell Add-AzKeyVaultManagedStorageAccount vytvořte ve své instanci spravovaného Key Vault úložiště. Přepínač -DisableAutoRegenerateKey určuje, ŽE SE NEMÁ znovu vygenerovat klíče účtu úložiště.
# Add your storage account to your Key Vault's managed storage accounts
Add-AzKeyVaultManagedStorageAccount -VaultName $keyVaultName -AccountName $storageAccountName -AccountResourceId $storageAccount.Id -ActiveKeyName $storageAccountKey -DisableAutoRegenerateKey
Po úspěšném přidání účtu úložiště bez opětovného vygenerování klíče by se měl zobrazit výstup podobný následujícímu příkladu:
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 :
Povolení opětovného generování klíčů
Pokud chcete Key Vault klíče účtu úložiště pravidelně generovat, můžete k nastavení období opětovného vygenerování použít rutinu Azure PowerShell Add-AzKeyVaultManagedStorageAccount. V tomto příkladu nastavme období opětovného vygenerování na tři dny. Když je čas obměny, Key Vault klíč, který není aktivní, a potom nastaví nově vytvořený klíč jako aktivní. K vydání tokenů SAS se v jednom okamžiku používá pouze jeden z klíčů. Toto je aktivní klíč.
$regenPeriod = [System.Timespan]::FromDays(3)
Add-AzKeyVaultManagedStorageAccount -VaultName $keyVaultName -AccountName $storageAccountName -AccountResourceId $storageAccount.Id -ActiveKeyName $storageAccountKey -RegenerationPeriod $regenPeriod
Po úspěšném přidání účtu úložiště s obnovením klíče by se měl zobrazit výstup podobný následujícímu příkladu:
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 :
Tokeny sdíleného přístupového podpisu
Můžete také požádat o Key Vault tokeny sdíleného přístupového podpisu. Sdílený přístupový podpis poskytuje delegovaný přístup k prostředkům ve vašem účtu úložiště. Klientům můžete udělit přístup k prostředkům ve vašem účtu úložiště bez sdílení klíčů účtu. Sdílený přístupový podpis poskytuje zabezpečený způsob, jak sdílet prostředky úložiště, aniž byste měli ohrožené klíče účtu.
Příkazy v této části dokončí následující akce:
- Nastavte definici sdíleného přístupového podpisu účtu.
- Vytvořte token sdíleného přístupového podpisu účtu pro služby Blob, File, Table a Queue. Token se vytvoří pro typy prostředků Service (Služba), Container (Kontejner) a Object (Objekt). Token se vytvoří se všemi oprávněními, přes https a se zadaným počátečním a koncovým datem.
- Nastavte Key Vault sdíleného přístupového podpisu spravovaného úložiště v trezoru. Definice má identifikátor URI šablony vytvořeného tokenu sdíleného přístupového podpisu. Definice má typ sdíleného přístupového podpisu
accounta je platná po dobu N dnů. - Ověřte, že se sdílený přístupový podpis uložil do trezoru klíčů jako tajný kód.
Nastavení proměnných
Nejprve v následujících krocích nastavte proměnné, které budou používat rutiny PowerShellu. Nezapomeňte aktualizovat zástupné <YourStorageAccountName> <YourKeyVaultName> symboly a .
K získání kontextu účtu Azure PowerShell Azure použijeme také rutiny New-AzStorageContext.
$storageAccountName = <YourStorageAccountName>
$keyVaultName = <YourKeyVaultName>
$storageContext = New-AzStorageContext -StorageAccountName $storageAccountName -Protocol Https -StorageAccountKey Key1 #(or "Primary" for Classic Storage Account)
Vytvoření tokenu sdíleného přístupového podpisu
Vytvořte definici sdíleného přístupového podpisu pomocí rutin Azure PowerShell 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
Hodnota hodnoty $sasToken bude vypadat podobně jako tato.
?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
Vygenerování definice sdíleného přístupového podpisu
Pomocí rutiny Azure PowerShell Set-AzKeyVaultManagedStorageSasDefinition vytvořte definici sdíleného přístupového podpisu. Do parametru můžete zadat název podle vašeho -Name výběru.
Set-AzKeyVaultManagedStorageSasDefinition -AccountName $storageAccountName -VaultName $keyVaultName -Name <YourSASDefinitionName> -TemplateUri $sasToken -SasType 'account' -ValidityPeriod ([System.Timespan]::FromDays(30))
Ověření definice sdíleného přístupového podpisu
Pomocí rutiny Get-AzKeyVaultSecret můžete ověřit, že se definice sdíleného přístupového podpisu uložila do Azure PowerShell klíčů.
Nejprve ve svém trezoru klíčů vyhledejte definici sdíleného přístupového podpisu.
Get-AzKeyVaultSecret -VaultName <YourKeyVaultName>
Tajný kód odpovídající vaší definici SAS bude mít tyto vlastnosti:
Vault Name : <YourKeyVaultName>
Name : <SecretName>
...
Content Type : application/vnd.ms-sastoken-storage
Tags :
Teď můžete k zobrazení obsahu tohoto tajného klíče použít rutinu Get-AzKeyVaultSecret s parametry VaultName Name a .
$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
Ve výstupu tohoto příkazu se zobrazí řetězec definice SAS.