Zarządzanie kluczami konta magazynu przy użyciu Key Vault i Azure PowerShellManage storage account keys with Key Vault and Azure PowerShell

Ważne

Zalecamy korzystanie z integracji usługi Azure Storage z Azure Active Directory (Azure AD), usługą firmy Microsoft do zarządzania tożsamościami i dostępem w chmurze.We recommend using Azure Storage integration with Azure Active Directory (Azure AD), Microsoft's cloud-based identity and access management service. Integracja z usługą Azure AD jest dostępna dla obiektów blob i kolejek platformy Azureoraz zapewnia oparty na tokenach dostęp OAuth2 do usługi Azure Storage (podobnie jak Azure Key Vault).Azure AD integration is available for Azure blobs and queues, and provides OAuth2 token-based access to Azure Storage (just like Azure Key Vault). Usługa Azure AD umożliwia uwierzytelnianie aplikacji klienckiej przy użyciu tożsamości aplikacji lub użytkownika zamiast poświadczeń konta magazynu.Azure AD allows you to authenticate your client application by using an application or user identity, instead of storage account credentials. Tożsamości zarządzanej usługi Azure AD można używać podczas uruchamiania na platformie Azure.You can use an Azure AD managed identity when you run on Azure. Tożsamości zarządzane usuwają potrzebę uwierzytelniania klienta i przechowywania poświadczeń w aplikacji lub z aplikacją.Managed identities remove the need for client authentication and storing credentials in or with your application. Użyj poniższego rozwiązania tylko wtedy, gdy uwierzytelnianie usługi Azure AD nie jest możliwe.Use below solution only when Azure AD authentication is not possible.

Konto usługi Azure Storage używa poświadczeń składających się z nazwy konta i klucza.An Azure storage account uses credentials comprising an account name and a key. Klucz jest automatycznie generowany i służy jako hasło, a nie jako klucz kryptograficzny.The key is autogenerated and serves as a password, rather than an as a cryptographic key. Key Vault zarządza kluczami konta magazynu, okresowo ponownie generując je na koncie magazynu i udostępnia tokeny sygnatury dostępu współdzielone w celu uzyskania delegowanego dostępu do zasobów na koncie magazynu.Key Vault manages storage account keys by periodically regenerating them in storage account and provides shared access signature tokens for delegated access to resources in your storage account.

Za pomocą funkcji Key Vault klucza konta magazynu zarządzanego można wyświetlać (synchronizować) klucze z kontem usługi Azure Storage i okresowo ponownie generować (obracać).You can use the Key Vault managed storage account key feature to list (sync) keys with an Azure storage account, and regenerate (rotate) the keys periodically. Kluczami można zarządzać zarówno dla kont magazynu, jak i klasycznych kont magazynu.You can manage keys for both storage accounts and Classic storage accounts.

W przypadku korzystania z funkcji klucza zarządzanego konta magazynu należy wziąć pod uwagę następujące kwestie:When you use the managed storage account key feature, consider the following points:

  • Wartości klucza nigdy nie są zwracane w odpowiedzi na wywołanie.Key values are never returned in response to a caller.
  • Tylko Key Vault zarządzać kluczami konta magazynu.Only Key Vault should manage your storage account keys. Nie zarządzaj kluczami samodzielnie i unikaj zakłócania Key Vault procesów.Don't manage the keys yourself and avoid interfering with Key Vault processes.
  • Tylko jeden obiekt Key Vault powinien zarządzać kluczami konta magazynu.Only a single Key Vault object should manage storage account keys. Nie zezwalaj na zarządzanie kluczami z wielu obiektów.Don't allow key management from multiple objects.
  • Wygeneruj ponownie klucze tylko Key Vault generuj ponownie.Regenerate keys by using Key Vault only. Nie należy ręcznie ponownie generować kluczy konta magazynu.Don't manually regenerate your storage account keys.

Uwaga

Ten artykuł został zaktualizowany o korzystanie z modułu Azure Az programu PowerShell.This article has been updated to use the Azure Az PowerShell module. Moduł Az programu PowerShell jest zalecanym modułem programu PowerShell na potrzeby interakcji z platformą Azure.The Az PowerShell module is the recommended PowerShell module for interacting with Azure. Aby rozpocząć pracę z modułem Azure PowerShell, zobacz Instalowanie programu Azure PowerShell.To get started with the Az PowerShell module, see Install 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.To learn how to migrate to the Az PowerShell module, see Migrate Azure PowerShell from AzureRM to Az.

Identyfikator aplikacji jednostki usługiService principal application ID

Dzierżawa usługi Azure AD udostępnia każdej zarejestrowanej aplikacji jednostkę usługi.An Azure AD tenant provides each registered application with a service principal. Jednostką usługi jest 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 RBAC platformy Azure.The service principal serves as the application ID, which is used during authorization setup for access to other Azure resources via Azure RBAC.

Key Vault to aplikacja firmy Microsoft, która jest wstępnie zarejestrowana we wszystkich dzierżawach usługi Azure AD.Key Vault is a Microsoft application that's pre-registered in all Azure AD tenants. Key Vault jest rejestrowany pod tym samym identyfikatorem aplikacji w każdej chmurze platformy Azure.Key Vault is registered under the same Application ID in each Azure cloud.

DzierżawyTenants ChmuraCloud Identyfikator aplikacjiApplication ID
Azure ADAzure AD Azure GovernmentAzure Government 7e7c393b-45d0-48b1-a35e-2905ddf8183c
Azure ADAzure AD Azure — publicznaAzure public cfa8b339-82a2-471a-a3c9-0fc0be7a4093
InneOther DowolneAny cfa8b339-82a2-471a-a3c9-0fc0be7a4093

Wymagania wstępnePrerequisites

Aby ukończyć ten przewodnik, należy najpierw wykonać następujące czynności:To complete this guide, you must first do the following:

Zarządzanie kluczami konta magazynuManage storage account keys

Nawiąż połączenie z kontem platformy AzureConnect to your Azure account

Uwierzytelnij sesję programu PowerShell przy użyciu polecenia cmdlet Connect-AzAccount.Authenticate your PowerShell session using the Connect-AzAccount cmdlet.

Connect-AzAccount

Jeśli masz wiele subskrypcji platformy Azure, możesz wyświetlić je za pomocą polecenia cmdlet Get-AzSubscription i określić subskrypcję, która ma być używania z poleceniem cmdlet Set-AzContext.If you have multiple Azure subscriptions, you can list them using the Get-AzSubscription cmdlet, and specify the subscription you wish to use with the Set-AzContext cmdlet.

Set-AzContext -SubscriptionId <subscriptionId>

Ustawianie zmiennychSet variables

Najpierw ustaw zmienne, które mają być używane przez polecenia cmdlet programu PowerShell w poniższych krokach.First, set the variables to be used by the PowerShell cmdlets in the following steps. Pamiętaj o zaktualizowaniu symboli zastępczych "YourResourceGroupName", "YourStorageAccountName" i "YourKeyVaultName" oraz o wartości $keyVaultSpAppId (zgodnie z powyższym identyfikatorem aplikacji jednostki cfa8b339-82a2-471a-a3c9-0fc0be7a4093 usługi). Be sure to update the "YourResourceGroupName", "YourStorageAccountName", and "YourKeyVaultName" placeholders, and set $keyVaultSpAppId to cfa8b339-82a2-471a-a3c9-0fc0be7a4093 (as specified in Service principal application ID, above).

Użyjemy również Azure PowerShell cmdlet Get-AzContext i Get-AzStorageAccount, aby uzyskać identyfikator użytkownika i kontekst konta usługi Azure Storage.We will also use the Azure PowerShell Get-AzContext and Get-AzStorageAccount cmdlets to get your user ID and the context of your Azure storage account.

$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 "podstawowego" i "pomocniczego" dla $storageAccountKeyFor Classic Storage Account use "primary" and "secondary" for $storageAccountKey
Użyj parametru "Get-AzResource -Name "ClassicStorageAccountName" -ResourceGroupName $resourceGroupName" zamiast "Get-AzStorageAccount" dla klasycznego konta magazynuUse 'Get-AzResource -Name "ClassicStorageAccountName" -ResourceGroupName $resourceGroupName' instead of'Get-AzStorageAccount' for Classic Storage Account

Zapewnianie Key Vault dostępu do konta magazynuGive Key Vault access to your storage account

Aby Key Vault uzyskać dostęp do kluczy konta magazynu i zarządzać nimi, musisz autoryzować jego dostęp do konta magazynu.Before Key Vault can access and manage your storage account keys, you must authorize its access your storage account. Aplikacja Key Vault wymaga uprawnień do generowania listy i ponownego generowania kluczy dla konta magazynu.The Key Vault application requires permissions to list and regenerate keys for your storage account. Te uprawnienia są włączane za pośrednictwem roli wbudowanej platformy Azure Operator usługi klucza konta magazynu.These permissions are enabled through the Azure built-in role Storage Account Key Operator Service Role.

Przypisz tę rolę do jednostki Key Vault, ograniczając zakres do konta magazynu za pomocą Azure PowerShell cmdlet New-AzRoleAssignment.Assign this role to the Key Vault service principal, limiting scope to your storage account, using the Azure PowerShell New-AzRoleAssignment cmdlet.

# 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świetlony dane wyjściowe podobne do następujących:Upon successful role assignment, you should see output similar to the following example:

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 Key Vault został już dodany do roli na koncie magazynu, otrzymasz komunikat "Przypisanie roli już istnieje".If Key Vault has already been added to the role on your storage account, you'll receive a "The role assignment already exists." .error. Możesz również sprawdzić przypisanie roli, korzystając ze strony konta magazynu "Kontrola dostępu (IAM)" w Azure Portal.You can also verify the role assignment, using the storage account "Access control (IAM)" page in the Azure portal.

Nadaj kontu użytkownika uprawnienia do kont magazynu zarządzanegoGive your user account permission to managed storage accounts

Użyj Azure PowerShell cmdlet Set-AzKeyVaultAccessPolicy, aby zaktualizować zasady dostępu Key Vault magazynu i udzielić uprawnień konta magazynu do konta użytkownika.Use the Azure PowerShell Set-AzKeyVaultAccessPolicy cmdlet to update the Key Vault access policy and grant storage account permissions to your user account.

# 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

Należy pamiętać, że uprawnienia dla kont magazynu nie są dostępne na stronie "Zasady dostępu" konta magazynu w Azure Portal.Note that permissions for storage accounts aren't available on the storage account "Access policies" page in the Azure portal.

Dodawanie zarządzanego konta magazynu do Key Vault magazynuAdd a managed storage account to your Key Vault instance

Użyj Azure PowerShell cmdlet Add-AzKeyVaultManagedStorageAccount, aby utworzyć konto magazynu zarządzanego w Key Vault wystąpienia.Use the Azure PowerShell Add-AzKeyVaultManagedStorageAccount cmdlet to create a managed storage account in your Key Vault instance. Przełącznik -DisableAutoRegenerateKey określa WARTOŚĆ NIE, aby ponownie wygenerować klucze konta magazynu.The -DisableAutoRegenerateKey switch specifies NOT to regenerate the storage account keys.

# 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 dodaniem konta magazynu bez potrzeby odtłaniania klucza powinny zostać wyświetlony dane wyjściowe podobne do następującego przykładu:Upon successful addition of the storage account with no key regeneration, you should see output similar to the following example:

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 funkcji regeneruj kluczEnable key regeneration

Jeśli chcesz Key Vault okresowego ponownego generowania kluczy konta magazynu, możesz użyć polecenia cmdlet Azure PowerShell Add-AzKeyVaultManagedStorageAccount, aby ustawić okres ponownego generowania.If you want Key Vault to regenerate your storage account keys periodically, you can use the Azure PowerShell Add-AzKeyVaultManagedStorageAccount cmdlet to set a regeneration period. W tym przykładzie ustawimy okres generyzację na trzy dni.In this example, we set a regeneration period of three days. Gdy jest czas rotacji, Key Vault ponownie generuje klucz, który nie jest aktywny, a następnie ustawia nowo utworzony klucz jako aktywny.When it is time to rotate, Key Vault regenerates the key that is not active, and then sets the newly created key as active. Tylko jeden z kluczy jest używany do wydawania tokenów SAS w dowolnym momencie.Only one of the keys are used to issue SAS tokens at any one time. Jest to klucz aktywny.This is the active key.

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

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

Po pomyślnym dodaniem konta magazynu przy użyciu regenerowanych kluczy powinny zostać wyświetlony dane wyjściowe podobne do następującego przykładu:Upon successful addition of the storage account with key regeneration, you should see output similar to the following example:

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 sygnatury dostępu współdzielonychShared access signature tokens

Możesz również poprosić Key Vault o wygenerowanie tokenów sygnatury dostępu współdzielonych.You can also ask Key Vault to generate shared access signature tokens. Sygnatura dostępu współdzielona zapewnia delegowany dostęp do zasobów na koncie magazynu.A shared access signature provides delegated access to resources in your storage account. Możesz udzielić klientom dostępu do zasobów na koncie magazynu bez udostępniania kluczy konta.You can grant clients access to resources in your storage account without sharing your account keys. Sygnatura dostępu współdzielona zapewnia bezpieczny sposób udostępniania zasobów magazynu bez naruszania kluczy konta.A shared access signature provides you with a secure way to share your storage resources without compromising your account keys.

Polecenia w tej sekcji wykonaj następujące czynności:The commands in this section complete the following actions:

  • Ustaw definicję sygnatury dostępu współdzielowego konta.Set an account shared access signature definition.
  • Utwórz token sygnatury dostępu współdzielonych dla usług Blob, File, Table i Queue.Create an account shared access signature token for Blob, File, Table, and Queue services. Token jest tworzony dla typów zasobów Service, Container i Object.The token is created for resource types Service, Container, and Object. Token jest tworzony ze wszystkimi uprawnieniami, za pośrednictwem protokołu HTTPS i z określonymi datami rozpoczęcia i zakończenia.The token is created with all permissions, over https, and with the specified start and end dates.
  • Ustaw Key Vault sygnatury dostępu współdzielonych magazynu zarządzanego w magazynie.Set a Key Vault managed storage shared access signature definition in the vault. Definicja zawiera szablon URI utworzonego tokenu sygnatury dostępu współdzielonych.The definition has the template URI of the shared access signature token that was created. Definicja ma typ sygnatury dostępu współdzielonych account i jest ważna przez N dni.The definition has the shared access signature type account and is valid for N days.
  • Sprawdź, czy sygnatura dostępu współdzielona została zapisana w magazynie kluczy jako klucz tajny.Verify that the shared access signature was saved in your key vault as a secret.

Ustawianie zmiennychSet variables

Najpierw ustaw zmienne, które mają być używane przez polecenia cmdlet programu PowerShell w poniższych krokach.First, set the variables to be used by the PowerShell cmdlets in the following steps. Pamiętaj, aby zaktualizować symbole zastępcze i .Be sure to update the and placeholders.

Użyjemy również polecenia cmdlet Azure PowerShell New-AzStorageContext w celu uzyskania kontekstu konta usługi Azure Storage.We will also use the Azure PowerShell New-AzStorageContext cmdlets to get the context of your Azure storage account.

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

$storageContext = New-AzStorageContext -StorageAccountName $storageAccountName -Protocol Https -StorageAccountKey Key1 #(or "Primary" for Classic Storage Account)

Tworzenie tokenu sygnatury dostępu współdzielonychCreate a shared access signature token

Utwórz definicję sygnatury dostępu współdzielonego przy użyciu Azure PowerShell cmdlet New-AzStorageAccountSASToken.Create a shared access signature definition using the Azure PowerShell New-AzStorageAccountSASToken cmdlets.

$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

Wartość właściwości $sasToken będzie wyglądać podobnie do tej.The value of $sasToken will look similar to this.

?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

Generowanie definicji sygnatury dostępu współdzielonychGenerate a shared access signature definition

Użyj polecenia cmdlet Set-Azure PowerShell AzKeyVaultManagedStorageSasDefinition, aby utworzyć definicję sygnatury dostępu współdzielonych.Use the the Azure PowerShell Set-AzKeyVaultManagedStorageSasDefinition cmdlet to create a shared access signature definition. Możesz podać nazwę dla wybranego -Name parametru.You can provide the name of your choice to the -Name parameter.

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

Weryfikowanie definicji sygnatury dostępu współdzielonychVerify the shared access signature definition

Możesz sprawdzić, czy definicja sygnatury dostępu współdzielonego została zapisana w magazynie kluczy przy użyciu polecenia cmdlet Azure PowerShell Get-AzKeyVaultSecret.You can verify that the shared access signature definition has been stored in your key vault using the Azure PowerShell Get-AzKeyVaultSecret cmdlet.

Najpierw znajdź definicję sygnatury dostępu współdzielonych w magazynie kluczy.First, find the shared access signature definition in your key vault.

Get-AzKeyVaultSecret -VaultName <YourKeyVaultName>

Klucz tajny odpowiadający definicji sygnatury dostępu współdzielonego będzie miał następujące właściwości:The secret corresponding to your SAS definition will have these properties:

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

Teraz możesz użyć polecenia cmdlet Get-AzKeyVaultSecret z parametrami i , aby wyświetlić VaultName zawartość tego klucza Name tajnego.You can now use the Get-AzKeyVaultSecret cmdlet with the VaultName and Name parameters to view the contents of that secret.

$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

Dane wyjściowe tego polecenia będą zawierały ciąg definicji sygnatury dostępu współdzielonego.The output of this command will show your SAS definition string.

Następne krokiNext steps