Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Azure Cloud HSM le permite realizar copias de seguridad y restaurar el módulo de seguridad de hardware (HSM) de forma que conserve todas las claves, versiones, atributos, etiquetas y asignaciones de roles.
En este tutorial, usted hará lo siguiente:
- Cree una identidad administrada y una cuenta de almacenamiento para los recursos de HSM en la nube.
- Inicie una copia de seguridad desde un recurso HSM en la nube de origen.
- Inicie y valide una restauración en un recurso HSM en la nube de destino.
Importante
Al crear una copia de seguridad de HSM en la nube, una clave derivada de HSM ayuda a protegerla. Microsoft no tiene visibilidad ni acceso a la clave derivada.
Prerrequisitos
- Una cuenta de Azure con una suscripción activa. Puede crear una cuenta gratuitamente.
- Azure Blob Storage con control de acceso basado en roles (RBAC) (rol Colaborador de datos de Storage Blob).
Configuraciones no compatibles
Azure Cloud HSM no lo admite
- Restaurar una copia de seguridad en su recurso HSM en la nube de origen o cualquier recurso de HSM en la nube que ya esté activado. Para restaurarlo, use otro recurso HSM en la nube no activado en cualquier región preferida. De lo contrario, se produce un error en la operación de restauración y el recurso HSM en la nube de destino queda inoperativo.
- Realización de copia de seguridad y restauración mediante tokens de firma de acceso compartido (SAS) para contenedores de almacenamiento.
Aplicación de una identidad administrada y creación de una cuenta de almacenamiento
Use el código de las secciones siguientes para aplicar una identidad administrada a Azure Cloud HSM y crear una cuenta de almacenamiento para las copias de seguridad de HSM.
Crea una identidad administrada
Cree una nueva identidad gestionada asignada al usuario en su grupo de recursos existente de Azure Cloud HSM. En este tutorial, puede usar CHSM-MSI como nombre de la identidad administrada y CHSM-SERVER-RG como nombre del grupo de recursos.
CHSM-SERVER-RG es el nombre que usa la guía de incorporación de HSM en la nube de Azure como grupo de recursos de ejemplo.
# Define parameters for the new managed identity
$identity = @{
Location = "<location>"
ResourceName = "<managed-identity-name>"
ResourceGroupName = "<resource-group>"
SubscriptionID = "<subscription-id>"
}
# 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
Aplicación de la identidad administrada a los recursos de HSM en la nube
Para las operaciones de copia de seguridad y restauración de Azure Cloud HSM, debe aplicar una identidad administrada a los recursos HSM en la nube de origen y destino.
Nota:
El recurso HSM en la nube de destino debe estar en estado NotActivated .
Cada clúster de HSM en la nube solo puede tener una identidad administrada. Puede usar la misma identidad administrada para el origen y el destino, o bien puede usar una identidad administrada diferente para cada una. En el ejemplo de este tutorial se aplica la misma identidad administrada a los recursos HSM en la nube de origen y destino.
# Define the parameters for the source Cloud HSM resource
$sourceCloudHSM = @{
Location = "<location>"
Sku = @{ "family" = "B"; "Name" = "Standard_B1" }
ResourceName = "<source-hsm-name>"
ResourceType = "microsoft.hardwaresecuritymodules/cloudHsmClusters"
ResourceGroupName = "<source-resource-group>"
Force = $true
}
# Define the parameters for the destination Cloud HSM resource
$destinationCloudHSM = @{
Location = "<location>"
Sku = @{ "family" = "B"; "Name" = "Standard_B1" }
ResourceName = "<destination-hsm-name>"
ResourceType = "microsoft.hardwaresecuritymodules/cloudHsmClusters"
ResourceGroupName = "<destination-resource-group>"
Force = $true
}
# Define the Cloud HSM managed identity patch payload
$chsmMSIPatch = '{
"Sku": {
"Family": "B",
"Name": "Standard_B1"
},
"Location": "<location>",
"Identity": {
"type": "UserAssigned",
"userAssignedIdentities": {
"/subscriptions/<subscription-id>/resourcegroups/<resource-group>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<managed-identity-name>": {}
}
}
}'
# 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
Creación de una cuenta de almacenamiento en una red virtual privada
Configure la infraestructura de almacenamiento para las operaciones de copia de seguridad de Azure Cloud HSM mediante la definición y configuración de una cuenta de almacenamiento y un contenedor de blobs asociado dentro de una red virtual privada.
Comience definiendo el identificador de suscripción. Especifique los parámetros de la cuenta de almacenamiento, incluida la ubicación, el nivel de producto y el tipo.
El proceso incluye la creación de un nuevo grupo de recursos, el establecimiento de la cuenta de almacenamiento con reglas de red para restringir el acceso a una red virtual designada y mejorar la seguridad a través de un punto de conexión privado. El rol Colaborador de datos de Storage Blob se asigna a una identidad especificada para garantizar los permisos adecuados para las tareas de copia de seguridad.
En el código siguiente, puede usar los ejemplos siguientes:
-
CHSM-BACKUP-RGpara el nombre del grupo de recursos -
chsmbackup00para el nombre de la cuenta de almacenamiento -
chsmbackupcontainer00para el nombre del contenedor de blobs
Se concede acceso de lectura y escritura tanto para el origen como para el destino.
Importante
El rol de RBAC mínimo necesario es Colaborador de datos de blob de almacenamiento. Las cuentas de almacenamiento público son accesibles a través de la red pública de Internet, por lo que coloca la cuenta de almacenamiento detrás de una red virtual privada para mejorar la seguridad.
# Define the subscription ID
$subscriptionId = "<subscription-id>"
# Define storage account parameters
$storageAccount = @{
Location = "<location>"
ResourceGroupName = "<backup-resource-group>"
AccountName = "<storage-account-name>" # Name of the storage account
SkuName = "<storage-sku>" # Storage account tier (example: Standard_LRS)
Kind = "<storage-type>" #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 = "<container-name>" # 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 = "<private-endpoint-name>"
VnetName = "<vnet-name>" # Name of the existing virtual network
SubnetName = "<subnet-name>" # Name of the existing subnet within the virtual network
ResourceGroupName = "<resource-group>" # 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 = "<principal-id>" # 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
Deshabilitación del acceso a claves compartidas a través de la configuración del portal
Deshabilite el acceso a claves compartidas para mejorar la seguridad:
- En Azure Portal, vaya a la cuenta de Azure Storage.
- Seleccione Configuración.>
- Establezca la opción Permitir el acceso a la clave de la cuenta de almacenamiento en Deshabilitado.
Inicio de una copia de seguridad desde el recurso HSM en la nube de origen
Inicie una copia de seguridad del recurso HSM en la nube de origen mediante el envío de una POST solicitud con el URI del contenedor de almacenamiento al punto de conexión de la API de copia de seguridad. Supervise el progreso de la copia de seguridad enviando una GET solicitud a la dirección URL en los encabezados de respuesta.
El siguiente script recupera y registra el estado del trabajo de copia de seguridad y el ID único de copia de seguridad de la respuesta. El estado confirma que la copia de seguridad se inició y realiza un seguimiento de su progreso.
# 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
Salida esperada: $backupStatus devuelve Succeededy $backupID muestra el identificador correspondiente para la copia de seguridad que inició.
Iniciar una restauración en el recurso HSM en la nube de destino
Inicie una operación de restauración para el recurso HSM en la nube de destino proporcionando las propiedades de restauración necesarias, incluido el URI del contenedor de almacenamiento y el identificador de copia de seguridad.
El script siguiente crea el URI correcto para el punto de conexión de la API de restauración y envía una POST solicitud para iniciar la restauración. Para supervisar el progreso de la restauración, envíe una GET solicitud a la ubicación especificada en los encabezados de respuesta y recupere el estado del trabajo de restauración para confirmar su finalización.
$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
Salida esperada: $jobStatus debe devolver Succeeded.
Validación de la restauración en el recurso HSM en la nube de destino
Después de un tiempo de procesamiento, la operación de restauración debe indicar Succeeded, y el recurso HSM en la nube de destino debe mostrar un estado de activación de Active. Al conectarse al recurso HSM en la nube de destino donde realizó la operación de restauración, al ejecutar azcloudhsm_mgmt_util y getClusterInfo debería mostrarse que los tres nodos están activos y disponibles.
Importante
Al conectarse a Azure Cloud HSM desde la máquina virtual administrativa, actualice los archivos de configuración de cliente y administración (azcloudhsm_resource.cfg) para que apunten al recurso HSM en la nube de destino correcto donde realizó la restauración.
Para iniciar
azcloudhsm_mgmt_util, ejecute uno de los siguientes 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 de la herramienta de administración, el prompt se convierte en
cloudmgmt. Para enumerar la información del clúster, ejecute:getClusterInfoSalida esperada:
getClusterInfodebe confirmar que los tres nodos ahora están disponibles para el clúster de HSM en la nube de Azure.Cierre la herramienta de administración y, a continuación, abra la herramienta Azure Cloud HSM (
azcloudhsm_util). Inicie sesión comoCUy ejecute elfindKeycomando .Importante
Los identificadores de clave pueden cambiar porque son dinámicos. Sin embargo, los identificadores de clave no cambian.
Linux:
./azcloudhsm_util loginHSM -u CU -s cu1 -p user1234 findKeyWindows:
azcloudhsm_util.exe loginHSM -u CU -s cu1 -p user1234 findKey