Konfigurowanie kluczy zarządzanych przez klienta na potrzeby szyfrowania danych usługi Azure Service Bus magazynowanych

Usługa Azure Service Bus Premium zapewnia szyfrowanie danych magazynowanych przy użyciu usługi Azure Storage Service Encryption (Azure SSE). Usługa Service Bus Premium używa usługi Azure Storage do przechowywania danych. Wszystkie dane przechowywane w usłudze Azure Storage są szyfrowane przy użyciu kluczy zarządzanych przez firmę Microsoft. Jeśli używasz własnego klucza (określanego również jako Bring Your Own Key (BYOK) lub klucza zarządzanego przez klienta, dane są nadal szyfrowane przy użyciu klucza zarządzanego przez firmę Microsoft, ale dodatkowo klucz zarządzany przez firmę Microsoft jest szyfrowany przy użyciu klucza zarządzanego przez klienta. Ta funkcja umożliwia tworzenie, obracanie, wyłączanie i odwoływanie dostępu do kluczy zarządzanych przez klienta, które są używane do szyfrowania kluczy zarządzanych przez firmę Microsoft. Włączenie funkcji BYOK jest jednorazowym procesem konfiguracji w przestrzeni nazw.

Istnieją pewne zastrzeżenia dotyczące klucza zarządzanego przez klienta na potrzeby szyfrowania po stronie usługi.

  • Ta funkcja jest obsługiwana przez warstwę Premium usługi Azure Service Bus. Nie można jej włączyć dla przestrzeni nazw usługi Service Bus w warstwie Standardowa.
  • Szyfrowanie można włączyć tylko dla nowych lub pustych przestrzeni nazw. Jeśli przestrzeń nazw zawiera jakiekolwiek kolejki lub tematy, operacja szyfrowania zakończy się niepowodzeniem.

Za pomocą usługi Azure Key Vault możesz zarządzać kluczami i przeprowadzać inspekcję użycia kluczy. Możesz utworzyć własne klucze i przechowywać je w magazynie kluczy lub użyć interfejsów API usługi Azure Key Vault do generowania kluczy. Aby uzyskać więcej informacji na temat usługi Azure Key Vault, zobacz Co to jest usługa Azure Key Vault?

Włączanie kluczy zarządzanych przez klienta (witryna Azure Portal)

Aby włączyć klucze zarządzane przez klienta w witrynie Azure Portal, wykonaj następujące kroki:

  1. Przejdź do przestrzeni nazw usługi Service Bus Premium.

  2. Na stronie Ustawienia przestrzeni nazw usługi Service Bus wybierz pozycję Szyfrowanie.

  3. Wybierz szyfrowanie kluczy zarządzanych przez klienta magazynowanych, jak pokazano na poniższej ilustracji.

    Enable customer managed key

Konfigurowanie magazynu kluczy przy użyciu kluczy

Po włączeniu kluczy zarządzanych przez klienta należy skojarzyć klucz zarządzany przez klienta z przestrzenią nazw usługi Azure Service Bus. Usługa Service Bus obsługuje tylko usługę Azure Key Vault. Jeśli włączysz opcję Szyfrowanie przy użyciu klucza zarządzanego przez klienta w poprzedniej sekcji, musisz zaimportować klucz do usługi Azure Key Vault. Ponadto klucze muszą mieć nietrwałe usuwanie i nie przeczyszczać skonfigurowane dla klucza. Te ustawienia można skonfigurować przy użyciu programu PowerShell lub interfejsu wiersza polecenia.

  1. Aby utworzyć nowy magazyn kluczy, postępuj zgodnie z przewodnikiem Szybki start usługi Azure Key Vault. Aby uzyskać więcej informacji na temat importowania istniejących kluczy, zobacz Informacje o kluczach, wpisach tajnych i certyfikatach.

    Ważne

    Używanie kluczy zarządzanych przez klienta z usługą Azure Service Bus wymaga skonfigurowania dwóch wymaganych właściwości magazynu kluczy. Są to: usuwanie nietrwałe i nie przeczyszczanie. Właściwość Usuwanie nietrwałe jest domyślnie włączona podczas tworzenia nowego magazynu kluczy w witrynie Azure Portal, natomiast ochrona przed przeczyszczeniem jest opcjonalna, dlatego upewnij się, że została wybrana podczas tworzenia usługi Key Vault. Ponadto jeśli chcesz włączyć te właściwości w istniejącym magazynie kluczy, musisz użyć programu PowerShell lub interfejsu wiersza polecenia platformy Azure.

  2. Aby włączyć zarówno usuwanie nietrwałe, jak i ochronę przed przeczyszczeniem podczas tworzenia magazynu, użyj polecenia az keyvault create .

    az keyvault create --name contoso-SB-BYOK-keyvault --resource-group ContosoRG --location westus --enable-soft-delete true --enable-purge-protection true
    
  3. Aby dodać ochronę przed przeczyszczeniem do istniejącego magazynu (który ma już włączone usuwanie nietrwałe), użyj polecenia az keyvault update .

    az keyvault update --name contoso-SB-BYOK-keyvault --resource-group ContosoRG --enable-purge-protection true
    
  4. Utwórz klucze, wykonując następujące kroki:

    1. Aby utworzyć nowy klucz, wybierz pozycję Generuj/Importuj z menu Klucze w obszarze Ustawienia.

      Select Generate/Import button

    2. Ustaw pozycję Opcje na Generuj i nadaj kluczowi nazwę.

      Create a key

    3. Teraz możesz wybrać ten klucz do skojarzenia z przestrzenią nazw usługi Service Bus na potrzeby szyfrowania z listy rozwijanej.

      Select key from key vault

      Uwaga

      W celu zapewnienia nadmiarowości można dodać maksymalnie 3 klucze. W przypadku, gdy jeden z kluczy wygasł lub nie jest dostępny, inne klucze będą używane do szyfrowania.

    4. Wypełnij szczegóły klucza, a następnie kliknij pozycję Wybierz. Umożliwia to szyfrowanie klucza zarządzanego przez firmę Microsoft przy użyciu klucza (klucza zarządzanego przez klienta).

    Ważne

    Jeśli chcesz użyć klucza zarządzanego przez klienta wraz z odzyskiwaniem po awarii geograficznej, zapoznaj się z tą sekcją.

    Aby włączyć szyfrowanie klucza zarządzanego przez firmę Microsoft przy użyciu klucza zarządzanego przez klienta, zasady dostępu są konfigurowane dla tożsamości zarządzanej usługi Service Bus w określonej usłudze Azure KeyVault. Zapewnia to kontrolowany dostęp do usługi Azure KeyVault z przestrzeni nazw usługi Azure Service Bus.

    Ze względu na to:

    • Jeśli odzyskiwanie po awarii geograficznej jest już włączone dla przestrzeni nazw usługi Service Bus i chcesz włączyć klucz zarządzany przez klienta, to

      • Przerywanie parowania
      • Skonfiguruj zasady dostępu dla tożsamości zarządzanej zarówno dla podstawowych, jak i pomocniczych przestrzeni nazw w magazynie kluczy.
      • Skonfiguruj szyfrowanie w podstawowej przestrzeni nazw.
      • Ponownie połącz podstawowe i pomocnicze przestrzenie nazw.
    • Jeśli chcesz włączyć geograficzną odzyskiwanie po awarii w przestrzeni nazw usługi Service Bus, w której jest już skonfigurowany klucz zarządzany przez klienta, to —

      • Skonfiguruj zasady dostępu dla tożsamości zarządzanej dla pomocniczej przestrzeni nazw w magazynie kluczy.
      • Parowanie podstawowych i pomocniczych przestrzeni nazw.
    • Po sparowaniu pomocnicza przestrzeń nazw będzie używać magazynu kluczy skonfigurowanego dla podstawowej przestrzeni nazw. Jeśli magazyn kluczy dla obu przestrzeni nazw różni się przed parowaniem geo-dr, użytkownik musi delegować zasady dostępu lub rolę RBAC dla tożsamości zarządzanej pomocniczej przestrzeni nazw w magazynie kluczy skojarzonym z podstawową przestrzenią nazw.

Tożsamości zarządzane

Istnieją dwa typy tożsamości zarządzanych, które można przypisać do przestrzeni nazw usługi Service Bus.

  • Przypisane przez system: tożsamość zarządzana można włączyć bezpośrednio w przestrzeni nazw usługi Service Bus. Po włączeniu tożsamości zarządzanej przypisanej przez system tożsamość jest tworzona w usłudze Microsoft Entra, która jest powiązana z cyklem życia tej przestrzeni nazw usługi Service Bus. Dlatego po usunięciu przestrzeni nazw platforma Azure automatycznie usunie tożsamość. Zgodnie z projektem tylko ten zasób platformy Azure (przestrzeń nazw) może używać tej tożsamości do żądania tokenów z identyfikatora Entra firmy Microsoft.

  • Przypisane przez użytkownika: możesz również utworzyć tożsamość zarządzaną jako autonomiczny zasób platformy Azure, który jest nazywany tożsamością przypisaną przez użytkownika. Tożsamość zarządzaną przypisaną przez użytkownika można utworzyć i przypisać ją do co najmniej jednej przestrzeni nazw usługi Service Bus. W przypadku korzystania z tożsamości zarządzanych przypisanych przez użytkownika tożsamość jest zarządzana oddzielnie od zasobów, które go używają. Nie są one powiązane z cyklem życia przestrzeni nazw. Możesz jawnie usunąć tożsamość przypisaną przez użytkownika, gdy nie jest już potrzebna.

    Aby uzyskać więcej informacji, zobacz Czym są tożsamości zarządzane dla zasobów platformy Azure?.

Szyfrowanie przy użyciu tożsamości przypisanych przez system (szablon)

W tej sekcji przedstawiono sposób wykonywania następujących zadań:

  1. Utwórz przestrzeń nazw usługi Service Bus w warstwie Premium z tożsamością usługi zarządzanej.
  2. Utwórz magazyn kluczy i przyznaj tożsamości usługi dostęp do magazynu kluczy.
  3. Zaktualizuj przestrzeń nazw usługi Service Bus przy użyciu informacji o magazynie kluczy (klucz/wartość).

Tworzenie przestrzeni nazw usługi Service Bus w warstwie Premium z tożsamością usługi zarządzanej

W tej sekcji pokazano, jak utworzyć przestrzeń nazw usługi Azure Service Bus z tożsamością usługi zarządzanej przy użyciu szablonu usługi Azure Resource Manager i programu PowerShell.

  1. Utwórz szablon usługi Azure Resource Manager, aby utworzyć przestrzeń nazw warstwy Premium usługi Service Bus z tożsamością usługi zarządzanej. Nadaj plikowi nazwę: CreateServiceBusPremiumNamespace.json:

    {
       "$schema":"https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
       "contentVersion":"1.0.0.0",
       "parameters":{
          "namespaceName":{
             "type":"string",
             "metadata":{
                "description":"Name for the Namespace."
             }
          },
          "location":{
             "type":"string",
             "defaultValue":"[resourceGroup().location]",
             "metadata":{
                "description":"Specifies the Azure location for all resources."
             }
          }
       },
       "resources":[
          {
             "type":"Microsoft.ServiceBus/namespaces",
             "apiVersion":"2018-01-01-preview",
             "name":"[parameters('namespaceName')]",
             "location":"[parameters('location')]",
             "identity":{
                "type":"SystemAssigned"
             },
             "sku":{
                "name":"Premium",
                "tier":"Premium",
                "capacity":1
             },
             "properties":{
    
             }
          }
       ],
       "outputs":{
          "ServiceBusNamespaceId":{
             "type":"string",
             "value":"[resourceId('Microsoft.ServiceBus/namespaces',parameters('namespaceName'))]"
          }
       }
    }
    
  2. Utwórz plik parametrów szablonu o nazwie: CreateServiceBusPremiumNamespaceParams.json.

    Uwaga

    Zastąp następujące wartości:

    • <ServiceBusNamespaceName> - Nazwa przestrzeni nazw usługi Service Bus
    • <Location> - Lokalizacja przestrzeni nazw usługi Service Bus
    {
       "$schema":"https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
       "contentVersion":"1.0.0.0",
       "parameters":{
          "namespaceName":{
             "value":"<ServiceBusNamespaceName>"
          },
          "location":{
             "value":"<Location>"
          }
       }
    }
    
  3. Uruchom następujące polecenie programu PowerShell, aby wdrożyć szablon w celu utworzenia przestrzeni nazw usługi Service Bus w warstwie Premium. Następnie pobierz identyfikator przestrzeni nazw usługi Service Bus, aby użyć jej później. Zastąp {MyRG} ciąg nazwą grupy zasobów przed uruchomieniem polecenia .

    $outputs = New-AzResourceGroupDeployment -Name CreateServiceBusPremiumNamespace -ResourceGroupName {MyRG} -TemplateFile ./CreateServiceBusPremiumNamespace.json -TemplateParameterFile ./CreateServiceBusPremiumNamespaceParams.json
    
    $ServiceBusNamespaceId = $outputs.Outputs["serviceBusNamespaceId"].value
    

Udzielanie tożsamości przestrzeni nazw usługi Service Bus dostępu do magazynu kluczy

  1. Uruchom następujące polecenie, aby utworzyć magazyn kluczy z włączoną ochroną przed przeczyszczeniem i usuwaniem nietrwałym.

    New-AzureRmKeyVault -Name "{keyVaultName}" -ResourceGroupName {RGName}  -Location "{location}" -EnableSoftDelete -EnablePurgeProtection    
    

    (LUB)

    Uruchom następujące polecenie, aby zaktualizować istniejący magazyn kluczy. Przed uruchomieniem polecenia określ wartości dla nazw grupy zasobów i magazynu kluczy.

    ($updatedKeyVault = Get-AzureRmResource -ResourceId (Get-AzureRmKeyVault -ResourceGroupName {RGName} -VaultName {keyVaultName}).ResourceId).Properties| Add-Member -MemberType "NoteProperty" -Name "enableSoftDelete" -Value "true"-Force | Add-Member -MemberType "NoteProperty" -Name "enablePurgeProtection" -Value "true" -Force
    
  2. Ustaw zasady dostępu do magazynu kluczy, aby tożsamość zarządzana przestrzeni nazw usługi Service Bus mogła uzyskać dostęp do wartości klucza w magazynie kluczy. Użyj identyfikatora przestrzeni nazw usługi Service Bus z poprzedniej sekcji.

    $identity = (Get-AzureRmResource -ResourceId $ServiceBusNamespaceId -ExpandProperties).Identity
    
    Set-AzureRmKeyVaultAccessPolicy -VaultName {keyVaultName} -ResourceGroupName {RGName} -ObjectId $identity.PrincipalId -PermissionsToKeys get,wrapKey,unwrapKey,list
    

Szyfrowanie danych w przestrzeni nazw usługi Service Bus przy użyciu klucza zarządzanego przez klienta z magazynu kluczy

Wykonano następujące kroki do tej pory:

  1. Utworzono przestrzeń nazw w warstwie Premium z tożsamością zarządzaną.
  2. Utwórz magazyn kluczy i przyznaj tożsamości zarządzanej dostęp do magazynu kluczy.

W tym kroku zaktualizujesz przestrzeń nazw usługi Service Bus przy użyciu informacji o magazynie kluczy.

  1. Utwórz plik JSON o nazwie UpdateServiceBusNamespaceWithEncryption.json z następującą zawartością:

    {
       "$schema":"https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
       "contentVersion":"1.0.0.0",
       "parameters":{
          "namespaceName":{
             "type":"string",
             "metadata":{
                "description":"Name for the Namespace to be created in cluster."
             }
          },
          "location":{
             "type":"string",
             "defaultValue":"[resourceGroup().location]",
             "metadata":{
                "description":"Specifies the Azure location for all resources."
             }
          },
          "keyVaultUri":{
             "type":"string",
             "metadata":{
                "description":"URI of the KeyVault."
             }
          },
          "keyName":{
             "type":"string",
             "metadata":{
                "description":"KeyName."
             }
          }
       },
       "resources":[
          {
             "type":"Microsoft.ServiceBus/namespaces",
             "apiVersion":"2018-01-01-preview",
             "name":"[parameters('namespaceName')]",
             "location":"[parameters('location')]",
             "identity":{
                "type":"SystemAssigned"
             },
             "sku":{
                "name":"Premium",
                "tier":"Premium",
                "capacity":1
             },
             "properties":{
                "encryption":{
                   "keySource":"Microsoft.KeyVault",
                   "keyVaultProperties":[
                      {
                         "keyName":"[parameters('keyName')]",
                         "keyVaultUri":"[parameters('keyVaultUri')]"
                      }
                   ]
                }
             }
          }
       ]
    }
    
  2. Utwórz plik parametrów szablonu: UpdateServiceBusNamespaceWithEncryptionParams.json.

    Uwaga

    Zastąp następujące wartości:

    • <ServiceBusNamespaceName> - Nazwa przestrzeni nazw usługi Service Bus
    • <Location> - Lokalizacja przestrzeni nazw usługi Service Bus
    • <KeyVaultName> - Nazwa magazynu kluczy
    • <KeyName> - Nazwa klucza w magazynie kluczy
    {
       "$schema":"https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
       "contentVersion":"1.0.0.0",
       "parameters":{
          "namespaceName":{
             "value":"<ServiceBusNamespaceName>"
          },
          "location":{
             "value":"<Location>"
          },
          "keyName":{
             "value":"<KeyName>"
          },
          "keyVaultUri":{
             "value":"https://<KeyVaultName>.vault.azure.net"
          }
       }
    }
    
  3. Uruchom następujące polecenie programu PowerShell, aby wdrożyć szablon usługi Resource Manager. Zastąp {MyRG} ciąg nazwą grupy zasobów przed uruchomieniem polecenia .

    New-AzResourceGroupDeployment -Name UpdateServiceBusNamespaceWithEncryption -ResourceGroupName {MyRG} -TemplateFile ./UpdateServiceBusNamespaceWithEncryption.json -TemplateParameterFile ./UpdateServiceBusNamespaceWithEncryptionParams.json
    

Szyfrowanie przy użyciu tożsamości przypisanych przez użytkownika (szablon)

  1. Utwórz tożsamość przypisaną przez użytkownika.
  2. Utwórz magazyn kluczy i przyznaj dostęp do tożsamości przypisanej przez użytkownika za pośrednictwem zasad dostępu.
  3. Utwórz przestrzeń nazw usługi Service Bus w warstwie Premium z zarządzaną tożsamością użytkownika i informacjami o magazynie kluczy.

Tworzenie tożsamości przypisanej przez użytkownika

Postępuj zgodnie z instrukcjami w artykule Tworzenie tożsamości zarządzanej przypisanej przez użytkownika, aby utworzyć tożsamość przypisaną przez użytkownika. Tożsamość przypisaną przez użytkownika można również utworzyć przy użyciu interfejsu wiersza polecenia, programu PowerShell, szablonu usługi Azure Resource Manager i interfejsu REST.

Uwaga

Do przestrzeni nazw można przypisać maksymalnie 4 tożsamości użytkowników. Te skojarzenia są usuwane, gdy przestrzeń nazw zostanie usunięta lub gdy przekażesz identity -> type element w szablonie do None.

Tworzenie magazynu kluczy i udzielanie dostępu do tożsamości przypisanej przez użytkownika

  1. Uruchom następujące polecenie, aby utworzyć magazyn kluczy z włączoną ochroną przed przeczyszczeniem i usuwaniem nietrwałym.

    New-AzureRmKeyVault -Name "{keyVaultName}" -ResourceGroupName {RGName} -Location "{location}" -EnableSoftDelete -EnablePurgeProtection           
    

    (LUB)

    Uruchom następujące polecenie, aby zaktualizować istniejący magazyn kluczy. Przed uruchomieniem polecenia określ wartości dla nazw grupy zasobów i magazynu kluczy.

    ($updatedKeyVault = Get-AzureRmResource -ResourceId (Get-AzureRmKeyVault -ResourceGroupName {RGName} -VaultName {keyVaultName}).ResourceId).Properties| Add-Member -MemberType "NoteProperty" -Name "enableSoftDelete" -Value "true"-Force | Add-Member -MemberType "NoteProperty" -Name "enablePurgeProtection" -Value "true" -Force            
    
  2. Pobierz identyfikator jednostki usługi dla tożsamości użytkownika przy użyciu następującego polecenia programu PowerShell. W tym przykładzie ud1 jest tożsamość przypisana przez użytkownika do użycia na potrzeby szyfrowania.

    $servicePrincipal=Get-AzADServicePrincipal -SearchString "ud1"    
    
  3. Udziel tożsamości przypisanej przez użytkownika dostępu do magazynu kluczy, przypisując zasady dostępu.

    Set-AzureRmKeyVaultAccessPolicy -VaultName {keyVaultName} -ResourceGroupName {RGName} -ObjectId $servicePrincipal.Id -PermissionsToKeys get,wrapKey,unwrapKey,list    
    

    Uwaga

    Można dodać maksymalnie 3 klucze, ale tożsamość użytkownika używana do szyfrowania powinna być taka sama dla wszystkich kluczy. Obecnie obsługiwana jest tylko pojedyncza tożsamość szyfrowania.

Tworzenie przestrzeni nazw usługi Service Bus w warstwie Premium z informacjami o tożsamości użytkownika i magazynie kluczy

W tej sekcji przedstawiono przykład, w którym pokazano, jak wykonać następujące zadania przy użyciu szablonu usługi Azure Resource Manager.

  • Przypisywanie tożsamości zarządzanej przez użytkownika do przestrzeni nazw usługi Service Bus.

                "identity": {
                    "type": "UserAssigned",
                    "userAssignedIdentities": {
                        "[parameters('identity').userAssignedIdentity]": {}
                    }
                },
    
  • Włącz szyfrowanie w przestrzeni nazw, określając klucz z magazynu kluczy i tożsamość zarządzaną przez użytkownika w celu uzyskania dostępu do klucza.

                    "encryption":{
                       "keySource":"Microsoft.KeyVault",
                       "keyVaultProperties":[
                            {
                                "keyName": "[parameters('keyName')]",
                                "keyVaultUri": "[parameters('keyVaultUri')]",
                                "identity": {
                                    "userAssignedIdentity": "[parameters('identity').userAssignedIdentity]"
                                }
                            }
                       ]
                    }
    
  1. Utwórz plik JSON o nazwie CreateServiceBusNamespaceWithUserIdentityAndEncryption.json o następującej zawartości:

    {
       "$schema":"https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
       "contentVersion":"1.0.0.0",
       "parameters":{
          "namespaceName":{
             "type":"string",
             "metadata":{
                "description":"Name for the Namespace to be created in cluster."
             }
          },
          "location":{
             "type":"string",
             "defaultValue":"[resourceGroup().location]",
             "metadata":{
                "description":"Specifies the Azure location for all resources."
             }
          },
          "keyVaultUri":{
             "type":"string",
             "metadata":{
                "description":"URI of the KeyVault."
             }
          },
          "keyName":{
             "type":"string",
             "metadata":{
                "description":"KeyName."
             },
         "identity": {
            "type": "Object",
            "defaultValue": {
                "userAssignedIdentity": ""
            },
            "metadata": {
                "description": "user-assigned identity."
            }
         }
       },
       "resources":[
          {
             "type":"Microsoft.ServiceBus/namespaces",
             "apiVersion":"2021-01-01-preview",
             "name":"[parameters('namespaceName')]",
             "location":"[parameters('location')]",
             "sku":{
                "name":"Premium",
                "tier":"Premium",
                "capacity":1
             },
            "identity": {
                "type": "UserAssigned",
                "userAssignedIdentities": {
                    "[parameters('identity').userAssignedIdentity]": {}
                }
            },
             "properties":{
                "encryption":{
                   "keySource":"Microsoft.KeyVault",
                   "keyVaultProperties":[
                        {
                            "keyName": "[parameters('keyName')]",
                            "keyVaultUri": "[parameters('keyVaultUri')]",
                            "identity": {
                                "userAssignedIdentity": "[parameters('identity').userAssignedIdentity]"
                            }
                        }
                   ]
                }
             }
          }
       ]
    }        
    
  2. Utwórz plik parametrów szablonu: CreateServiceBusNamespaceWithUserIdentityAndEncryptionParams.json.

    {
       "$schema":"https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
       "contentVersion":"1.0.0.0",
       "parameters":{
          "namespaceName":{
             "value":"<ServiceBusNamespaceName>"
          },
          "location":{
             "value":"<Location>"
          },
          "keyVaultUri":{
             "value":"https://<KeyVaultName>.vault.azure.net"
          },
          "keyName":{
             "value":"<KeyName>"
          },
          "identity": {
            "value": {
                "userAssignedIdentity": "/subscriptions/<AZURE SUBSCRIPTION ID>/resourceGroups/<RESOURCE GROUP NAME>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<USER MANAGED IDENTITY NAME>"
            }
         }
       }
    }
    

    W pliku parametrów zastąp symbole zastępcze odpowiednimi wartościami.

    Symbol zastępczy wartość
    <ServiceBusNamespaceName> Nazwa przestrzeni nazw usługi Service Bus.
    <Location> Lokalizacja, w której ma zostać utworzona przestrzeń nazw.
    <KeyVaultName> Nazwa magazynu kluczy.
    <KeyName> Nazwa klucza w magazynie kluczy.
    <AZURE SUBSCRIPTION ID> Identyfikator subskrypcji platformy Azure.
    <RESOURCE GROUP NAME> Grupa zasobów tożsamości zarządzanej przez użytkownika.
    <USER MANAGED IDENTITY NAME> Nazwa tożsamości zarządzanej przez użytkownika.
  3. Uruchom następujące polecenie programu PowerShell, aby wdrożyć szablon usługi Resource Manager. Zastąp {MyRG} ciąg nazwą grupy zasobów przed uruchomieniem polecenia .

    New-AzResourceGroupDeployment -Name CreateServiceBusNamespaceWithEncryption -ResourceGroupName {MyRG} -TemplateFile ./ CreateServiceBusNamespaceWithUserIdentityAndEncryption.json -TemplateParameterFile ./ CreateServiceBusNamespaceWithUserIdentityAndEncryptionParams.json        
    

Używanie tożsamości przypisanych przez użytkownika i przypisanych przez system

Przestrzeń nazw może mieć jednocześnie przypisane przez system i przypisane przez użytkownika tożsamości. W tym przypadku type właściwość będzie miała SystemAssignedwartość , UserAssigned jak pokazano w poniższym przykładzie.

"identity": {
    "type": "SystemAssigned, UserAssigned",
    "userAssignedIdentities": {
        "/subscriptions/<SUBSCRIPTION ID>/resourceGroups/<RESOURCE GROUP>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<userIdentity1>" : {}
    }
}

W tym scenariuszu można wybrać tożsamość przypisaną przez system lub tożsamość przypisaną przez użytkownika do szyfrowania danych magazynowanych.

W szablonie usługi Resource Manager, jeśli nie określisz identity atrybutu, zostanie użyta tożsamość zarządzana przez system. Oto przykładowy fragment kodu.

"properties":{
   "encryption":{
      "keySource":"Microsoft.KeyVault",
      "keyVaultProperties":[
         {
            "keyName":"[parameters('keyName')]",
            "keyVaultUri":"[parameters('keyVaultUri')]"
         }
      ]
   }
}

Zobacz poniższy przykład użycia tożsamości zarządzanej przez użytkownika na potrzeby szyfrowania. Zwróć uwagę, że identity atrybut jest ustawiony na tożsamość zarządzaną przez użytkownika.

"properties":{
   "encryption":{
      "keySource":"Microsoft.KeyVault",
      "keyVaultProperties":[
         {
            "keyName":"[parameters('keyName')]",
            "keyVaultUri":"[parameters('keyVaultUri')]",
            "identity": {
                "userAssignedIdentity": "[parameters('identity').userAssignedIdentity]"
            }
         }
      ]
   }
}

Włączanie szyfrowania danych za pomocą infrastruktury (podwójnej)

Jeśli potrzebujesz wyższego poziomu pewności, że dane są bezpieczne, możesz włączyć szyfrowanie na poziomie infrastruktury, czyli podwójne szyfrowanie.

Po włączeniu szyfrowania infrastruktury dane w usłudze Azure Service Bus są szyfrowane dwa razy, raz na poziomie usługi i raz na poziomie infrastruktury przy użyciu dwóch różnych algorytmów szyfrowania i dwóch różnych kluczy. W związku z tym szyfrowanie infrastruktury danych usługi Azure Service Bus chroni przed scenariuszem, w którym może zostać naruszony jeden z algorytmów szyfrowania lub kluczy.

Szyfrowanie infrastruktury można włączyć, aktualizując szablon usługi Azure Resource Manager za pomocą requireInfrastructureEncryption właściwości w powyższym pliku UpdateServiceBusNamespaceWithEncryption.json , jak pokazano poniżej.

"properties":{
   "encryption":{
      "keySource":"Microsoft.KeyVault",    
      "requireInfrastructureEncryption":true,         
      "keyVaultProperties":[
         {
            "keyName":"[parameters('keyName')]",
            "keyVaultUri":"[parameters('keyVaultUri')]"
         }
      ]
   }
}

Obracanie, odwoływanie i klucze pamięci podręcznej

Obracanie kluczy szyfrowania

Klucz można obrócić w magazynie kluczy przy użyciu mechanizmu rotacji usługi Azure Key Vault. Daty aktywacji i wygaśnięcia można również ustawić w celu zautomatyzowania rotacji kluczy. Usługa Service Bus wykrywa nowe wersje kluczy i rozpoczyna korzystanie z nich automatycznie.

Odwoływanie dostępu do kluczy

Odwołanie dostępu do kluczy szyfrowania nie spowoduje przeczyszczenia danych z usługi Service Bus. Nie można jednak uzyskać dostępu do danych z przestrzeni nazw usługi Service Bus. Klucz szyfrowania można odwołać za pomocą zasad dostępu lub usuwając klucz. Dowiedz się więcej na temat zasad dostępu i zabezpieczania magazynu kluczy z bezpiecznego dostępu do magazynu kluczy.

Po odwołaniu klucza szyfrowania usługa Service Bus w zaszyfrowanej przestrzeni nazw staje się niemożliwa do działania. Jeśli dostęp do klucza jest włączony lub usunięty klucz zostanie przywrócony, usługa Service Bus wybierze klucz, aby uzyskać dostęp do danych z zaszyfrowanej przestrzeni nazw usługi Service Bus.

Buforowanie kluczy

Wystąpienie usługi Service Bus sonduje swoje klucze szyfrowania wyświetlane co 5 minut. Buforuje i używa ich do następnego sondowania, czyli po 5 minutach. Tak długo, jak jest dostępny co najmniej jeden klucz, kolejki i tematy są dostępne. Jeśli wszystkie wymienione klucze są niedostępne podczas sondowania, wszystkie kolejki i tematy staną się niedostępne.

Poniżej przedstawiono więcej szczegółów:

  • Co 5 minut usługa Service Bus sonduje wszystkie klucze zarządzane przez klienta wymienione w rekordzie przestrzeni nazw:
    • Jeśli klucz został obrócony, rekord zostanie zaktualizowany przy użyciu nowego klucza.
    • Jeśli klucz został odwołany, klucz zostanie usunięty z rekordu.
    • Jeśli wszystkie klucze zostały odwołane, stan szyfrowania przestrzeni nazw ma wartość Odwołano. Nie można uzyskać dostępu do danych z przestrzeni nazw usługi Service Bus.

Zagadnienia dotyczące korzystania z odzyskiwania po awarii geograficznej

Odzyskiwanie po awarii geograficznej — szyfrowanie przy użyciu tożsamości przypisanych przez system

Aby włączyć szyfrowanie klucza zarządzanego przez firmę Microsoft przy użyciu klucza zarządzanego przez klienta, zasady dostępu są konfigurowane dla tożsamości zarządzanej przypisanej przez system w określonej usłudze Azure KeyVault. Ten krok zapewnia kontrolowany dostęp do usługi Azure KeyVault z przestrzeni nazw usługi Azure Service Bus. W związku z tym należy wykonać następujące kroki:

  • Jeśli odzyskiwanie po awarii geograficznej jest już włączone dla przestrzeni nazw usługi Service Bus i chcesz włączyć klucz zarządzany przez klienta,
    • Przerwij parowanie.
    • Skonfiguruj zasady dostępu dla tożsamości zarządzanej przypisanej przez system zarówno dla podstawowych, jak i pomocniczych przestrzeni nazw w magazynie kluczy.
    • Skonfiguruj szyfrowanie w podstawowej przestrzeni nazw.
    • Ponownie połącz podstawowe i pomocnicze przestrzenie nazw.
  • Jeśli chcesz włączyć funkcję Geo-DR w przestrzeni nazw usługi Service Bus, w której jest już skonfigurowany klucz zarządzany przez klienta, wykonaj następujące kroki:
    • Skonfiguruj zasady dostępu dla tożsamości zarządzanej dla pomocniczej przestrzeni nazw w magazynie kluczy.
    • Parowanie podstawowych i pomocniczych przestrzeni nazw.

Odzyskiwanie po awarii geograficznej — szyfrowanie przy użyciu tożsamości przypisanych przez użytkownika

Poniżej przedstawiono kilka zaleceń:

  1. Utwórz tożsamość zarządzaną i przypisz uprawnienia usługi Key Vault do tożsamości zarządzanej.
  2. Dodaj tożsamość jako tożsamość przypisaną przez użytkownika i włącz szyfrowanie przy użyciu tożsamości w obu przestrzeniach nazw.
  3. Łączenie przestrzeni nazw

Warunki włączania odzyskiwania po awarii geograficznej i szyfrowania przy użyciu tożsamości przypisanych przez użytkownika:

  1. Pomocnicza przestrzeń nazw musi mieć już włączoną opcję Szyfrowanie z tożsamością przypisaną przez użytkownika, jeśli ma być sparowana z podstawową przestrzenią nazw z włączoną funkcją Szyfrowanie.
  2. Nie można włączyć szyfrowania na już sparowanym podstawowym, nawet jeśli pomocnicza ma tożsamość przypisaną przez użytkownika skojarzona z przestrzenią nazw.

Rozwiązywanie problemów

Objaw

Zostanie wyświetlony błąd informujący, że przestrzeń nazw usługi Service Bus jest wyłączona, ponieważ klucz szyfrowania nie jest już prawidłowy.

Przyczyna

Możesz użyć resource_id elementu lub version, który łączy się z określoną wersją klucza, która mogła wygasła. Jeśli podano określoną wersję, usługa Service Bus używa tej wersji klucza, nawet jeśli klucz jest obracany.

Rozwiązanie

Użyj elementu resource__versionless_id lub versionless_id zamiast polecenia resource_id lub .version

Następne kroki

Odwiedź następujące artykuły: