Condividi tramite


Esercitazione: Backup e ripristino

Il modulo di protezione hardware cloud di Microsoft Azure consente di eseguire il backup e il ripristino del modulo di protezione hardware cloud, mantenendo tutte le chiavi, le versioni, gli attributi, i tag e le assegnazioni di ruolo.

Importante

Quando si crea un backup del modulo di protezione hardware cloud di Azure, viene protetto da una chiave derivata all'interno del modulo di protezione hardware. Microsoft non ha visibilità o accesso alla chiave derivata che protegge i backup. HSM cloud di Azure non supporta il ripristino di un backup nel modulo di protezione hardware di origine o in qualsiasi modulo di protezione hardware cloud già attivato. Per eseguire il ripristino, usare un altro modulo di protezione hardware cloud non attivato in qualsiasi area preferita. In caso contrario, l'operazione di ripristino non riesce, rendendo la destinazione Cloud HSM non funzionante.

Prerequisiti

I prerequisiti seguenti supportano le operazioni di backup e ripristino del modulo di protezione hardware cloud di Azure.

  • Identità del servizio gestita configurata per l'origine e la destinazione del modulo di protezione hardware cloud di Azure.
  • Archiviazione BLOB di Azure con controllo degli accessi in base al ruolo (Collaboratore ai dati dei BLOB di archiviazione).
  • La risorsa di destinazione del modulo di protezione hardware cloud di Azure deve trovarsi nello stato NotActivated.

Le configurazioni seguenti non sono supportate per il backup e il ripristino con HSM cloud di Azure.

  • I token SAS del contenitore di archiviazione non sono supportati.

Applicare un MSI a Cloud HSM e creare un account di archiviazione per i backup del HSM.

Creazione di un'identità del servizio gestita

Creare una nuova identità gestita assegnata dall'utente nel gruppo di risorse HSM Cloud di Azure esistente. In questo esempio guidato, usiamo CHSM-MSI e CHSM-SERVER-RG, il nome del gruppo di risorse a cui si fa riferimento nell'esempio di onboarding di Azure Cloud HSM.

# Define parameters for the new managed service identity (MSI)
$identity = @{
    Location          = "<RegionName>"                                         
    ResourceName      = "<MSIName>"                                         
    ResourceGroupName = "<ResourceGroupName>"
    SubscriptionID    = "<SubscriptionID>"     
}

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

Applicare MSI al Cloud HSM di origine e destinazione

Per le operazioni di backup e ripristino del modulo di protezione hardware cloud di Azure, è necessario applicare un'identità del servizio gestito alle risorse del modulo di protezione hardware cloud di origine e di destinazione. Ogni cluster Cloud HSM può avere solo un MSI. È possibile utilizzare lo stesso MSI sia per l'origine che per la destinazione oppure utilizzare MSI diversi per ciascuna. In questo esempio guidato, applichiamo la stessa identità del servizio gestito (MSI) sia alle risorse Cloud HSM di origine che a quelle di destinazione.

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

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

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

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

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

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

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

Creare un account di archiviazione nella tua rete virtuale privata per i backup del Cloud HSM

Configurare l'infrastruttura di archiviazione per le operazioni di backup del modulo di protezione hardware cloud di Azure definendo e configurando un account di archiviazione e un contenitore BLOB associato all'interno di una rete virtuale privata. Iniziare definendo l'ID sottoscrizione e specificando i parametri dell'account di archiviazione, tra cui posizione, SKU e tipo. Il processo include la creazione di un nuovo gruppo di risorse, la definizione dell'account di archiviazione con regole di rete per limitare l'accesso a una rete virtuale designata e migliorare la sicurezza tramite un endpoint privato. Viene configurato un endpoint privato per l'accesso sicuro e il ruolo "Collaboratore ai dati dei BLOB di archiviazione" viene assegnato a un'identità specificata per garantire le autorizzazioni appropriate per le attività di backup. In questo esempio viene creato un nuovo gruppo di risorse denominato CHSM-BACKUP-RG, un account di archiviazione denominato chsmbackup00 e un contenitore BLOB denominato chsmbackupcontainer00, con accesso in lettura/scrittura concesso sia per l'origine che per la destinazione.

Importante

Il ruolo di controllo degli accessi in base al ruolo minimo necessario è Collaboratore ai dati dei BLOB di archiviazione. Gli account di archiviazione pubblici sono accessibili tramite Internet pubblico, quindi posizionare l'account di archiviazione dietro una rete virtuale privata per una maggiore sicurezza.

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

# Define storage account parameters
$storageAccount = @{
    Location          = "<RegionName>"                    
    ResourceGroupName = "<BackupResourceGroupName>" 
    AccountName       = "<ResourceName>"      # Name for the storage account
    SkuName           = "<StorageAccountSKU>"     # Storage account SKU (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 for the blob container
}

# Define the private endpoint parameters
# Storage accounts are publicly accessible, its recommended to put it behind a private VNET
$privateEndpoint = @{
    Name              = "<PrivateEndpointName>"
    VnetName          = "<ExistingVNetName>"  # Name of the existing VNet
    SubnetName        = "<ExistingSubnetName>"  # Name of the existing subnet within the VNet
    ResourceGroupName = "<ResourceGroupName>" # Resource group for private VNet 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 VNet
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 'Storage Blob Data Contributor' role to the specified identity
New-AzRoleAssignment -RoleDefinitionName $roleAssignment.RoleDefinitionName `
    -PrincipalId $roleAssignment.PrincipalId `
    -Scope $roleAssignment.Scope

Disabilitare l'accesso con chiave condivisa tramite l'impostazione del portale

Disabilitare l'accesso con chiave condivisa per migliorare la sicurezza. A tale scopo, passare all'account di archiviazione di Azure, selezionare Configurazione delle impostazioni >> e impostare "Consenti l'accesso alla chiave dell'account di archiviazione" su "Disabilitato".

Backup del modulo di protezione hardware cloud di Azure

Avvia il backup di Cloud HSM dall'HSM di origine

Avvia un backup per l'Azure Cloud HSM di origine inviando una richiesta POST con l'URI del contenitore di archiviazione all'endpoint dell'API per il backup. Per monitorare l'avanzamento del backup, invia una richiesta GET all'URL presente nelle intestazioni della risposta. Lo script recupera e mostra lo stato del processo di backup e l'ID di backup univoco dalla risposta, confermando che il backup è stato avviato e monitorandone lo stato.

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

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

# 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 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

Output previsto: $backupStatus restituisce "Succeeded" e $backupID mostra l'ID di backup corrispondente per il backup avviato.

Ripristino dell'HSM cloud di Azure

Avviare il ripristino del modulo di protezione hardware cloud nel modulo di protezione hardware di destinazione

Avvia un'operazione di ripristino per l'Azure Cloud HSM di destinazione fornendo le proprietà di ripristino necessarie, inclusi l'URI del contenitore di archiviazione e l'ID di backup. Lo script crea l'URI corretto per l'endpoint dell'API di ripristino e invia una richiesta POST per avviare il ripristino. Per monitorare lo stato di avanzamento del ripristino, inviare una richiesta GET al percorso specificato nelle intestazioni di risposta e recuperare lo stato del processo di ripristino per confermarne il completamento.

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

# Set the URI for the restore API endpoint 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=2024-06-30-preview"

# 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

Output previsto: $jobStatus deve restituire "Succeeded".

Convalidare il ripristino nel modulo di protezione hardware cloud di destinazione

Dopo un certo periodo di elaborazione, l'operazione di ripristino dovrebbe indicare "Operazione riuscita" e il modulo di protezione hardware del cloud di destinazione dovrebbe visualizzare lo stato di attivazione "Attivo". Quando ci si connette al modulo di protezione hardware di Destination Cloud in cui è stata eseguita l'operazione di ripristino, l'esecuzione e l'esecuzione azcloudhsm_mgmt_utilgetClusterInfo dovrebbero mostrare tutti e tre i nodi come attivi e disponibili.

Importante

Quando ci si connette al modulo di protezione hardware cloud di Azure dalla macchina virtuale amministratore, aggiornare sia i file di configurazione client che di gestione (azcloudhsm_resource.cfg) in modo che puntino al modulo di protezione hardware cloud di destinazione corretto in cui è stato eseguito il ripristino.

  1. Avviare il azcloudhsm_mgmt_util eseguendo:

    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. All'interno dell'utilità di gestione, il prompt diventa cloudmgmt. Per elencare le informazioni sul cluster, eseguire:

    getClusterInfo  
    

    Output previsto:getClusterInfo dovreste verificare che tutti e tre i nodi siano ora disponibili per il cluster HSM nel cloud di Azure.

  3. Uscire dall'utilità di gestione, quindi avviare l'utilità HSM cloud di Azure (azcloudhsm_util). Accedere come CU ed eseguire il findKey comando .

    Importante

    Gli handle di chiave possono cambiare perché sono dinamici; tuttavia, gli ID chiave non cambiano.

    Linux

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

    Windows

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

Passaggi successivi