Verwalten von Speicherkontoschlüsseln mit Key Vault und Azure PowerShell (Legacy)

Wichtig

Mit Key Vault verwaltete Speicherkontoschlüssel (Legacy) werden in der aktuellen Version unterstützt. Es sind keine weiteren Updates geplant. Es werden nur noch Konto-SAS (Shared Access Signature) unterstützt, die einen mit SAS-Definitionen signierten Speicherdienst verwenden, dessen Version nicht höher als 2018-03-28 sein darf.

Wichtig

Wir empfehlen die Verwendung der Azure Storage-Integration in Microsoft Entra ID, dem cloudbasierten Identitäts- und Zugriffsverwaltungsdienst von Microsoft. Die Microsoft Entra-Integration ist für Azure-Blobs und -Warteschlangen verfügbar und bietet tokenbasierten OAuth2-Zugriff auf Azure Storage (genau wie Azure Key Vault). Microsoft Entra ID ermöglicht es Ihnen, Ihre Clientanwendung zu authentifizieren, indem Sie eine Anwendungs- oder Benutzeridentität anstelle von Speicherkontoanmeldeinformationen verwenden. Sie können eine von Microsoft Entra verwaltete Identität verwenden, wenn Sie Azure ausführen. Verwaltete Identitäten machen die Clientauthentifizierung und das Speichern von Anmeldeinformationen in oder mit Ihrer Anwendung überflüssig. Verwenden Sie diese Lösung nur, wenn keine Microsoft Entra-Authentifizierung möglich ist.

Ein Azure-Speicherkonto verwendet Anmeldeinformationen, die sich aus einem Kontonamen und einem Schlüssel zusammensetzen. Der Schlüssel wird automatisch generiert und fungiert eher als ein Kennwort denn als ein kryptografischer Schlüssel. Key Vault verwaltet Speicherkontoschlüssel, indem sie im Speicherkonto regelmäßig neu generiert werden, und stellt SAS-Token für den delegierten Zugriff auf Ressourcen in Ihrem Speicherkonto zur Verfügung.

Sie können das Key Vault-Feature für verwaltete Speicherkontoschlüssel verwenden, um Schlüssel für ein Azure Storage-Konto aufzulisten (synchronisieren) und die Schlüssel in regelmäßigen Abständen erneut zu generieren (rotieren). Sie können Schlüssel sowohl für Speicherkonten als auch für klassische Speicherkonten verwalten.

Wenn Sie das Feature für verwaltete Speicherkontoschlüssel verwenden, sollten Sie folgende Punkte beachten:

  • Schlüsselwerte werden nie als Antwort an einen Aufrufer zurückgegeben.
  • Ihre Speicherkontoschlüssel sollten nur durch Key Vault verwaltet werden. Verwalten Sie die Schlüssel nicht selbst, und vermeiden Sie es, die Key Vault-Prozesse zu beeinträchtigen.
  • Speicherkontoschlüssel sollten nur von einem einzigen Key Vault-Objekt verwaltet werden. Lassen Sie es nicht zu, dass die Schlüssel aus mehreren Objekten verwaltet werden.
  • Generieren Sie Schlüssel nur mit Key Vault neu. Generieren Sie Ihre Speicherkontoschlüssel nicht manuell neu.

Wichtig

Wird der Schlüssel direkt im Speicherkonto neu generiert, wird die Einrichtung des verwalteten Speicherkontos unterbrochen, und die verwendeten SAS-Tokens können ungültig werden und einen Ausfall verursachen.

Hinweis

Es wird empfohlen, das Azure Az PowerShell-Modul für die Interaktion mit Azure zu verwenden. Informationen zu den ersten Schritten finden Sie unter Installieren des Azure Az PowerShell-Moduls. Informationen zum Migrieren zum Az PowerShell-Modul finden Sie unter Migrieren von Azure PowerShell von AzureRM zum Az-Modul.

Dienstprinzipal-Anwendungs-ID

Ein Microsoft Entra-Mandant stellt jede registrierte Anwendung mit einem Dienstprinzipal bereit. Der Dienstprinzipal dient als die Anwendungs-ID, die während der Autorisierungseinrichtung verwendet wird, um über Azure RBAC auf andere Azure-Ressourcen zuzugreifen.

Key Vault ist eine Microsoft-Anwendung, die in allen Microsoft Entra-Mandanten vorinstalliert ist. Key Vault wird unter derselben Anwendungs-ID in jeder Azure-Cloud registriert.

Mandanten Cloud Anwendungs-ID
Microsoft Entra ID Azure Government 7e7c393b-45d0-48b1-a35e-2905ddf8183c
Microsoft Entra ID Azure, öffentlich cfa8b339-82a2-471a-a3c9-0fc0be7a4093
Andere Any cfa8b339-82a2-471a-a3c9-0fc0be7a4093

Voraussetzungen

Für diesen Leitfaden müssen Sie zunächst Folgendes ausführen:

Verwalten von Speicherkontoschlüsseln

Herstellen einer Verbindung mit Ihrem Azure-Konto

Authentifizieren Sie Ihre PowerShell-Sitzung mithilfe des Cmdlets Connect-AzAccount.

Connect-AzAccount

Wenn Sie über mehrere Azure-Abonnements verfügen, können Sie diese mithilfe des Cmdlets Get-AzSubscription auflisten und das Abonnement angeben, das Sie mit dem Cmdlet Set-AzContext verwenden möchten.

Set-AzContext -SubscriptionId <subscriptionId>

Festlegen von Variablen

Legen Sie zunächst in den folgenden Schritten die Variablen fest, die von den PowerShell-Cmdlets verwendet werden sollen. Achten Sie darauf, dass Sie die Platzhalter „YourResourceGroupName“, „YourStorageAccountName“ und „YourKeyVaultName“ aktualisieren und $keyVaultSpAppId auf cfa8b339-82a2-471a-a3c9-0fc0be7a4093 festlegen (wie in Dienstprinzipal-Anwendungs-ID angegeben).

Außerdem werden wir die Azure PowerShell-Cmdlets Get-AzContext und Get-AzStorageAccount verwenden, um Ihre Benutzer-ID und den Kontext Ihres Azure Storage-Kontos abzurufen.

$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

Hinweis

Verwenden Sie für ein klassisches Speicherkonto „primary“ und „secondary“ für $storageAccountKey.
Verwenden Sie „Get-AzResource -Name "ClassicStorageAccountName" -ResourceGroupName $resourceGroupName“ anstelle von „Get-AzStorageAccount“ für ein klassisches Speicherkonto.

Gewähren von Zugriff auf Ihr Speicherkonto für Key Vault

Damit Key Vault auf Ihre Speicherkontoschlüssel zugreifen und diese verwalten kann, müssen Sie Key Vault zum Zugriff auf Ihr Speicherkonto autorisieren. Die Key Vault-Anwendung benötigt die Berechtigungen zum Auflisten und Regenerieren von Schlüsseln für Ihr Speicherkonto. Diese Berechtigungen werden über die integrierte Azure-Rolle Dienstrolle „Speicherkonto-Schlüsseloperator“ aktiviert.

Verwenden Sie das Azure PowerShell-Cmdlet New-AzRoleAssignment, um dem Key Vault-Dienstprinzipal diese Rolle zuzuweisen und den Bereich auf Ihr Speicherkonto einzuschränken.

# 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

Nach erfolgreicher Rollenzuweisung sollten eine Ausgabe ähnlich wie im folgenden Beispiel angezeigt werden:

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

Wenn Key Vault bereits der Rolle für Ihr Speicherkonto zugewiesen wurde, erfolgt eine Fehlermeldung „Die Rollenzuweisung ist bereits vorhanden.“ Sie können die Rollenzuweisung auch im Azure-Portal über die Seite „Zugriffssteuerung (IAM)“ für das Speicherkonto überprüfen.

Gewähren von Benutzerkontoberechtigungen für verwaltete Speicherkonten

Verwenden Sie das Azure PowerShell-Cmdlet Set-AzKeyVaultAccessPolicy, um die Key Vault-Zugriffsrichtlinie zu aktualisieren und Ihrem Benutzerkonto Speicherkontoberechtigungen zu gewähren.

# 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

Die Berechtigungen für Speicherkonten sind auf der Seite „Zugriffsrichtlinien“ für Speicherkonten im Azure-Portal nicht verfügbar.

Hinzufügen eines verwalteten Speicherkontos zu Ihrer Key Vault-Instanz

Verwenden Sie das Azure PowerShell-Cmdlet Add-AzKeyVaultManagedStorageAccount, um ein verwaltetes Speicherkonto in der Key Vault-Instanz zu erstellen. Mit dem -DisableAutoRegenerateKeySchalter wird angegeben, dass die Speicherkontoschlüssel NICHT neu generiert werden.

# Add your storage account to your Key Vault's managed storage accounts

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

Nach dem erfolgreichen Hinzufügen des Speicherkontos ohne erneute Generierung der Schlüssel sollte eine ähnliche Ausgabe wie die im folgenden Beispiel angezeigt werden:

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                :

Aktivieren der erneuten Schlüsselgenerierung

Wenn die Speicherkontoschlüssel in regelmäßigen Abständen von Key Vault neu generiert werden sollen, können Sie das Azure PowerShell-Cmdlet Add-AzKeyVaultManagedStorageAccount verwenden, um einen Regenerierungszeitraum festzulegen. In diesem Beispiel legen wir einen Zeitraum für die erneute Generierung von 30 Tagen fest. Wenn es Zeit für die Rotation ist, generiert Key Vault den inaktiven Schlüssel erneut und legt den neu erstellten Schlüssel als aktiv fest. Der zum Ausgeben von SAS-Tokens verwendete Schlüssel ist der aktive Schlüssel.

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

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

Nach dem erfolgreichen Hinzufügen des Speicherkontos mit erneuter Generierung der Schlüssel sollte eine ähnliche Ausgabe wie die im folgenden Beispiel angezeigt werden:

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                :

SAS-Token (Shared Access Signature)

Sie können Key Vault auch anweisen, SAS-Tokens (Shared Access Signature) zu erstellen. Shared Access Signatures bieten delegierten Zugriff auf Ressourcen in Ihrem Speicherkonto. Sie können Clients Zugriff auf Ressourcen unter Ihrem Speicherkonto gewähren, ohne dafür Ihre Kontoschlüssel freigeben zu müssen. Eine SAS (Shared Access Signature) bietet Ihnen eine sichere Methode zur Freigabe Ihrer Speicherressourcen, ohne Ihre Kontoschlüssel zu gefährden.

Die Befehle in diesem Abschnitt führen Sie die folgenden Aktionen:

  • Legen Sie eine SAS-Definition für ein Konto fest.
  • Festlegen einer SAS-Definition für von Key Vault verwalteten Speicher im Tresor. Die Definition hat den Vorlagen-URI des SAS-Tokens, das erstellt wurde. Die Definition hat den SAS-Typ account und ist für N Tage gültig.
  • Vergewissern Sie sich, dass die SAS (Shared Access Signature) in Ihrem Schlüsseltresor als Geheimnis gespeichert wurde.

Festlegen von Variablen

Legen Sie zunächst in den folgenden Schritten die Variablen fest, die von den PowerShell-Cmdlets verwendet werden sollen. Achten Sie darauf, die Platzhalter <YourStorageAccountName> und < YourKeyVaultName> zu aktualisieren.

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

Definieren einer Definitionsvorlage einer SAS

Key Vault verwendet eine SAS-Definitionsvorlage, um Token für Clientanwendungen zu generieren.

Beispiel für eine SAS-Definitionsvorlage:

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

In der SAS-Definitionsvorlage für Key Vault erforderliche Konto-SAS-Parameter

SAS-Abfrageparameter BESCHREIBUNG
SignedVersion (sv) Erforderlich. Gibt die signierte Speicherdienstversion an, mit der Anforderungen autorisiert werden sollen, die mit dieser Konto-SAS gesendet werden. Muss auf Version 2015-04-05 oder höher festgelegt werden. Key Vault unterstützt keine Versionen, die höher als 2018-03-28 sind.
SignedServices (ss) Erforderlich. Gibt die signierten Dienste an, auf die mit der Konto-SAS zugegriffen werden kann. Mögliche Werte sind:

– Blob (b)
– Warteschlange: (q)
– Tabelle (t)
– Datei (f)

Sie können Werte kombinieren, um Zugriff auf mehr als einen Dienst bereitzustellen. ss=bf gibt beispielsweise den Zugriff auf die Blob- und Dateiendpunkte an.
SignedResourceTypes (srt) Erforderlich. Gibt die signierten Ressourcentypen an, auf die mit der Konto-SAS zugegriffen werden kann.

- Dienst (s): Zugriff auf APIs auf Dienstebene (z. B. Diensteigenschaften abrufen/einstellen, Dienststatistiken abrufen, Container/Warteschlangen/Tabellen/Freigaben auflisten)
- Container (c): Zugriff auf APIs auf Containerebene (z. B. Container erstellen/löschen, Warteschlange erstellen/löschen, Tabelle erstellen/löschen, Freigabe erstellen/löschen, Blobs/Dateien und Verzeichnisse auflisten)
- Objekt (o): Zugriff auf APIs auf Objektebene für Blobs, Warteschlangennachrichten, Tabellenentitäten und Dateien (z. B. Blob ablegen, Entität abfragen, Nachrichten abrufen, Datei erstellen usw.)

Sie können Werte kombinieren, um Zugriff auf mehrere Ressourcentypen bereitzustellen. srt=sc gibt beispielsweise den Zugriff auf Dienst- und Containerressourcen an.
SignedPermission (sp) Erforderlich. Gibt die signierten Berechtigungen für die Konto-SAS an. Berechtigungen sind nur gültig, wenn sie dem angegebenen signierten Ressourcentyp entsprechen. Andernfalls werden sie ignoriert.

– Lesen (r): Gültig für alle signierten Ressourcentypen (Dienst, Container und Objekt). Erteilt Leseberechtigungen für den angegebenen Ressourcentyp.
– Schreiben (w): Gültig für alle signierten Ressourcentypen (Dienst, Container und Objekt). Erteilt Schreibberechtigungen für den angegebenen Ressourcentyp.
– Löschen (d): Gültig für Ressourcentypen „Container“ und „Objekt“, außer für Warteschlangennachrichten
– Dauerhaft löschen (y): Gilt nur für den Objektressourcentyp des Blobs
– Auflisten (l): Gilt nur für Ressourcentypen „Dienst“ und „Container“
– Hinzufügen (a): Gültig nur für die folgenden Objektressourcentypen: Warteschlangennachrichten, Tabellenentitäten und Anfügen von Blobs
– Erstellen (c): Gilt nur für die folgenden Objektressourcentypen: Blobs und Dateien. Benutzer*innen können neue Blobs oder Dateien erstellen, aber vorhandene Blobs oder Dateien möglicherweise nicht überschreiben.
– Aktualisieren (u): Gilt nur für die folgenden Objektressourcentypen: Warteschlangenmeldungen und Tabellenentitäten
– Verarbeiten (p): Gilt nur für den folgenden Objektressourcentyp: Warteschlangennachrichten
– Taggen(t): Gilt nur für den folgenden Objektressourcentyp: Blob. Lässt Blob-Tagging-Vorgänge zu.
– Filtern (f): Gilt nur für den folgenden Objektressourcentyp: Blob. Lässt das Filtern nach Blob-Tag zu.
– Festlegen der Unveränderlichkeitsrichtlinie (i): Gültig nur für den folgenden Objektressourcentyp: Blob. Lässt das Festlegen/Löschen von Unveränderlichkeitsrichtlinien und der gesetzlichen Sperre eines Blobs zu.
SignedProtocol (spr) Dies ist optional. Gibt das zugelassene Protokoll für eine Anforderung mit der Konto-SAS an. Mögliche Werte sind HTTPS und HTTP (https,http) oder nur HTTPS (https). Standardwert: https,http.

Nur-HTTP ist kein zulässiger Wert.

Weitere Informationen über die Konto-AS finden Sie unter Erstellen einer Konto-SAS.

Hinweis

Key Vault ignoriert Lebensdauerparameter wie „Signed Expiry“ (Signiertes Ablaufdatum), „Signed Start“ (Signiertes Startdatum) sowie Parameter, die nach Version 2018-03-28 eingeführt wurden.

Festlegen der SAS-Definition in Key Vault

Verwenden Sie das Azure PowerShell-Cmdlet Set-AzKeyVaultManagedStorageSasDefinition, um eine freigegebene Definition für die Zugriffssignatur zu erstellen. Sie können einen Namen Ihrer Wahl für den Parameter -Name angeben.

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

Überprüfen der SAS-Definition

Mithilfe des Azure PowerShell-Cmdlets Get-AzKeyVaultSecret können Sie überprüfen, ob die SAS-Definition in Ihrem Schlüsseltresor gespeichert wurde.

Suchen Sie zunächst die SAS-Definition in Ihrem Schlüsseltresor.

Get-AzKeyVaultSecret -VaultName <YourKeyVaultName>

Das Geheimnis, das Ihrer SAS-Definition entspricht, weist die folgenden Eigenschaften auf:

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

Sie können jetzt das Cmdlet Get-AzKeyVaultSecret und mit den Parametern VaultName und Name verwenden, um den Inhalt dieses Geheimnisses anzuzeigen.

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

Die Ausgabe dieses Befehls zeigt die Zeichenfolge Ihrer SAS-Definition an.

Nächste Schritte