Aracılığıyla paylaş


Öğretici: Azure Cloud HSM kaynaklarını yedekleme ve geri yükleme

Azure Cloud HSM, donanım güvenlik modülünüzü (HSM) tüm anahtarları, sürümleri, öznitelikleri, etiketleri ve rol atamalarını koruyacak şekilde yedeklemenize ve geri yüklemenize olanak tanır.

Bu eğitimde, siz:

  • Cloud HSM kaynakları için yönetilen kimlik ve depolama hesabı oluşturun.
  • Kaynak Cloud HSM kaynağından yedekleme başlatın.
  • Hedef Cloud HSM kaynağına geri yükleme başlatın ve doğrulayın.

Önemli

Bir Cloud HSM yedeklemesi oluşturduğunuzda, HSM içinde türetilen bir anahtar bu yedeklemenin korunmasına yardımcı olur. Microsoft'un türetilmiş anahtara görünürlüğü veya erişimi yoktur.

Önkoşullar

Desteklenmeyen yapılandırmalar

Azure Cloud HSM şu desteği sağlamaz:

  • Yedeklemeyi kaynak Cloud HSM kaynağına veya zaten etkinleştirilmiş herhangi bir Cloud HSM kaynağına geri yükleme. Geri yüklemek için, tercih edilen herhangi bir bölgede başka bir etkinleştirilmemiş Cloud HSM kaynağı kullanın. Aksi takdirde geri yükleme işlemi başarısız olur ve hedef Cloud HSM kaynağını işlevsiz hale getirir.
  • Depolama kapsayıcıları için paylaşılan erişim imzası (SAS) belirteçleri aracılığıyla yedekleme ve geri yükleme.

Yönetilen kimliği uygulayın ve bir depolama hesabı oluşturun

Azure Cloud HSM'ye yönetilen kimlik uygulamak ve HSM yedeklemeleri için bir depolama hesabı oluşturmak için aşağıdaki bölümlerde yer alan kodu kullanın.

Yönetilen bir kimlik oluştur

Mevcut Azure Cloud HSM kaynak grubunuzda kullanıcı tarafından atanan yeni bir yönetilen kimlik oluşturun. Bu öğreticide, yönetilen kimliğin adı olarak CHSM-MSI ve kaynak grubunun adı olarak CHSM-SERVER-RG kullanabilirsiniz. CHSM-SERVER-RG , Azure Cloud HSM ekleme kılavuzunun örnek kaynak grubu olarak kullandığı addır.

# 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

Yönetilen kimliği Cloud HSM kaynaklarına uygulama

Azure Cloud HSM yedekleme ve geri yükleme işlemleri için hem kaynak hem de hedef Cloud HSM kaynaklarınıza yönetilen kimlik uygulamanız gerekir.

Uyarı

Hedef Cloud HSM kaynağı, NotActivated durumunda olmalıdır.

Her Bulut HSM kümesinin tek bir yönetilen kimliği olabilir. Hem kaynak hem de hedef için aynı yönetilen kimliği kullanabilir veya her birinde farklı bir yönetilen kimlik kullanabilirsiniz. Bu öğreticideki örnek, hem kaynak hem de hedef Cloud HSM kaynaklarına aynı yönetilen kimliği uygular.

# 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

Özel sanal ağda depolama hesabı oluşturma

Özel bir sanal ağ içinde bir depolama hesabı ve ilişkili blob kapsayıcısı tanımlayıp yapılandırarak Azure Cloud HSM yedekleme işlemleri için depolama altyapısını ayarlayın.

Abonelik kimliğini tanımlayarak başlayın. Konum, ürün katmanı ve tür de dahil olmak üzere depolama hesabı parametrelerini belirtin.

bu işlem, yeni bir kaynak grubu oluşturmayı, belirlenen bir sanal ağa erişimi kısıtlamak için ağ kurallarıyla depolama hesabı oluşturmayı ve özel uç nokta üzerinden güvenliği geliştirmeyi içerir. Depolama Blob Veri Katkıcısı rolü, yedekleme görevleri için uygun izinleri sağlamak üzere belirtilen kimliğe atanır.

Aşağıdaki kodda aşağıdaki örnekleri kullanabilirsiniz:

  • CHSM-BACKUP-RG kaynak grubunun adı için
  • chsmbackup00 depolama hesabının adı için
  • Blob kapsayıcısının adı için chsmbackupcontainer00

Hem kaynak hem de hedef için okuma/yazma erişimi verilir.

Önemli

Gereken en düşük RBAC rolü, Depolama Blob Verileri Katkıda Bulunanı'dır. Genel depolama hesaplarına genel İnternet üzerinden erişilebilir, bu nedenle gelişmiş güvenlik için depolama hesabınızı özel bir sanal ağın arkasına yerleştirin.

# 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

Portal aracılığıyla paylaşılan anahtar erişimini devre dışı bırakma ayarı

Güvenliği artırmak için paylaşılan anahtar erişimini devre dışı bırakın:

  1. Azure portalında Azure depolama hesabınıza gidin.
  2. Ayarlar>Yapılandırma'yı seçin.
  3. Depolama hesabı anahtarı erişimine izin ver seçeneğini Devre Dışı olarak ayarlayın.

Kaynak Cloud HSM kaynağından yedekleme başlatma

Yedekleme API'sinin uç noktasına depolama kapsayıcısı URI'siyle bir POST istek göndererek kaynak Cloud HSM kaynağınız için bir yedekleme başlatın. Yedeklemenin ilerleme durumunu izlemek için, yanıt üst bilgilerindeki URL'ye bir GET isteği gönderin.

Aşağıdaki betik, yanıt içerisinden yedekleme işi durumunu ve tekil yedekleme kimliğini alır ve gösterir. Durum, yedeklemenin başladığını onaylar ve ilerleme durumunu izler.

# 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

Beklenen çıkış: $backupStatus döndürür Succeededve $backupID başlattığınız yedekleme için karşılık gelen kimliği gösterir.

Hedef Cloud HSM kaynağına geri yükleme başlatma

Depolama kapsayıcısı URI'si ve yedekleme kimliği de dahil olmak üzere gerekli geri yükleme özelliklerini sağlayarak hedef Cloud HSM kaynağı için bir geri yükleme işlemi başlatın.

Aşağıdaki betik, geri yükleme API'sinin uç noktası için doğru URI'yi oluşturur ve geri yüklemeyi başlatmak için bir POST istek gönderir. Geri yükleme ilerleme durumunu izlemek için yanıt üst bilgilerinde belirtilen konuma bir GET istek gönderin ve tamamlanmasını onaylamak için geri yükleme işi durumunu alı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

Beklenen çıkış: $jobStatus döndürmelidir Succeeded.

Hedef Cloud HSM kaynağına geri yüklemeyi doğrulama

Bir süre işlem yapıldıktan sonra, geri yükleme işlemi Succeeded belirtmelidir ve hedef Cloud HSM kaynağı Active etkinleştirme durumunu göstermelidir. Geri yükleme işlemini gerçekleştirdiğiniz hedef Cloud HSM kaynağına bağlandığınızda, azcloudhsm_mgmt_util ve getClusterInfo işlemlerini çalıştırmak, üç düğümün de etkin ve kullanılabilir olduğunu göstermelidir.

Önemli

Yönetim sanal makinesinden Azure Cloud HSM'ye bağlanırken, geri yüklemeyi gerçekleştirdiğiniz doğru hedef Cloud HSM kaynağına işaret etmek için hem istemci hem de yönetim yapılandırma dosyalarını (azcloudhsm_resource.cfg) güncelleştirin.

  1. Aşağıdaki komutlardan birini çalıştırarak başlayın azcloudhsm_mgmt_util .

    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. Yönetim araçlarının içinde istem değişir cloudmgmt. Küme bilgilerini listelemek için şunu çalıştırın:

    getClusterInfo  
    

    Beklenen çıkış: getClusterInfo Azure Cloud HSM kümeniz için üç düğümün de kullanılabilir olduğunu onaylamanız gerekir.

  3. Yönetim aracını kapatın ve ardından Azure Cloud HSM aracını (azcloudhsm_util ) açın. CU olarak oturum açın ve findKey komutunu çalıştırın.

    Önemli

    Anahtar tanıtıcıları dinamik olduklarından değişebilir. Ancak, anahtar kimlikleri değişmez.

    Linux:

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

    Windows:

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