Configura un endpoint di servizio standard usando Azure PowerShell

Questo articolo ti guida nella configurazione di un endpoint di servizio standard usando Azure PowerShell. Si crea un indirizzo IP pubblico come identificatore di rete, si associa agli endpoint dei servizi su una subnet, si configura un perimetro di sicurezza di rete e si convalida la connettività.

Importante

L'endpoint standard del servizio è attualmente in anteprima pubblica. Questa anteprima viene messa a disposizione senza contratto di servizio e non è consigliata per i carichi di lavoro di produzione. Alcune funzionalità potrebbero non essere supportate o potrebbero avere funzionalità limitate. Per ulteriori informazioni, vedere Condizioni supplementari per l'uso delle versioni di anteprima di Microsoft Azure.

Prerequisiti

  • Un account Azure con una sottoscrizione attiva. Se non ne hai uno, crea gratuitamente un account.

  • Ruolo di Collaboratore di rete o superiore nella sottoscrizione. In particolare, è necessario il permesso Microsoft.Network/publicIPAddresses/joinServiceEndpointNetworkIdentifier/action. Per ulteriori informazioni, consulta i requisiti del controllo degli accessi in base al ruolo per il perimetro di sicurezza di rete.

  • La funzione AllowServiceEndpointNetworkIdentifier deve essere registrata nel tuo abbonamento. Usa i seguenti comandi per registrare la funzionalità:

    $featureParams = @{
        FeatureName       = "AllowServiceEndpointNetworkIdentifier"
        ProviderNamespace = "Microsoft.Network"
    }
    Register-AzProviderFeature @featureParams
    

    Verificare lo stato della registrazione:

    $featureParams = @{
        FeatureName       = "AllowServiceEndpointNetworkIdentifier"
        ProviderNamespace = "Microsoft.Network"
    }
    Get-AzProviderFeature @featureParams | Select-Object -Property RegistrationState
    

    Aspetta che lo stato mostri Registrato, poi aggiorna la registrazione del fornitore di risorse:

    Register-AzResourceProvider -ProviderNamespace "Microsoft.Network"
    
  • Azure PowerShell installato localmente o Azure Cloud Shell. Per altre informazioni, vedere Installare Azure PowerShell.

Accedere ad Azure

Connettersi all'account di Azure.

Connect-AzAccount

Creare un gruppo di risorse

Creare un gruppo di risorse con New-AzResourceGroup.

$rgParams = @{
    Name     = 'test-rg'
    Location = 'EastUS2'
}
New-AzResourceGroup @rgParams

Creare una rete virtuale

Crea una rete virtuale e una subnet con New-AzVirtualNetwork e New-AzVirtualNetworkSubnetConfig.

$subnetParams = @{
    Name          = 'subnet-1'
    AddressPrefix = '10.0.0.0/24'
}
$subnet = New-AzVirtualNetworkSubnetConfig @subnetParams

$vnetParams = @{
    ResourceGroupName = 'test-rg'
    Location          = 'EastUS2'
    Name              = 'vnet-1'
    AddressPrefix     = '10.0.0.0/16'
    Subnet            = $subnet
}
New-AzVirtualNetwork @vnetParams

Creare un gateway NAT

Crea un NAT gateway e associalo alla subnet-1 per fornire connettività internet in uscita alla macchina virtuale.

  1. Creare un indirizzo IP pubblico per il gateway NAT con New-AzPublicIpAddress.

    $natPipParams = @{
        ResourceGroupName = 'test-rg'
        Name              = 'public-ip-nat'
        Location          = 'EastUS2'
        AllocationMethod  = 'Static'
        Sku               = 'Standard'
    }
    $natPip = New-AzPublicIpAddress @natPipParams
    
  2. Crea un NAT gateway con New-AzNatGateway.

    $natParams = @{
        ResourceGroupName    = 'test-rg'
        Name                 = 'nat-gateway'
        Location             = 'EastUS2'
        IdleTimeoutInMinutes = 4
        Sku                  = 'Standard'
        PublicIpAddress      = $natPip
    }
    $natGateway = New-AzNatGateway @natParams
    
  3. Associa il NAT gateway alla subnet-1 aggiornando la configurazione della subnet.

    $vnet = Get-AzVirtualNetwork -ResourceGroupName 'test-rg' -Name 'vnet-1'
    
    $subnetUpdateParams = @{
        Name           = 'subnet-1'
        VirtualNetwork = $vnet
        AddressPrefix  = '10.0.0.0/24'
        NatGateway     = $natGateway
    }
    Set-AzVirtualNetworkSubnetConfig @subnetUpdateParams
    
    $vnet | Set-AzVirtualNetwork
    

Distribuire Azure Bastion

Azure Bastion usa il browser per connettersi alle VM nella rete virtuale tramite Secure Shell (SSH) o Remote Desktop Protocol (RDP) usando i relativi indirizzi IP privati. Le macchine virtuali non necessitano di indirizzi IP pubblici, software client o configurazioni speciali. Per altre informazioni su Azure Bastion, vedere Azure Bastion.

Note

La tariffa oraria inizia dal momento in cui viene distribuito Bastion, a prescindere dall'utilizzo dei dati in uscita. Per altre informazioni, vedere Prezzi e SKU. Se si distribuisce Bastion come parte di un'esercitazione o di un test, è consigliabile eliminare questa risorsa dopo averla usata.

  1. Aggiungi AzureBastionSubnet alla rete virtuale.

    $vnet = Get-AzVirtualNetwork -ResourceGroupName 'test-rg' -Name 'vnet-1'
    
        $subnetParams = @{
        Name           = 'AzureBastionSubnet'
        VirtualNetwork = $vnet
        AddressPrefix  = '10.0.1.0/26'
    }
    Add-AzVirtualNetworkSubnetConfig @subnetParams
    
    $vnet | Set-AzVirtualNetwork
    
  2. Crea un indirizzo IP pubblico per l'host di Bastion con New-AzPublicIpAddress.

    $bastionPipParams = @{
        ResourceGroupName = 'test-rg'
        Name              = 'public-ip-bastion'
        Location          = 'EastUS2'
        AllocationMethod  = 'Static'
        Sku               = 'Standard'
    }
    $bastionPip = New-AzPublicIpAddress @bastionPipParams
    
  3. Creare un host Azure Bastion con New-AzBastion.

    $bastionParams = @{
        ResourceGroupName = 'test-rg'
        Name              = 'bastion'
        PublicIpAddress   = $bastionPip
        VirtualNetworkId  = (Get-AzVirtualNetwork -ResourceGroupName 'test-rg' -Name 'vnet-1').Id
        Sku               = 'Basic'
    }
    New-AzBastion @bastionParams
    

Creare una macchina virtuale

Crea una VM chiamata vm-1 nella rete virtuale. La macchina virtuale viene utilizzata per validare la connettività dopo la configurazione.

Creare una macchina virtuale con New-AzVM. Genera localmente una coppia di chiavi SSH e ssh-keygen collega la chiave pubblica alla configurazione della VM.

## Get credentials for virtual machine ##
$cred = Get-Credential

## Generate an SSH key pair locally ##
$sshKeyPath = Join-Path $HOME '.ssh/id_rsa_vm-1'
ssh-keygen -t rsa -b 4096 -f $sshKeyPath -N '""' -q
$sshPublicKey = Get-Content "$sshKeyPath.pub"

## Create network interface for virtual machine ##
$nic = @{
    Name = "nic-1"
    ResourceGroupName = 'test-rg'
    Location = 'eastus2'
    Subnet = $vnet.Subnets[0]
}
$nicVM = New-AzNetworkInterface @nic

## Create a virtual machine configuration ##
$vmsz = @{
    VMName = 'vm-1'
    VMSize = 'Standard_DS1_v2'  
}
$vmos = @{
    ComputerName = 'vm-1'
    Credential = $cred
    DisablePasswordAuthentication = $true
}
$vmimage = @{
    PublisherName = 'Canonical'
    Offer = '0001-com-ubuntu-server-jammy'
    Skus = '22_04-lts-gen2'
    Version = 'latest'     
}
$vmConfig = New-AzVMConfig @vmsz |
    Set-AzVMOperatingSystem @vmos -Linux |
    Set-AzVMSourceImage @vmimage |
    Add-AzVMNetworkInterface -Id $nicVM.Id
$vmConfig = Add-AzVMSshPublicKey -VM $vmConfig -KeyData $sshPublicKey -Path '/home/azureuser/.ssh/authorized_keys'

## Create the virtual machine ##
$vm = @{
    ResourceGroupName = 'test-rg'
    Location = 'eastus2'
    VM = $vmConfig
}
New-AzVM @vm

Attendere il completamento della creazione della macchina virtuale prima di passare alla sezione successiva.

Note

Le macchine virtuali in una rete virtuale con un host Azure Bastion non necessitano di indirizzi IP pubblici. Bastion fornisce l'indirizzo IP pubblico e le macchine virtuali usano indirizzi IP privati per comunicare all'interno della rete. È possibile rimuovere gli indirizzi IP pubblici da qualsiasi macchina virtuale in reti virtuali ospitate da Bastion. Per altre informazioni, vedere Annullare l'associazione di un indirizzo IP pubblico da una macchina virtuale di Azure.

Note

Azure fornisce un indirizzo IP di accesso in uscita predefinito per le macchine virtuali a cui non è assegnato un indirizzo IP pubblico o che si trovano nel pool back-end di un servizio di bilanciamento del carico di base interno Azure. Il meccanismo dell'IP di accesso in uscita predefinito fornisce un IP in uscita non configurabile.

L'IP di accesso in uscita predefinito è disabilitato quando si verifica uno degli eventi seguenti:

  • Alla macchina virtuale viene assegnato un indirizzo IP pubblico.
  • La macchina virtuale è posizionata nel pool back-end di un servizio di bilanciamento del carico standard, con o senza regole in uscita.
  • Una risorsa Gateway NAT di Azure viene assegnata alla subnet della macchina virtuale.

Le macchine virtuali che crei utilizzando set di scalabilità delle macchine virtuali in modalità di orchestrazione flessibile non dispongono di accesso predefinito verso l'esterno.

Per altre informazioni sulle connessioni in uscita in Azure, vedere Accesso in uscita predefinito in Azure e Uso di Source Network Address Translation (SNAT) per le connessioni in uscita.

Installa strumenti sulla macchina virtuale

Installa cifs-utils e interfaccia della riga di comando di Azure sulla macchina virtuale eseguendo uno script shell con Invoke-AzVMRunCommand.

Salva il seguente script in un file locale chiamato install-tools.sh:

#!/bin/bash
sudo apt-get update
sudo apt-get install -y cifs-utils
curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash

Poi esegui lo script sulla macchina virtuale:

$runParams = @{
    ResourceGroupName = 'test-rg'
    VMName            = 'vm-1'
    CommandId         = 'RunShellScript'
    ScriptPath        = './install-tools.sh'
}
Invoke-AzVMRunCommand @runParams

Creare un account di archiviazione

Crea un account di archiviazione Azure con una condivisione file da usare come risorsa PaaS per testare la connettività tramite l'endpoint del servizio.

  1. Crea un account di archiviazione con New-AzStorageAccount. Sostituisci <storage-account-name> con un nome unico a livello globale.

    $storageParams = @{
        ResourceGroupName = 'test-rg'
        Name              = '<storage-account-name>'
        Location          = 'EastUS2'
        SkuName           = 'Standard_LRS'
        Kind              = 'StorageV2'
    }
    $storageAccount = New-AzStorageAccount @storageParams
    
  2. Crea una condivisione file con New-AzRmStorageShare.

    $shareParams = @{
        ResourceGroupName  = 'test-rg'
        StorageAccountName = '<storage-account-name>'
        Name               = 'fileshare-1'
    }
    New-AzRmStorageShare @shareParams
    

Crea un prefisso IP pubblico

Crea un prefisso IP pubblico e un'istanza di indirizzo IP pubblico da usare come identificatore di rete.

  1. Crea un prefisso IP pubblico con New-AzPublicIpPrefix.

    $prefixParams = @{
        ResourceGroupName = 'test-rg'
        Name              = 'public-ip-prefix'
        Location          = 'EastUS2'
        PrefixLength      = 31
        Sku               = 'Standard'
    }
    $ipPrefix = New-AzPublicIpPrefix @prefixParams
    
  2. Crea un indirizzo IP pubblico dal prefisso con New-AzPublicIpAddress.

    $pipParams = @{
        ResourceGroupName = 'test-rg'
        Name              = 'public-ip-1'
        Location          = 'EastUS2'
        AllocationMethod  = 'Static'
        Sku               = 'Standard'
        PublicIpPrefix    = $ipPrefix
    }
    $publicIp = New-AzPublicIpAddress @pipParams
    

Configura gli endpoint di servizio con un identificatore di rete

Questo passaggio è la configurazione chiave per un endpoint di servizio standard. Associ un indirizzo IP pubblico come identificatore di rete agli endpoint dei servizi su una subnet.

Un identificatore di rete è un indirizzo IP pubblico che assegni al tuo endpoint di servizio. L'IP pubblico non viene utilizzato per le decisioni di routing di rete. Quando crei un indirizzo IP pubblico all'interno del tuo abbonamento, viene automaticamente assegnato dal pool IP designato del tuo servizio. I servizi all'interno del perimetro di sicurezza di rete utilizzano questo indirizzo IP pubblico per riconoscere il traffico degli endpoint di servizio e configurare le regole di accesso appropriate.

Aggiorna la configurazione della subnet per aggiungere un endpoint di servizio con l'indirizzo IP pubblico come identificatore di rete utilizzando Set-AzVirtualNetworkSubnetConfig.

$vnet = Get-AzVirtualNetwork -ResourceGroupName 'test-rg' -Name 'vnet-1'

$networkIdentifier = New-Object Microsoft.Azure.Commands.Network.Models.PSResourceId -Property @{
    Id = $publicIp.Id
}

$subnetUpdateParams = @{
    Name              = 'subnet-1'
    VirtualNetwork    = $vnet
    AddressPrefix     = '10.0.0.0/24'
    ServiceEndpoint   = @('Microsoft.Storage')
    NetworkIdentifier = $networkIdentifier
}
Set-AzVirtualNetworkSubnetConfig @subnetUpdateParams

$vnet | Set-AzVirtualNetwork

Note

Lo stesso indirizzo IP pubblico può essere assegnato a tutte le subnet di una regione all'interno di un abbonamento. L'identificatore di rete è supportato in tutte le sottoscrizioni durante l'anteprima pubblica.

Creare un perimetro di sicurezza di rete

Crea un perimetro di sicurezza di rete e associa le tue risorse PaaS ad esso.

  1. Crea un perimetro di sicurezza di rete con New-AzNetworkSecurityPerimeter.

    $nspParams = @{
        ResourceGroupName = 'test-rg'
        Name              = 'nsp-1'
        Location          = 'EastUS2'
    }
    New-AzNetworkSecurityPerimeter @nspParams
    
  2. Crea un profilo nel perimetro di sicurezza di rete con New-AzNetworkSecurityPerimeterProfile.

    $profileParams = @{
        ResourceGroupName        = 'test-rg'
        SecurityPerimeterName    = 'nsp-1'
        Name                     = 'profile-1'
    }
    New-AzNetworkSecurityPerimeterProfile @profileParams
    
  3. Associa il tuo account di archiviazione al perimetro di sicurezza di rete con New-AzNetworkSecurityPerimeterAssociation. Sostituire <subscription-id> e <storage-account-name> con i propri valori.

    $assocParams = @{
        ResourceGroupName        = 'test-rg'
        SecurityPerimeterName    = 'nsp-1'
        AssociationName          = 'assoc-storage'
        AccessMode               = 'Learning'
        ProfileId                = "/subscriptions/<subscription-id>/resourceGroups/test-rg/providers/Microsoft.Network/networkSecurityPerimeters/nsp-1/profiles/profile-1"
        PrivateLinkResourceId    = "/subscriptions/<subscription-id>/resourceGroups/test-rg/providers/Microsoft.Storage/storageAccounts/<storage-account-name>"
    }
    New-AzNetworkSecurityPerimeterAssociation @assocParams
    

Crea una regola di accesso in entrata per il perimetro di sicurezza di rete

Aggiungi una regola di accesso in entrata basata su IP nel perimetro di sicurezza di rete per autorizzare il traffico dal tuo identificatore di rete. Questa regola corrisponde all'indirizzo IP pubblico per abilitare la connettività dai tuoi endpoint di servizio.

Crea una regola di accesso in entrata con New-AzNetworkSecurityPerimeterAccessRule. Sostituisci <public-ip-prefix-range> con l'intervallo di indirizzi del prefisso IP pubblico.

$ruleParams = @{
    ResourceGroupName     = 'test-rg'
    SecurityPerimeterName = 'nsp-1'
    ProfileName           = 'profile-1'
    Name                  = 'allow-se-standard'
    Direction             = 'Inbound'
    AddressPrefix         = '<public-ip-prefix-range>'
}
New-AzNetworkSecurityPerimeterAccessRule @ruleParams

Note

Per trovare l'intervallo di indirizzi del prefisso IP pubblico, esegui (Get-AzPublicIpPrefix -ResourceGroupName 'test-rg' -Name 'public-ip-prefix').IpPrefix.

Convalidare la connettività

Connettiti alla tua macchina virtuale con Azure Bastion e testa la connettività con l'account di archiviazione per verificare che il traffico è autorizzato dalla regola di accesso in entrata del perimetro di sicurezza di rete.

Connettersi alla macchina virtuale

  1. Nel portale Azure cercare e selezionare Macchine virtuali.

  2. Selezionare vm-1.

  3. Selezionare Connetti e quindi Connetti tramite Bastion.

  4. Nella pagina del Bastione , inserisci le seguenti informazioni:

    Setting Value
    Tipo di autenticazione Selezionare Chiave privata SSH da File locale.
    Nome utente Inserisci azureuser.
    File locale Seleziona il file vm-1-key.pem che hai scaricato quando hai creato la macchina virtuale.
  5. Selezionare Connetti.

Effettuare test di connettività all'account di archiviazione

  1. Nella sessione SSH su vm-1, accedi ad interfaccia della riga di comando di Azure:

    az login
    
  2. Monta la condivisione file Azure per validare la connettività con l'account di archiviazione tramite l'endpoint del servizio. Sostituire <storage-account-name> con il nome dell'account di archiviazione:

    sudo mkdir -p /mnt/fileshare-1
    STORAGE_KEY=$(az storage account keys list \
        --resource-group test-rg \
        --account-name <storage-account-name> \
        --query "[0].value" -o tsv)
    
    sudo mount -t cifs //<storage-account-name>.file.core.windows.net/fileshare-1 /mnt/fileshare-1 \
        -o username=<storage-account-name>,password=$STORAGE_KEY,serverino,nosharesock,actimeo=30,mfsymlinks
    
  3. Verifica che la condivisione di file venga montata correttamente:

    df -h /mnt/fileshare-1
    
  4. Per confermare che la regola di accesso in entrata funziona, controlla i log diagnosticali del perimetro di sicurezza di rete. Per ulteriori informazioni sui log diagnostici del perimetro di sicurezza di rete, vedere Registrazione diagnostica per il perimetro di sicurezza di rete.

Pulire le risorse

Quando non hai più bisogno delle risorse create in questo articolo, elimina il gruppo risorse:

Remove-AzResourceGroup -Name 'test-rg' -Force

Passaggi successivi