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. Aby rozpocząć, zobacz Instalowanie programu Azure PowerShell. 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 |
---|---|---|
Microsoft Entra ID | Azure Government | 7e7c393b-45d0-48b1-a35e-2905ddf8183c |
Microsoft Entra ID | 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:
- Zainstaluj moduł Azure PowerShell.
- Tworzenie magazynu kluczy
- Utwórz konto usługi Azure Storage. Nazwa konta magazynu musi używać tylko małych liter i cyfr. Długość nazwy musi zawierać się od 3 do 24 znaków.
Zarządzanie kluczami konta magazynu
Nawiąż połączenie z kontem platformy Azure
Uwierzytelnianie sesji programu PowerShell przy użyciu polecenia cmdlet Connect-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/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/rgContoso/providers/Microsoft.Storage/storageAccounts/sacontoso/providers/Microsoft.Authorization/roleAssignments/00000000-0000-0000-0000-000000000000
Scope : /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/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 : aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb
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/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/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/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/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) |
Wymagany. 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) |
Wymagany. 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) |
Wymagany. 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 ). Domyślna wartość 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.