Crittografare una macchina virtuale Windows con Azure PowerShell

Questo script crea un Azure Key Vault sicuro, le chiavi di crittografia, un'entità servizio di Azure Active Directory e una macchina virtuale (VM) Windows. La VM viene quindi crittografata usando la chiave di crittografia del Key Vault e le credenziali dell'entità servizio.

Questo esempio richiede il modulo Azure PowerShell 4.0 o versioni successive. Eseguire Get-Module -ListAvailable AzureRM per trovare la versione. Se è necessario eseguire l'installazione o l'aggiornamento, vedere come installare il modulo Azure PowerShell.

Eseguire Login-AzureRmAccount per creare una connessione con Azure.

Se non si ha una sottoscrizione di Azure, creare un account gratuito prima di iniziare.

Script di esempio

# Edit these global variables with you unique Key Vault name, resource group name and location
$keyVaultName = "myKeyVault"
$rgName = "myResourceGroup"
$location = "East US"

# Register the Key Vault provider and create a resource group
Register-AzureRmResourceProvider -ProviderNamespace "Microsoft.KeyVault"
New-AzureRmResourceGroup -Location $location -Name $rgName

# Create a Key Vault and enable it for disk encryption
New-AzureRmKeyVault `
    -Location $location `
    -ResourceGroupName $rgName `
    -VaultName $keyVaultName `
    -EnabledForDiskEncryption

# Create a key in your Key Vault
Add-AzureKeyVaultKey `
    -VaultName $keyVaultName `
    -Name "myKey" `
    -Destination "Software"

# Create Azure Active Directory app and service principal
$appName = "My App"
$securePassword = "P@ssword!"
$app = New-AzureRmADApplication -DisplayName $appName `
    -HomePage "https://myapp.contoso.com" `
    -IdentifierUris "https://contoso.com/myapp" `
    -Password $securePassword
New-AzureRmADServicePrincipal -ApplicationId $app.ApplicationId

# Set permissions to allow your AAD service principal to read keys from Key Vault
Set-AzureRmKeyVaultAccessPolicy -VaultName $keyvaultName `
    -ServicePrincipalName $app.ApplicationId  `
    -PermissionsToKeys "all" `
    -PermissionsToSecrets "all"

# Define virtual networking for a new virtual machine
$subnetConfig = New-AzureRmVirtualNetworkSubnetConfig `
    -Name mySubnet `
    -AddressPrefix "192.168.1.0/24"
$vnet = New-AzureRmVirtualNetwork `
    -ResourceGroupName $rgName `
    -Location $location `
    -Name myVnet `
    -AddressPrefix "192.168.0.0/16" `
    -Subnet $subnetConfig

# Create a public IP address for the virtual machine
$pip = New-AzureRmPublicIpAddress `
    -ResourceGroupName $rgName `
    -Location $location `
    -AllocationMethod "Static" `
    -IdleTimeoutInMinutes "4" `
    -Name "mypublicdns$(Get-Random)"

# Create a Network Security Group and RDP rule
$nsgRuleRDP = New-AzureRmNetworkSecurityRuleConfig `
    -Name "myNetworkSecurityGroupRuleRDP" `
    -Protocol "Tcp" `
    -Direction "Inbound" `
    -Priority "1000" `
    -SourceAddressPrefix * `
    -SourcePortRange * `
    -DestinationAddressPrefix * `
    -DestinationPortRange "3389" `
    -Access "Allow"
$nsg = New-AzureRmNetworkSecurityGroup `
    -ResourceGroupName $rgName `
    -Location $location `
    -Name "myNetworkSecurityGroup" `
    -SecurityRules $nsgRuleRDP

# Create a virtual network interface card
$nic = New-AzureRmNetworkInterface `
    -Name "myNic" `
    -ResourceGroupName $rgName `
    -Location $location `
    -SubnetId $vnet.Subnets[0].Id `
    -PublicIpAddressId $pip.Id `
    -NetworkSecurityGroupId $nsg.Id

# Prompt for admin credentials to add to new virtual machine
$cred = Get-Credential

# Create a virtual machine
$vmName = "myVM"
$vmConfig = New-AzureRmVMConfig -VMName $vmName -VMSize "Standard_D1" | `
    Set-AzureRmVMOperatingSystem -Windows -ComputerName "myVM" -Credential $cred | `
    Set-AzureRmVMSourceImage -PublisherName "MicrosoftWindowsServer" `
        -Offer "WindowsServer" -Skus "2016-Datacenter" -Version "latest" | `
    Add-AzureRmVMNetworkInterface -Id $nic.Id
New-AzureRmVM -ResourceGroupName $rgName -Location $location -VM $vmConfig

# Define required information for our Key Vault and keys
$keyVault = Get-AzureRmKeyVault -VaultName $keyVaultName -ResourceGroupName $rgName;
$diskEncryptionKeyVaultUrl = $keyVault.VaultUri;
$keyVaultResourceId = $keyVault.ResourceId;
$keyEncryptionKeyUrl = (Get-AzureKeyVaultKey -VaultName $keyVaultName -Name "myKey").Key.kid;

# Encrypt our virtual machine
Set-AzureRmVMDiskEncryptionExtension `
    -ResourceGroupName $rgName `
    -VMName $vmName `
    -AadClientID $app.ApplicationId `
    -AadClientSecret $securePassword `
    -DiskEncryptionKeyVaultUrl $diskEncryptionKeyVaultUrl `
    -DiskEncryptionKeyVaultId $keyVaultResourceId `
    -KeyEncryptionKeyUrl $keyEncryptionKeyUrl `
    -KeyEncryptionKeyVaultId $keyVaultResourceId

# View encryption status
Get-AzureRmVmDiskEncryptionStatus  -ResourceGroupName $rgName -VMName $vmName

Pulire la distribuzione

Eseguire questo comando per rimuovere il gruppo di risorse, la macchina virtuale e tutte le risorse correlate.

Remove-AzureRmResourceGroup -Name myResourceGroup

Spiegazione dello script

Questo script usa i comandi seguenti per creare la distribuzione. Ogni elemento della tabella include collegamenti alla documentazione specifica del comando.

Comando Note
New-AzureRmResourceGroup Consente di creare un gruppo di risorse in cui sono archiviate tutte le risorse.
New-AzureRmKeyVault Crea un Azure Key Vault per archiviare i dati protetti, ad esempio le chiavi di crittografia.
Add-AzureKeyVaultKey Crea una chiave di crittografia in Key Vault.
New-AzureRmADServicePrincipal Crea un'entità servizio di Azure Active Directory per autenticare in modo sicuro e controllare l'accesso alle chiavi di crittografia.
Set-AzureRmKeyVaultAccessPolicy Imposta le autorizzazioni in Key Vault per concedere l'accesso dell'entità servizio alle chiavi di crittografia.
New-AzureRmVirtualNetworkSubnetConfig Crea una configurazione di subnet. Questa configurazione viene usata con il processo di creazione della rete virtuale.
New-AzureRmVirtualNetwork Crea una rete virtuale.
New-AzureRmPublicIpAddress Crea un indirizzo IP pubblico.
New-AzureRmNetworkSecurityRuleConfig Crea una configurazione di regola del gruppo di sicurezza di rete. Questa configurazione viene usata per creare una regola NSG quando viene creato il gruppo di sicurezza di rete.
New-AzureRmNetworkSecurityGroup Crea un gruppo di sicurezza di rete.
Get-AzureRmVirtualNetworkSubnetConfig Ottiene informazioni sulla subnet. Queste informazioni vengono usate durante la creazione di un'interfaccia di rete.
New-AzureRmNetworkInterface Crea un'interfaccia di rete.
New-AzureRmVMConfig Crea una configurazione di VM. Questa configurazione include informazioni quali il nome della VM, il sistema operativo e le credenziali amministrative. La configurazione viene usata durante la creazione della VM.
New-AzureRmVM Creare una macchina virtuale.
Get-AzureRmKeyVault Ottiene le informazioni necessarie in Key Vault
Set-AzureRmVMDiskEncryptionExtension Abilita la crittografia in una VM usando le credenziali dell'entità servizio e la chiave di crittografia.
Get-AzureRmVmDiskEncryptionStatus Mostra lo stato del processo di crittografia della VM.
Remove-AzureRmResourceGroup Rimuove un gruppo di risorse e tutte le risorse contenute al suo interno.

Passaggi successivi

Per altre informazioni sul modulo Azure PowerShell, vedere la documentazione di Azure PowerShell.

Altri esempi di script PowerShell della macchina virtuale sono reperibili nella documentazione della VM Windows di Azure.