Udostępnij przez


Samouczek: tworzenie kopii zapasowych i przywracanie zasobów modułu HSM w chmurze platformy Azure

Moduł HSM w chmurze platformy Azure umożliwia tworzenie kopii zapasowych i przywracanie sprzętowego modułu zabezpieczeń (HSM) w sposób, który zachowuje wszystkie klucze, wersje, atrybuty, tagi i przypisania ról.

W tym samouczku nauczysz się następujących rzeczy:

  • Utwórz zarządzaną tożsamość oraz konto magazynowe dla zasobów Cloud HSM.
  • Zainicjuj kopię zapasową ze źródłowego zasobu modułu HSM w chmurze.
  • Rozpocznij i zweryfikuj przywracanie do docelowego zasobu Cloud HSM.

Ważne

Podczas tworzenia kopii zapasowej modułu HSM w chmurze klucz pochodzący z modułu HSM pomaga go chronić. Firma Microsoft nie ma wglądu ani dostępu do klucza pochodnego.

Wymagania wstępne

Nieobsługiwane konfiguracje

Moduł HSM w chmurze platformy Azure nie obsługuje:

  • Przywracanie kopii zapasowej do źródłowego zasobu modułu HSM w chmurze lub dowolnego zasobu modułu HSM w chmurze, który został już aktywowany. Aby przywrócić, użyj innego niezaktywizowanego zasobu Cloud HSM w dowolnym preferowanym regionie. W przeciwnym razie operacja przywracania kończy się niepowodzeniem i powoduje, że docelowy zasób HSM w chmurze staje się niefunkcjonalnym.
  • Tworzenie kopii zapasowych i przywracanie przy użyciu tokenów sygnatury dostępu współdzielonego (SAS) dla kontenerów magazynowych.

Stosowanie tożsamości zarządzanej i tworzenie konta magazynu

Użyj kodu w poniższych sekcjach, aby zastosować tożsamość zarządzaną do usługi Azure Cloud HSM i utworzyć konto magazynowe na potrzeby kopii zapasowych HSM.

Tworzenie tożsamości zarządzanej

Utwórz nową tożsamość zarządzaną przypisaną przez użytkownika w istniejącej grupie zasobów modułu HSM w chmurze platformy Azure. W tym samouczku możesz użyć CHSM-MSI jako nazwy tożsamości zarządzanej i CHSM-SERVER-RG jako nazwy grupy zasobów. CHSM-SERVER-RG to nazwa używana przez przewodnik dołączania modułu HSM w chmurze platformy Azure jako przykładowa grupa zasobów.

# Define parameters for the new managed identity
$identity = @{
    Location          = "<RegionName>"                                         
    ResourceName      = "<ManagedIdentityName>"                                         
    ResourceGroupName = "<ResourceGroupName>"
    SubscriptionID    = "<SubscriptionID>"     
}

# Create a new user-assigned managed identity in the specified resource group and location
New-AzUserAssignedIdentity -Name $identity.ResourceName -ResourceGroupName $identity.ResourceGroupName -Location $identity.Location

Stosowanie tożsamości zarządzanej do zasobów modułu HSM w chmurze

W przypadku operacji tworzenia i przywracania kopii zapasowych modułu HSM w chmurze platformy Azure należy zastosować tożsamość zarządzaną zarówno do zasobów źródłowego, jak i docelowego modułu HSM w chmurze.

Uwaga / Notatka

Docelowy zasób modułu HSM w chmurze musi być w NotActivated stanie .

Każdy klaster modułu HSM w chmurze może mieć tylko jedną tożsamość zarządzaną. Możesz użyć tej samej tożsamości zarządzanej zarówno dla źródła, jak i miejsca docelowego, lub użyć innej tożsamości zarządzanej dla każdego z nich. W przykładzie w tym samouczku jest stosowana ta sama tożsamość zarządzana zarówno do źródłowych, jak i docelowych zasobów modułu HSM chmury.

# Define the parameters for the source Cloud HSM resource
$sourceCloudHSM = @{
    Location          = "<RegionName>"                              
    Sku               = @{ "family" = "B"; "Name" = "Standard_B1" } 
    ResourceName      = "<SourceCloudHSMName>"                
    ResourceType      = "microsoft.hardwaresecuritymodules/cloudHsmClusters" 
    ResourceGroupName = "<SourceResourceGroupName>"             
    Force             = $true                                    
}

# Define the parameters for the destination Cloud HSM resource
$destinationCloudHSM = @{
    Location          = "<RegionName>"                              
    Sku               = @{ "family" = "B"; "Name" = "Standard_B1" } 
    ResourceName      = "<DestinationCloudHSMName>"            
    ResourceType      = "microsoft.hardwaresecuritymodules/cloudHsmClusters" 
    ResourceGroupName = "<DestinationResourceGroupName>"             
    Force             = $true                                    
}

# Define the Cloud HSM managed identity patch payload
$chsmMSIPatch = '{
    "Sku": {
        "Family": "B",
        "Name": "Standard_B1"
    },
    "Location": "<RegionName>",    
    "Identity": {
        "type": "UserAssigned",
        "userAssignedIdentities": {
            "/subscriptions/<SubscriptionID>/resourcegroups/<ResourceGroupName>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<ManagedIdentityName>": {}
        }
    }
}'

# Construct the source URI
$sourceURI = "/subscriptions/$($identity.SubscriptionID)/resourceGroups/$($sourceCloudHSM.ResourceGroupName)/providers/Microsoft.HardwareSecurityModules/cloudHsmClusters/$($sourceCloudHSM.ResourceName)?api-version=2025-03-31"

# Construct the destination URI
$destinationURI = "/subscriptions/$($identity.SubscriptionID)/resourceGroups/$($destinationCloudHSM.ResourceGroupName)/providers/Microsoft.HardwareSecurityModules/cloudHsmClusters/$($destinationCloudHSM.ResourceName)?api-version=2025-03-31"

# Invoke the REST method to update the source Cloud HSM resource with the managed identity patch
Invoke-AzRestMethod -Path $sourceURI -Method Put -Payload $chsmMSIPatch

# Invoke the REST method to update the destination Cloud HSM resource with the managed identity patch
Invoke-AzRestMethod -Path $destinationURI -Method Put -Payload $chsmMSIPatch

Tworzenie konta magazynu w prywatnej sieci wirtualnej

Skonfiguruj infrastrukturę magazynu dla operacji tworzenia kopii zapasowych modułu HSM w chmurze platformy Azure, definiując i konfigurując konto magazynu oraz skojarzony kontener obiektów blob w prywatnej sieci wirtualnej.

Zacznij od zdefiniowania identyfikatora subskrypcji. Określ szczegóły dotyczące parametrów konta przechowywania, w tym lokalizację, poziom produktu i typ.

Proces obejmuje utworzenie nowej grupy zasobów, ustanowienie konta magazynu z regułami sieci w celu ograniczenia dostępu do wyznaczonej sieci wirtualnej oraz zwiększenie zabezpieczeń za pośrednictwem prywatnego punktu końcowego. Rola Współautora danych Azure Blob Storage jest przypisana do określonej tożsamości, aby zapewnić odpowiednie uprawnienia do zadań zabezpieczających.

W poniższym kodzie można użyć następujących przykładów:

  • CHSM-BACKUP-RG jako nazwę grupy zasobów
  • chsmbackup00 jako nazwę konta przechowywania
  • chsmbackupcontainer00 jako nazwę kontenera obiektów blob

Dostęp do odczytu/zapisu jest udzielany zarówno dla źródła, jak i miejsca docelowego.

Ważne

Minimalna wymagana rola RBAC to Współautor danych blob Storage. Konta pamięci masowej publicznej są dostępne za pośrednictwem publicznego Internetu, dlatego zaleca się umieszczenie konta pamięci masowej za prywatną siecią wirtualną w celu zwiększenia bezpieczeństwa.

# Define the subscription ID
$subscriptionId = "<SubscriptionID>"

# Define storage account parameters
$storageAccount = @{
    Location          = "<RegionName>"                    
    ResourceGroupName = "<BackupResourceGroupName>" 
    AccountName       = "<ResourceName>"      # Name of the storage account
    SkuName           = "<StorageAccountSKU>"     # Storage account tier (example: Standard_LRS)
    Kind              = "<StorageAccountType>"       #Type of storage account (example: StorageV2)
}

# Define the blob container parameters
$container = @{
    ResourceGroupName  = $storageAccount.ResourceGroupName # Resource group name where the storage account is located
    StorageAccountName = $storageAccount.AccountName      # Name of the storage account
    ContainerName      = "<StorageContainerName>"              # Name of the blob container
}

# Define the private endpoint parameters
# Storage accounts are publicly accessible, so put it behind a private virtual network
$privateEndpoint = @{
    Name              = "<PrivateEndpointName>"
    VnetName          = "<ExistingVNetName>"  # Name of the existing virtual network
    SubnetName        = "<ExistingSubnetName>"  # Name of the existing subnet within the virtual network
    ResourceGroupName = "<ResourceGroupName>" # Resource group for private virtual network and subnet (example: CHSM-CLIENT-RG)
}

# Define the role assignment parameters
$roleAssignment = @{
    RoleDefinitionName = "Storage Blob Data Contributor"  # Minimum RBAC role required
    PrincipalId        = "<PrincipalId>"  # The ID of the managed identity or user to assign the role to
    Scope              = "/subscriptions/$($subscriptionId)/resourceGroups/$($storageAccount.ResourceGroupName)/providers/Microsoft.Storage/storageAccounts/$($storageAccount.AccountName)"
}

# Create a new resource group with the specified name and location
New-AzResourceGroup -Name $storageAccount.ResourceGroupName -Location $storageAccount.Location -Force

# Create a new storage account in the specified resource group and location
# This command sets up the storage account needed for backup operations
New-AzStorageAccount -ResourceGroupName $storageAccount.ResourceGroupName `
    -Name $storageAccount.AccountName `
    -Location $storageAccount.Location `
    -SkuName $storageAccount.SkuName `
    -Kind $storageAccount.Kind

# Retrieve the storage account key
$storageAccountKey = (Get-AzStorageAccountKey -ResourceGroupName $storageAccount.ResourceGroupName -Name $storageAccount.AccountName)[0].Value

# Create the storage context
$storageAccountContext = New-AzStorageContext -StorageAccountName $storageAccount.AccountName -StorageAccountKey $storageAccountKey

# Create the blob container in the storage account
New-AzStorageContainer -Name $container.ContainerName -Context $storageAccountContext

# Retrieve the virtual network and subnet object
$vnet = Get-AzVirtualNetwork -ResourceGroupName $privateEndpoint.ResourceGroupName -Name $privateEndpoint.VnetName
$subnet = $vnet.Subnets | Where-Object { $_.Name -eq $privateEndpoint.SubnetName }

# Create the private endpoint for the storage account in the existing virtual network
New-AzPrivateEndpoint -ResourceGroupName $storageAccount.ResourceGroupName `
    -Name $privateEndpoint.Name `
    -Location $storageAccount.Location `
    -PrivateLinkServiceConnection @(
        @{
            Name = "$($storageAccount.AccountName)-connection"
            PrivateLinkServiceConnectionState = @{
                Status = "Approved"
                Description = "Private Endpoint Connection"
            }
            PrivateLinkServiceId = "/subscriptions/$subscriptionId/resourceGroups/$($storageAccount.ResourceGroupName)/providers/Microsoft.Storage/storageAccounts/$($storageAccount.AccountName)"
            GroupIds = @("blob")  # Add this parameter with the required group ID
        }
    ) `
    -Subnet $subnet 

# Assign the Storage Blob Data Contributor role to the specified identity
New-AzRoleAssignment -RoleDefinitionName $roleAssignment.RoleDefinitionName `
    -PrincipalId $roleAssignment.PrincipalId `
    -Scope $roleAssignment.Scope

Wyłączanie dostępu do klucza współużytkowanego za pośrednictwem ustawienia portalu

Wyłącz dostęp do klucza współużytkowanego, aby zwiększyć bezpieczeństwo:

  1. W witrynie Azure Portal przejdź do konta usługi Azure Storage.
  2. Wybierz pozycję Ustawienia>Konfiguracja.
  3. Ustaw Zezwalaj na dostęp do konta magazynu za pomocą klucza na Wyłączone.

Inicjowanie kopii zapasowej ze źródłowego zasobu modułu HSM w chmurze

Uruchom kopię zapasową swojego zasobu Cloud HSM, wysyłając POST żądanie z URI kontenera storage do punktu końcowego interfejsu API kopii zapasowej. Monitoruj postęp kopii zapasowej, wysyłając GET żądanie do adresu URL w nagłówkach odpowiedzi.

Poniższy skrypt pobiera i pokazuje stan zadania tworzenia kopii zapasowej oraz unikatowy identyfikator kopii zapasowej z odpowiedzi. Stan potwierdza, że kopia zapasowa została uruchomiona i śledzi jej postęp.

# Define backup properties, including the URI for the Azure Blob Storage container
$backupProperties = ConvertTo-Json @{
    azureStorageBlobContainerUri = "https://$($container.StorageAccountName).blob.core.windows.net/$($container.ContainerName)"
}

# Construct the URI for the backup operation by using the provided parameters
$backupUri = "/subscriptions/$($identity.SubscriptionID)/resourceGroups/$($sourceCloudHSM.ResourceGroupName)/providers/Microsoft.HardwareSecurityModules/cloudHsmClusters/$($sourceCloudHSM.ResourceName)/backup?api-version=2025-03-31"

# Initiate the backup operation by sending a POST request with the backup properties
$response = Invoke-AzRestMethod -Path $backupUri -Method Post -Payload $backupProperties

# Check the backup job status to confirm that it succeeded
$jobStatus = Invoke-AzRestMethod -Method 'GET' -Uri $response.Headers.Location
$backupStatus = (ConvertFrom-Json $jobStatus.Content).properties.status

# Extract the backup ID from the job status response
$backupID = (ConvertFrom-Json $jobStatus.Content).properties.backupId

# Output the backup status and backup ID
$backupStatus
$backupID

Oczekiwane dane wyjściowe: $backupStatus zwraca wartość Succeededi $backupID wyświetla odpowiedni identyfikator zainicjowanej kopii zapasowej.

Inicjowanie przywracania do docelowego zasobu modułu HSM w chmurze

Uruchom operację przywracania dla docelowego zasobu modułu HSM w chmurze, podając niezbędne właściwości przywracania, w tym identyfikator URI kontenera magazynu i identyfikator kopii zapasowej.

Poniższy skrypt tworzy prawidłowy identyfikator URI punktu końcowego API przywracania i wysyła POST żądanie, aby zainicjować przywracanie. Aby monitorować postęp przywracania, wyślij GET żądanie do lokalizacji określonej w nagłówkach odpowiedzi i pobierz stan zadania przywracania, aby potwierdzić jego ukończenie.

$restoreProperties = ConvertTo-Json @{
    "azureStorageBlobContainerUri" = "https://$($container.StorageAccountName).blob.core.windows.net/$($container.ContainerName)"
    "backupId" = "$($backupID)"
}

# Set the URI for the restore API endpoint by using the subscription ID, resource group, and destination server details
$restoreUri = "/subscriptions/$($identity.SubscriptionID)/resourceGroups/$($destinationCloudHSM.ResourceGroupName)/providers/Microsoft.HardwareSecurityModules/cloudHsmClusters/$($destinationCloudHSM.ResourceName)/restore?api-version=2025-03-31"

# Initiate the restore operation by sending a POST request to the restore API endpoint with the defined properties
$response = Invoke-AzRestMethod -Path $restoreUri -Method Post -Payload $restoreProperties 

# Check the status of the restore job by sending a GET request to the location provided in the response headers
$jobStatus = Invoke-AzRestMethod -Method 'GET' -Uri $response.Headers.Location

# Extract and display the status of the restore job
(ConvertFrom-Json $jobStatus.Content).properties.status

Oczekiwane dane wyjściowe: $jobStatus powinny zwrócić wartość Succeeded.

Zweryfikuj przywracanie do docelowego zasobu Cloud HSM

Po pewnym czasie przetwarzania operacja przywracania powinna wskazywać Succeeded, a docelowy chmurowy zasób HSM powinien wyświetlić stan Active aktywacji. Po nawiązaniu połączenia z docelowym zasobem Cloud HSM, gdzie wykonano operację przywracania, uruchom azcloudhsm_mgmt_util i getClusterInfo, aby zobaczyć wszystkie trzy węzły aktywne i dostępne.

Ważne

Podczas nawiązywania połączenia z modułem HSM w chmurze platformy Azure z administracyjnej maszyny wirtualnej zaktualizuj zarówno pliki konfiguracji klienta, jak i zarządzania (azcloudhsm_resource.cfg), aby wskazać prawidłowy docelowy zasób modułu HSM chmury, w którym wykonano przywracanie.

  1. Zacznij od azcloudhsm_mgmt_util uruchomienia jednego z następujących poleceń.

    Linux:

    cd /usr/local/bin/AzureCloudHSM-ClientSDK-* 
    sudo ./azcloudhsm_mgmt_util ./azcloudhsm_resource.cfg
    

    Windows:

    cd azcloudhsm_mgmt_util 
    .\azcloudhsm_mgmt_util.exe .\azcloudhsm_resource.cfg
    
  2. W narzędziu do zarządzania monit stanie się cloudmgmt. Aby wyświetlić listę informacji o klastrze, uruchom polecenie:

    getClusterInfo  
    

    Oczekiwane dane wyjściowe: getClusterInfo powinny potwierdzić, że wszystkie trzy węzły są teraz dostępne dla klastra modułu HSM w chmurze platformy Azure.

  3. Zamknij narzędzie do zarządzania, a następnie otwórz narzędzie Azure Cloud HSM (azcloudhsm_util). Zaloguj się jako CU i uruchom findKey polecenie .

    Ważne

    Dojścia kluczy mogą ulec zmianie, ponieważ są dynamiczne. Jednak identyfikatory kluczy nie zmieniają się.

    Linux:

    ./azcloudhsm_util  
    loginHSM -u CU -s cu1 -p user1234
    findKey
    

    Windows:

    azcloudhsm_util.exe
    loginHSM -u CU -s cu1 -p user1234  
    findKey