Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
O Azure Cloud HSM permite fazer backup e restaurar seu módulo de segurança de hardware (HSM) de uma forma que preserva todas as chaves, versões, atributos, tags e atribuições de função.
Neste tutorial, você:
- Crie uma identidade gerenciada e uma conta de armazenamento para recursos do Cloud HSM.
- Inicie um backup a partir de um recurso do Cloud HSM de origem.
- Inicie e valide uma restauração para um recurso Cloud HSM de destino.
Importante
Quando você cria um backup do Cloud HSM, uma chave derivada do HSM ajuda a protegê-lo. A Microsoft não tem visibilidade ou acesso à chave derivada.
Pré-requisitos
- Uma conta do Azure com uma assinatura ativa. Você pode criar uma conta gratuitamente.
- Armazenamento de Blobs do Azure com controlo de acesso baseado em funções (função Colaborador de Dados de Blobs de Armazenamento).
Configurações não suportadas
O Azure Cloud HSM não suporta:
- Restaurar um backup para seu recurso Cloud HSM de origem ou qualquer recurso Cloud HSM que já esteja ativado. Para restaurar, use outro recurso Cloud HSM não ativado em qualquer região preferida. Caso contrário, a operação de restauração falhará e tornará o recurso Cloud HSM de destino não funcional.
- Backup e restauração por meio de tokens de assinatura de acesso compartilhado (SAS) para contêineres de armazenamento.
Aplicar uma identidade gerenciada e criar uma conta de armazenamento
Use o código nas seções a seguir para aplicar uma identidade gerenciada ao Azure Cloud HSM e criar uma conta de armazenamento para backups do HSM.
Criar uma identidade gerenciada
Crie uma nova identidade gerenciada atribuída pelo usuário em seu grupo de recursos existente do Azure Cloud HSM. Neste tutorial, você pode usar CHSM-MSI como o nome da identidade gerenciada e CHSM-SERVER-RG como o nome do grupo de recursos.
CHSM-SERVER-RG é o nome que o guia de integração do Azure Cloud HSM usa como um grupo de recursos de exemplo.
# 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
Aplicar a identidade gerenciada aos recursos do Cloud HSM
Para operações de backup e restauração do Azure Cloud HSM, você deve aplicar uma identidade gerenciada aos recursos do Cloud HSM de origem e de destino.
Observação
O recurso Cloud HSM de destino deve estar no estado NotActivated.
Cada cluster do Cloud HSM pode ter apenas uma identidade gerenciada. Você pode usar a mesma identidade gerenciada para a origem e o destino, ou pode usar uma identidade gerenciada diferente para cada um. O exemplo neste tutorial aplica a mesma identidade gerenciada aos recursos do Cloud HSM de origem e de destino.
# 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
Criar uma conta de armazenamento em uma rede virtual privada
Configure a infraestrutura de armazenamento para operações de backup do Azure Cloud HSM definindo e configurando uma conta de armazenamento e um contêiner de blob associado em uma rede virtual privada.
Comece definindo o ID da assinatura. Especifique os parâmetros da conta de armazenamento, incluindo o local, a camada do produto e o tipo.
O processo inclui a criação de um novo grupo de recursos, o estabelecimento da conta de armazenamento com regras de rede para restringir o acesso a uma rede virtual designada e o aprimoramento da segurança por meio de um ponto de extremidade privado. A função de Colaborador de Dados de Blob de Armazenamento é atribuída a uma identidade especificada para garantir permissões apropriadas para tarefas de backup.
No código a seguir, você pode usar os seguintes exemplos:
-
CHSM-BACKUP-RGpara o nome do grupo de recursos -
chsmbackup00para o nome da conta de armazenamento -
chsmbackupcontainer00para o nome do contêiner de blob
O acesso de leitura/gravação é concedido tanto para a origem quanto para o destino.
Importante
A função RBAC mínima necessária é Storage Blob Data Contributor. As contas de armazenamento público podem ser acessadas pela Internet pública, portanto, coloque sua conta de armazenamento atrás de uma rede virtual privada para maior segurança.
# 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
Desativar o acesso à chave compartilhada por meio da configuração do portal
Desative o acesso à chave compartilhada para aumentar a segurança:
- No portal do Azure, acesse sua conta de armazenamento do Azure.
- Selecione Definições>Configuração.
- Definir Permitir acesso à chave da conta de armazenamento como Desativado.
Iniciar um backup a partir do recurso Cloud HSM de origem
Inicie um backup para seu recurso Cloud HSM de origem enviando uma POST solicitação com o URI do contêiner de armazenamento para o ponto de extremidade da API de backup. Monitore o progresso do backup enviando uma GET solicitação para a URL nos cabeçalhos de resposta.
O script a seguir recupera e mostra o estado do trabalho de backup e o ID exclusivo do backup a partir da resposta. O status confirma que o backup foi iniciado e acompanha seu progresso.
# 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
Saída esperada: $backupStatus retorna Succeedede $backupID mostra a ID correspondente para o backup que você iniciou.
Iniciar uma restauração para o recurso Cloud HSM de destino
Inicie uma operação de restauração para o recurso Cloud HSM de destino fornecendo as propriedades de restauração necessárias, incluindo o URI do contêiner de armazenamento e a ID de backup.
O script a seguir cria o URI correto para o ponto de extremidade da API de restauração e envia uma POST solicitação para iniciar a restauração. Para monitorar o progresso da restauração, envie uma GET solicitação para o local especificado nos cabeçalhos de resposta e recupere o status do trabalho de restauração para confirmar sua conclusão.
$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
Saída esperada: $jobStatus deve retornar Succeeded.
Validar a restauração para o recurso Cloud HSM de destino
Após algum tempo de processamento, a operação de restauração deve indicar Succeeded, e o recurso Cloud HSM de destino deve exibir um status de ativação de Active. Quando se conecta ao recurso Cloud HSM de destino onde executou a operação de restauração, executar azcloudhsm_mgmt_util e getClusterInfo deverá mostrar todos os três nós como ativos e disponíveis.
Importante
Quando você estiver se conectando ao Azure Cloud HSM a partir da máquina virtual administrativa, atualize os arquivos de configuração do cliente e do gerenciamento (azcloudhsm_resource.cfg) para apontar para o recurso Cloud HSM de destino correto onde você executou a restauração.
Comece
azcloudhsm_mgmt_utilexecutando um dos seguintes comandos.Linux:
cd /usr/local/bin/AzureCloudHSM-ClientSDK-* sudo ./azcloudhsm_mgmt_util ./azcloudhsm_resource.cfgWindows
cd azcloudhsm_mgmt_util .\azcloudhsm_mgmt_util.exe .\azcloudhsm_resource.cfgDentro da ferramenta de gerenciamento, o prompt se torna
cloudmgmt. Para listar as informações do cluster, execute:getClusterInfoSaída esperada:
getClusterInfodeve confirmar que todos os três nós agora estão disponíveis para seu cluster do Azure Cloud HSM.Feche a ferramenta de gerenciamento e abra a ferramenta Azure Cloud HSM (
azcloudhsm_util). Entre comoCUe execute ofindKeycomando.Importante
As alças de chave podem mudar porque são dinâmicas. No entanto, os IDs de chave não são alterados.
Linux:
./azcloudhsm_util loginHSM -u CU -s cu1 -p user1234 findKeyWindows
azcloudhsm_util.exe loginHSM -u CU -s cu1 -p user1234 findKey