Správa klíčů účtu úložiště pomocí služby Key Vault a Azure PowerShellu (starší verze)

Důležité

Klíče účtu spravovaného úložiště služby Key Vault (starší verze) se podporují, protože se neplánují žádné další aktualizace. U definic podepsaných službou úložiště podepsané službou úložiště jsou podporovány pouze SAS SAS verze 2018-03-28.

Důležité

Doporučujeme používat integraci azure Storage s Microsoft Entra ID, cloudovou službou pro správu identit a přístupu od Microsoftu. Integrace Microsoft Entra je k dispozici pro objekty blob a fronty Azure a poskytuje přístup založený na tokenech OAuth2 ke službě Azure Storage (stejně jako Azure Key Vault). Microsoft Entra ID umožňuje ověřovat klientskou aplikaci pomocí aplikace nebo identity uživatele místo přihlašovacích údajů účtu úložiště. Spravovanou identitu Microsoft Entra můžete použít při spuštění v Azure. Spravované identity odstraňují potřebu ověřování klientů a ukládání přihlašovacích údajů do nebo ve vaší aplikaci. Toto řešení použijte pouze v případě, že ověřování Microsoft Entra není možné.

Účet úložiště Azure používá přihlašovací údaje, které tvoří 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ě znovu vygeneruje 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 účtu úložiště spravované službou Key Vault můžete vypsat (synchronizovat) klíče s účtem úložiště Azure a klíče pravidelně znovu vygenerovat (otočit). Klíče můžete spravovat pro účty úložiště i účty úložiště Classic.

Pokud používáte funkci klíče spravovaného účtu úložiště, zvažte následující body:

  • Hodnoty klíče se nikdy nevracejí v reakci na volajícího.
  • Klíče účtu úložiště by měly spravovat jenom služba Key Vault. Nespravujte klíče sami a nezasahujte do procesů služby Key Vault.
  • Klíče účtu úložiště by měl spravovat jenom jeden objekt služby Key Vault. Nepovolujte správu klíčů z více objektů.
  • Znovu vygenerujte klíče pouze pomocí služby Key Vault. Klíče účtu úložiště nevygenerujte 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 zneplatnit používané tokeny SAS a způsobit výpadek.

Poznámka:

Při práci s Azure doporučujeme používat modul Azure Az PowerShellu. Začněte tím, že si projdete téma Instalace 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 Microsoft Entra poskytuje každou zaregistrovanou aplikaci instančnímu objektu. Instanční objekt 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 Microsoft Entra. Key Vault je zaregistrovaný pod stejným ID aplikace v každém cloudu Azure.

Tenanti Cloud ID aplikace
Microsoft Entra ID Azure Government 7e7c393b-45d0-48b1-a35e-2905ddf8183c
Microsoft Entra ID Veřejný Azure cfa8b339-82a2-471a-a3c9-0fc0be7a4093
Jiný důvod Všechny cfa8b339-82a2-471a-a3c9-0fc0be7a4093

Předpoklady

Abyste mohli tuto příručku dokončit, musíte nejprve provést následující:

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 vypsat 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é mají být používány rutinami PowerShellu. Nezapomeňte aktualizovat zástupné symboly YourResourceGroupName, YourStorageAccountName a YourKeyVaultName a nastavit $keyVaultSpAppId na cfa8b339-82a2-471a-a3c9-0fc0be7a4093 (jak je uvedeno v ID aplikace instančního objektu).

K získání ID uživatele a kontextu účtu úložiště Azure použijeme také rutiny Azure PowerShell 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:

V případě klasického účtu úložiště pro $storageAccountKey použijte primární a sekundární.
Použití rutiny Get-AzResource -Name ClassicStorageAccountName -ResourceGroupName $resourceGroupName místo Get-AzStorageAccount pro klasický účet úložiště

Udělení přístupu ke službě Key Vault k vašemu účtu úložiště

Aby mohl Key Vault přistupovat k klíčům účtu úložiště a spravovat je, musíte autorizovat přístup k účtu úložiště. Aplikace Key Vault vyžaduje oprávnění k výpisu a opětovnému vygenerování klíčů pro váš účet úložiště. Tato oprávnění jsou povolená prostřednictvím role operátora klíče účtu úložiště Azure předdefinované role.

Přiřaďte tuto roli instančnímu objektu služby Key Vault 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 už je služba Key Vault přidaná do role ve vašem účtu úložiště, zobrazí se "Přiřazení role již existuje". Chyba. Přiřazení role můžete také ověřit pomocí stránky Řízení přístupu (IAM) účtu úložiště na webu Azure Portal.

Udělení oprávnění ke spravovanému účtu úložiště

Pomocí rutiny Azure PowerShell Set-AzKeyVaultAccessPolicy aktualizujte zásady přístupu ke službě Key Vault a udělte účtu úložiště oprávnění k vašemu uživatelskému účtu.

# 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

Oprávnění pro účty úložiště nejsou na stránce Zásady přístupu k účtu úložiště na webu Azure Portal k dispozici.

Přidání spravovaného účtu úložiště do instance služby Key Vault

Pomocí rutiny Azure PowerShell Add-AzKeyVaultManagedStorageAccount vytvořte spravovaný účet úložiště v instanci služby Key Vault. Přepínač -DisableAutoRegenerateKey určuje, že se klíče účtu úložiště negenerují znovu.

# 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 regenerace klíčů 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í regenerace klíčů

Pokud chcete, aby služba Key Vault obnovovala klíče účtu úložiště pravidelně, můžete k nastavení období regenerace použít rutinu Azure PowerShell Add-AzKeyVaultManagedStorageAccount . V tomto příkladu nastavíme období regenerace 30 dnů. Když je čas otočit, Key Vault znovu vygeneruje neaktivní klíč a potom nastaví nově vytvořený klíč jako aktivní. Klíčem použitým k vydávání tokenů SAS je aktivní klíč.

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

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 regenerací klíčů 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 : 30.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 službu Key Vault, aby vygenerovala 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 bezpečný způsob sdílení prostředků úložiště bez ohrožení klíčů účtu.

Příkazy v této části provádějí následující akce:

  • Nastavte definici sdíleného přístupového podpisu účtu.
  • Nastavte v trezoru definici sdíleného přístupového podpisu spravovaného úložiště služby Key Vault. Definice obsahuje identifikátor URI šablony tokenu sdíleného přístupového podpisu, který byl vytvořen. Definice má typ account sdíleného přístupového podpisu a je platný po dobu N dnů.
  • Ověřte, že sdílený přístupový podpis byl uložen v trezoru klíčů jako tajný klíč.

Nastavení proměnných

Nejprve v následujících krocích nastavte proměnné, které mají být používány rutinami PowerShellu. Nezapomeňte aktualizovat <zástupné symboly YourStorageAccountName> a <YourKeyVaultName> .

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

Definování šablony definice sdíleného přístupového podpisu

Key Vault používá šablonu definice SAS k vygenerování tokenů pro klientské aplikace.

Příklad šablony definice SAS:

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

Parametry SAS účtu vyžadované v šabloně definice SAS pro Key Vault

Parametr dotazu SAS Popis
SignedVersion (sv) Požadováno. Určuje podepsanou verzi služby úložiště, která se má použít k autorizaci požadavků provedených pomocí sdíleného přístupového podpisu tohoto účtu. Musí být nastavená na verzi 2015-04-05 nebo novější. Key Vault podporuje verze nejpozději 2018-03-28.
SignedServices (ss) Povinný: Určuje podepsané služby přístupné pomocí sdíleného přístupového podpisu účtu. Možné hodnoty zahrnují:

– Objekt blob (b)
– Fronta (q)
- Tabulka (t)
- Soubor (f)

Hodnoty můžete kombinovat a poskytnout tak přístup k více než jedné službě. ss=bf Například určuje přístup ke koncovým bodům Blob a File.
SignedResourceTypes (srt) Povinný: Určuje typy podepsaných prostředků, které jsou přístupné pomocí sdíleného přístupového podpisu účtu.

– Služba (s): Přístup k rozhraním API na úrovni služby (například Get/Set Service Properties, Get Service Stats, List Containers/Queues/Tables/Shares)
– Kontejner (c): Přístup k rozhraním API na úrovni kontejneru (například vytvoření,odstranění kontejneru, vytvoření/odstranění fronty, vytvoření/odstranění tabulky, vytvoření/odstranění sdílené složky, výpis objektů blob/souborů a adresářů)
– Objekt (o): Přístup k rozhraním API na úrovni objektu pro objekty blob, zprávy fronty, entity tabulek a soubory (například Put Blob, Query Entity, Get Messages, Create File atd.)

Hodnoty můžete kombinovat a poskytnout tak přístup k více typům prostředků. Určuje například srt=sc přístup ke službám a prostředkům kontejneru.
SignedPermission (sp) Povinný: Určuje podepsaná oprávnění pro SAS účtu. Oprávnění jsou platná pouze v případě, že odpovídají zadanému podepsanému typu prostředku; jinak jsou ignorovány.

- Čtení (r): Platné pro všechny podepsané typy prostředků (Service, Container a Object). Povoluje oprávnění ke čtení zadaného typu prostředku.
– Zápis (w): Platné pro všechny podepsané typy prostředků (Service, Container a Object). Povoluje oprávnění k zápisu k zadanému typu prostředku.
- Odstranit (d): Platné pro typy prostředků typu kontejner a objekt, s výjimkou zpráv fronty.
- Trvalé odstranění (y): Platné pouze pro typ prostředku objektu blob.
- List (l): Platné pouze pro typy prostředků služby a kontejneru.
- Přidat (a): Platné pouze pro následující typy prostředků objektu: zprávy fronty, entity tabulky a doplňovací objekty blob.
- Vytvořit (c): Platné pouze pro následující typy prostředků objektu: objekty blob a soubory. Uživatelé mohou vytvářet nové objekty blob nebo soubory, ale nemusí přepsat existující objekty blob nebo soubory.
- Update (u): Platné pouze pro následující typy prostředků objektu: zprávy fronty a entity tabulky.
- Proces (p): Platný pouze pro následující typ prostředku objektu: zprávy fronty.
- Značka (t): Platné pouze pro následující typ prostředku objektu: objekty blob. Povoluje operace značek objektů blob.
- Filtr (f): Platné pouze pro následující typ prostředku objektu: objekt blob. Povoluje filtrování podle značky objektu blob.
– Nastavit zásady neměnnosti (i): Platné pouze pro následující typ prostředku objektu: objekt blob. Povoluje nastavení nebo odstranění zásad neměnnosti a blokování z právních důvodů v objektu blob.
SignedProtocol (spr) Nepovinné. Určuje protokol povolený pro požadavek vytvořený pomocí sdíleného přístupového podpisu účtu. Možné hodnoty jsou pouze HTTPS a HTTP (https,http) nebo HTTPS (https). Výchozí hodnota je https,http.

Pouze HTTP není povolená hodnota.

Další informace o SAS účtu najdete v tématu: Vytvoření sdíleného přístupového podpisu účtu

Poznámka:

Key Vault ignoruje parametry životnosti, jako je Podepsaná platnost, Signed Start a parametry zavedené po verzi 2018-03-28.

Nastavení definice sdíleného přístupového podpisu ve službě Key Vault

K vytvoření definice sdíleného přístupového podpisu použijte rutinu Azure PowerShell Set-AzKeyVaultManagedSasDefinition . Parametru můžete zadat název podle svého výběru -Name .

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

Ověření definice sdíleného přístupového podpisu

Pomocí rutiny Azure PowerShell Get-AzKeyVaultSecret můžete ověřit, že je definice sdíleného přístupového podpisu uložená ve vašem trezoru klíčů.

Nejprve vyhledejte definici sdíleného přístupového podpisu v trezoru klíčů.

Get-AzKeyVaultSecret -VaultName <YourKeyVaultName>

Tajný klíč odpovídající definici SAS bude mít tyto vlastnosti:

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

Teď můžete použít rutinu Get-AzKeyVaultSecret s VaultName parametry a Name zobrazit obsah tohoto tajného klíče.

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

Výstup tohoto příkazu zobrazí váš řetězec definice SAS.

Další kroky