Zarządzanie kluczami konta magazynu za pomocą usługi Key Vault i programu Azure PowerShell (starsza wersja)

Ważne

Klucze konta magazynu zarządzanego w usłudze Key Vault (starsza wersja) są obsługiwane, ponieważ nie są już planowane żadne aktualizacje. Tylko sygnatura dostępu współdzielonego konta jest obsługiwana z definicjami sygnatury dostępu współdzielonego w wersji usługi magazynu w wersji nowszej niż 2018-03-28.

Ważne

Zalecamy korzystanie z integracji usługi Azure Storage z usługą Microsoft Entra ID, opartą na chmurze usługą zarządzania tożsamościami i dostępem firmy Microsoft. Integracja firmy Microsoft Entra jest dostępna dla obiektów blob i kolejek platformy Azure oraz zapewnia dostęp oparty na tokenach OAuth2 do usługi Azure Storage (podobnie jak usługa Azure Key Vault). Microsoft Entra ID umożliwia uwierzytelnianie aplikacji klienckiej przy użyciu aplikacji lub tożsamości użytkownika zamiast poświadczeń konta magazynu. Tożsamość zarządzana firmy Microsoft Entra można użyć podczas uruchamiania na platformie Azure. Tożsamości zarządzane usuwają potrzebę uwierzytelniania klienta i przechowywania poświadczeń w aplikacji lub w aplikacji. Użyj tego rozwiązania tylko wtedy, gdy uwierzytelnianie microsoft Entra nie jest możliwe.

Konto usługi Azure Storage używa poświadczeń składających się z nazwy konta i klucza. Klucz jest generowany automatycznie i służy jako hasło, a nie jako klucz kryptograficzny. Usługa Key Vault zarządza kluczami konta magazynu przez okresowe ponowne generowanie ich na koncie magazynu i zapewnia tokeny sygnatury dostępu współdzielonego na potrzeby delegowanego dostępu do zasobów na koncie magazynu.

Możesz użyć funkcji klucza zarządzanego konta magazynu usługi Key Vault, aby wyświetlić listę (synchronizować) klucze przy użyciu konta usługi Azure Storage i okresowo ponownie wygenerować (obracać) klucze. Klucze można zarządzać zarówno dla kont magazynu, jak i klasycznych kont magazynu.

W przypadku korzystania z funkcji klucza zarządzanego konta magazynu należy wziąć pod uwagę następujące kwestie:

  • Wartości klucza nigdy nie są zwracane w odpowiedzi na obiekt wywołujący.
  • Tylko usługa Key Vault powinna zarządzać kluczami konta magazynu. Nie zarządzaj kluczami samodzielnie i unikaj zakłócania procesów usługi Key Vault.
  • Tylko jeden obiekt usługi Key Vault powinien zarządzać kluczami konta magazynu. Nie zezwalaj na zarządzanie kluczami z wielu obiektów.
  • Wygeneruj ponownie klucze tylko przy użyciu usługi Key Vault. Nie wygeneruj ręcznie kluczy konta magazynu.

Ważne

Ponowne generowanie klucza bezpośrednio na koncie magazynu powoduje przerwanie konfiguracji zarządzanego konta magazynu i może unieważnić używane tokeny SAS i spowodować awarię.

Uwaga

Do interakcji z platformą Azure zalecamy używanie modułu Azure Az w programie PowerShell. Zobacz Instalowanie programu Azure PowerShell, aby rozpocząć. Aby dowiedzieć się, jak przeprowadzić migrację do modułu Az PowerShell, zobacz Migracja programu Azure PowerShell z modułu AzureRM do modułu Az.

Identyfikator aplikacji jednostki usługi

Dzierżawa firmy Microsoft Entra udostępnia każdą zarejestrowaną aplikację z jednostką usługi. Jednostka usługi służy jako identyfikator aplikacji, który jest używany podczas konfigurowania autoryzacji w celu uzyskania dostępu do innych zasobów platformy Azure za pośrednictwem kontroli dostępu opartej na rolach platformy Azure.

Key Vault to aplikacja firmy Microsoft, która jest wstępnie zarejestrowana we wszystkich dzierżawach firmy Microsoft Entra. Usługa Key Vault jest zarejestrowana w ramach tego samego identyfikatora aplikacji w każdej chmurze platformy Azure.

Dzierżawy Chmura Application ID
Identyfikator usługi Microsoft Entra Azure Government 7e7c393b-45d0-48b1-a35e-2905ddf8183c
Identyfikator usługi Microsoft Entra Azure — publiczna cfa8b339-82a2-471a-a3c9-0fc0be7a4093
Inne Dowolne cfa8b339-82a2-471a-a3c9-0fc0be7a4093

Wymagania wstępne

Aby ukończyć ten przewodnik, należy najpierw wykonać następujące czynności:

Zarządzanie kluczami konta magazynu

Nawiąż połączenie z kontem platformy Azure

Uwierzytelnij sesję programu PowerShell przy użyciu polecenia cmdlet Połączenie-AzAccount.

Connect-AzAccount

Jeśli masz wiele subskrypcji platformy Azure, możesz je wyświetlić przy użyciu polecenia cmdlet Get-AzSubscription i określić subskrypcję, której chcesz użyć z poleceniem cmdlet Set-AzContext .

Set-AzContext -SubscriptionId <subscriptionId>

Ustawianie zmiennych

Najpierw ustaw zmienne, które mają być używane przez polecenia cmdlet programu PowerShell w poniższych krokach. Pamiętaj, aby zaktualizować symbole zastępcze "YourResourceGroupName", "YourStorageAccountName" i "YourKeyVaultName" i ustawić $keyVaultSpAppId na cfa8b339-82a2-471a-a3c9-0fc0be7a4093 (jak określono w identyfikatorze aplikacji głównej usługi).

Użyjemy również poleceń cmdlet Get-AzContext i Get-AzStorageAccount programu Azure PowerShell, aby uzyskać identyfikator użytkownika i kontekst konta usługi Azure Storage.

$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

Uwaga

W przypadku klasycznego konta magazynu użyj opcji "primary" i "secondary" dla $storageAccountKey
Użyj polecenia "Get-AzResource -Name "ClassicStorageAccountName" -ResourceGroupName $resourceGroupName" zamiast polecenia "Get-AzStorageAccount" dla klasycznego konta magazynu

Nadawanie usłudze Key Vault dostępu do konta magazynu

Aby usługa Key Vault mogła uzyskiwać dostęp do kluczy konta magazynu i zarządzać nimi, musisz autoryzować dostęp do konta magazynu. Aplikacja Usługi Key Vault wymaga uprawnień do wyświetlania listy i ponownego generowania kluczy dla konta magazynu. Te uprawnienia są włączane za pośrednictwem wbudowanej roli Roli usługi Operatora klucza konta magazynu platformy Azure.

Przypisz tę rolę do jednostki usługi Key Vault, ograniczając zakres do konta magazynu przy użyciu polecenia cmdlet New-AzRoleAssignment programu Azure PowerShell.

# 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 pomyślnym przypisaniu roli powinny zostać wyświetlone dane wyjściowe podobne do następującego przykładu:

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

Jeśli usługa Key Vault została już dodana do roli na koncie magazynu, otrzymasz komunikat "Przypisanie roli już istnieje". Błąd. Możesz również zweryfikować przypisanie roli przy użyciu strony "Kontrola dostępu (IAM) konta magazynu w witrynie Azure Portal.

Nadaj kontu użytkownika uprawnienie do zarządzanych kont magazynu

Użyj polecenia cmdlet Set-AzKeyVaultAccessPolicy programu Azure PowerShell, aby zaktualizować zasady dostępu usługi Key Vault i przyznać konto magazynu uprawnienia do konta użytkownika.

# 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

Uprawnienia dla kont magazynu nie są dostępne na stronie "Zasady dostępu" konta magazynu w witrynie Azure Portal.

Dodawanie zarządzanego konta magazynu do wystąpienia usługi Key Vault

Użyj polecenia cmdlet Add-AzKeyVaultManagedStorageAccount programu Azure PowerShell, aby utworzyć zarządzane konto magazynu w wystąpieniu usługi Key Vault. Przełącznik -DisableAutoRegenerateKey określa, że nie ma ponownie wygenerować kluczy konta magazynu.

# 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 pomyślnym dodaniu konta magazynu bez ponownego generowania klucza powinny zostać wyświetlone dane wyjściowe podobne do następującego przykładu:

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                :

Włączanie ponownego odnawiania klucza

Jeśli chcesz, aby usługa Key Vault okresowo ponownie wygenerowała klucze konta magazynu, możesz użyć polecenia cmdlet Add-AzKeyVaultManagedStorageAccount programu Azure PowerShell, aby ustawić okres rewitalizacji. W tym przykładzie ustawiliśmy okres rewitalizacji 30 dni. Gdy nadszedł czas na rotację, usługa Key Vault ponownie generuje nieaktywny klucz, a następnie ustawia nowo utworzony klucz jako aktywny. Klucz używany do wystawiania tokenów SAS jest aktywnym kluczem.

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

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

Po pomyślnym dodaniu konta magazynu z ponownego generowania klucza powinny zostać wyświetlone dane wyjściowe podobne do następującego przykładu:

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 sygnatury dostępu współdzielonego

Możesz również poprosić usługę Key Vault o wygenerowanie tokenów sygnatury dostępu współdzielonego. Sygnatura dostępu współdzielonego zapewnia delegowany dostęp do zasobów na koncie magazynu. Możesz udzielić klientom dostępu do zasobów na koncie magazynu bez udostępniania kluczy konta. Sygnatura dostępu współdzielonego zapewnia bezpieczny sposób udostępniania zasobów magazynu bez naruszania kluczy konta.

Polecenia w tej sekcji umożliwiają wykonanie następujących akcji:

  • Ustaw definicję sygnatury dostępu współdzielonego konta.
  • Ustaw definicję sygnatury dostępu współdzielonego magazynu zarządzanego usługi Key Vault w magazynie. Definicja zawiera identyfikator URI szablonu utworzonego tokenu sygnatury dostępu współdzielonego. Definicja ma typ account sygnatury dostępu współdzielonego i jest ważna przez N dni.
  • Sprawdź, czy sygnatura dostępu współdzielonego została zapisana w magazynie kluczy jako wpis tajny.

Ustawianie zmiennych

Najpierw ustaw zmienne, które mają być używane przez polecenia cmdlet programu PowerShell w poniższych krokach. Pamiętaj, aby zaktualizować <symbole zastępcze YourStorageAccountName> i <YourKeyVaultName> .

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

Definiowanie szablonu definicji sygnatury dostępu współdzielonego

Usługa Key Vault używa szablonu definicji sygnatury dostępu współdzielonego do generowania tokenów dla aplikacji klienckich.

Przykład szablonu definicji sygnatury dostępu współdzielonego:

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

Parametry sygnatury dostępu współdzielonego konta wymagane w szablonie definicji sygnatury dostępu współdzielonego dla usługi Key Vault

Parametr zapytania sygnatury dostępu współdzielonego opis
SignedVersion (sv) Wymagane. Określa podpisaną wersję usługi magazynu, która ma być używana do autoryzacji żądań wysyłanych za pomocą tej sygnatury dostępu współdzielonego konta. Musi być ustawiona na wersję 2015-04-05 lub nowszą. Usługa Key Vault obsługuje wersje nie później niż 2018-03-28
SignedServices (ss) Wymagane. Określa podpisane usługi dostępne dla sygnatury dostępu współdzielonego konta. Możliwe wartości to:

— Obiekt blob (b)
- Kolejka (q)
- Tabela (t)
- Plik (f)

Możesz połączyć wartości, aby zapewnić dostęp do więcej niż jednej usługi. Na przykład ss=bf określa dostęp do punktów końcowych obiektów blob i plików.
SignedResourceTypes (srt) Wymagane. Określa podpisane typy zasobów, które są dostępne dla sygnatury dostępu współdzielonego konta.

- Service (s): Access to service-level APIs (na przykład Get/Set Service Properties, Get Service Stats, List Containers/Queues/Tables/Shares)
— Kontener (c): dostęp do interfejsów API na poziomie kontenera (na przykład tworzenie/usuwanie kontenera, tworzenie/usuwanie kolejki, tworzenie/usuwanie tabeli, tworzenie/usuwanie udziału, wyświetlanie listy obiektów blob/plików i katalogów)
- Obiekt (o): dostęp do interfejsów API na poziomie obiektu dla obiektów blob, komunikatów w kolejce, jednostek tabeli i plików (na przykład Put Blob, Query Entity, Get Messages, Create File itp.)

Możesz połączyć wartości, aby zapewnić dostęp do więcej niż jednego typu zasobu. Na przykład srt=sc określa dostęp do zasobów usługi i kontenera.
SignedPermission (sp) Wymagane. Określa podpisane uprawnienia dla sygnatury dostępu współdzielonego konta. Uprawnienia są prawidłowe tylko wtedy, gdy są zgodne z określonym typem zasobu podpisanego; w przeciwnym razie są one ignorowane.

- Odczyt (r): prawidłowe dla wszystkich podpisanych typów zasobów (usługa, kontener i obiekt). Zezwala na uprawnienia odczytu do określonego typu zasobu.
- Zapis (w): prawidłowy dla wszystkich podpisanych typów zasobów (usługa, kontener i obiekt). Zezwala na uprawnienia zapisu do określonego typu zasobu.
- Usuń (d): Prawidłowe dla typów zasobów kontenera i obiektu, z wyjątkiem komunikatów w kolejce.
- Trwałe usuwanie (y): prawidłowe dla typu zasobu obiektu blob tylko.
- Lista (l): Prawidłowa tylko dla typów zasobów usługi i kontenera.
- Dodaj (a): Prawidłowe tylko dla następujących typów zasobów obiektów: komunikaty kolejki, jednostki tabeli i uzupełnialne obiekty blob.
- Utwórz (c): Prawidłowe tylko dla następujących typów zasobów obiektów: obiekty blob i pliki. Użytkownicy mogą tworzyć nowe obiekty blob lub pliki, ale nie mogą zastępować istniejących obiektów blob ani plików.
- Aktualizacja (u): Prawidłowa dla następujących typów zasobów obiektów: komunikaty kolejki i jednostki tabeli.
- Proces (p): Prawidłowy tylko dla następującego typu zasobu Obiektu: komunikaty kolejki.
- Tag (t): prawidłowy tylko dla następującego typu zasobu obiektu: obiekty blob. Zezwala na operacje tagów obiektów blob.
- Filter (f): Valid for the following Object resource type only: blob( Prawidłowy dla następującego typu zasobu obiektu: blob. Zezwala na filtrowanie według tagu obiektu blob.
- Ustaw zasady niezmienności (i): Prawidłowe tylko dla następującego typu zasobu obiektu: obiekt blob. Zezwala na ustawianie/usuwanie zasad niezmienności i archiwizację ze względów prawnych dla obiektu blob.
SignedProtocol (spr) Opcjonalny. Określa protokół dozwolony dla żądania złożonego z sygnaturą dostępu współdzielonego konta. Możliwe wartości to tylko HTTPS i HTTP (https,http) lub HTTPS (https). Wartość domyślna to https,http.

Tylko http nie jest dozwoloną wartością.

Aby uzyskać więcej informacji na temat sygnatury dostępu współdzielonego konta, zobacz: Tworzenie sygnatury dostępu współdzielonego konta

Uwaga

Usługa Key Vault ignoruje parametry okresu istnienia, takie jak "Wygaśnięcie podpisanego", "Podpisany start" i parametry wprowadzone po wersji 2018-03-28

Ustawianie definicji sygnatury dostępu współdzielonego w usłudze Key Vault

Użyj polecenia cmdlet Set-AzKeyVaultManagedStorageSasDefinition programu Azure PowerShell, aby utworzyć definicję sygnatury dostępu współdzielonego. Możesz podać wybraną nazwę parametru -Name .

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

Weryfikowanie definicji sygnatury dostępu współdzielonego

Możesz sprawdzić, czy definicja sygnatury dostępu współdzielonego została zapisana w magazynie kluczy przy użyciu polecenia cmdlet Get-AzKeyVaultSecret programu Azure PowerShell.

Najpierw znajdź definicję sygnatury dostępu współdzielonego w magazynie kluczy.

Get-AzKeyVaultSecret -VaultName <YourKeyVaultName>

Wpis tajny odpowiadający definicji sygnatury dostępu współdzielonego będzie miał następujące właściwości:

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

Teraz możesz użyć polecenia cmdlet Get-AzKeyVaultSecret z parametrami VaultName i Name , aby wyświetlić zawartość tego wpisu tajnego.

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

Dane wyjściowe tego polecenia będą zawierać ciąg definicji sygnatury dostępu współdzielonego.

Następne kroki