Konfigurieren eines Standarddienstendpunkts mit Azure PowerShell

Dieser Artikel führt Sie durch die Konfiguration eines Standard-Service-Endpunkts mit Azure PowerShell. Man erstellt eine öffentliche IP-Adresse als Netzwerkkennung, verbindet sie mit Service-Endpunkten in einem Subnetz, konfiguriert einen Netzwerksicherheitsperimeter und überprüft die Konnektivität.

Important

Der Standard-Service-Endpunkt befindet sich derzeit in der öffentlichen Vorschau. Diese Vorschau wird ohne Vereinbarung zum Servicelevel bereitgestellt und ist nicht für Produktionsworkloads vorgesehen. Manche Features werden möglicherweise nicht unterstützt oder sind nur eingeschränkt verwendbar. Weitere Informationen finden Sie unter Zusätzliche Nutzungsbedingungen für Microsoft Azure-Vorschauversionen.

Voraussetzungen

  • Ein Azure-Konto mit einem aktiven Abonnement. Wenn Sie kein Konto besitzen, erstellen Sie kostenlos ein Konto.

  • Netzwerk-Mitwirkender oder höher im Abonnement. Konkret brauchst du die Erlaubnis Microsoft.Network/publicIPAddresses/joinServiceEndpointNetworkIdentifier/action . Weitere Informationen finden Sie unter Netzwerksicherheitsperimeter-rollenbasierte Zugriffskontrollanforderungen.

  • Die Funktion AllowServiceEndpointNetworkIdentifier muss in Ihrem Abonnement registriert sein. Verwenden Sie die folgenden Befehle, um die Funktion zu registrieren:

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

    Überprüfen Sie den Registrierungsstatus:

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

    Warten Sie, bis der Bundesstaat als registriert angezeigt wird, und aktualisieren Sie dann die Registrierung des Ressourcenanbieters:

    Register-AzResourceProvider -ProviderNamespace "Microsoft.Network"
    
  • Azure PowerShell (lokale Installation) oder Azure Cloud Shell. Weitere Informationen finden Sie unter Installieren von Azure PowerShell.

Anmelden bei Azure

Stellen Sie eine Verbindung mit Ihrem Azure-Konto her.

Connect-AzAccount

Erstellen einer Ressourcengruppe

Erstellen Sie mit New-AzResourceGroup eine Ressourcengruppe.

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

Erstellen eines virtuellen Netzwerks

Erstelle ein virtuelles Netzwerk und Subnetz mit New-AzVirtualNetwork und 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

Erstellen eines NAT-Gateways

Erstellen Sie ein NAT-Gateway und verbinden Sie es mit Subnet-1, um der virtuellen Maschine eine ausgehende Internetverbindung bereitzustellen.

  1. Erstellen Sie eine öffentliche IP-Adresse für das NAT-Gateway mit New-AzPublicIpAddress.

    $natPipParams = @{
        ResourceGroupName = 'test-rg'
        Name              = 'public-ip-nat'
        Location          = 'EastUS2'
        AllocationMethod  = 'Static'
        Sku               = 'Standard'
    }
    $natPip = New-AzPublicIpAddress @natPipParams
    
  2. Erstellen Sie ein NAT-Gateway mit New-AzNatGateway.

    $natParams = @{
        ResourceGroupName    = 'test-rg'
        Name                 = 'nat-gateway'
        Location             = 'EastUS2'
        IdleTimeoutInMinutes = 4
        Sku                  = 'Standard'
        PublicIpAddress      = $natPip
    }
    $natGateway = New-AzNatGateway @natParams
    
  3. Verbinde das NAT-Gateway mit Subnet-1 , indem du die Subnetzkonfiguration aktualisierst.

    $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
    

Bereitstellen von Azure Bastion

Azure Bastion verwendet Ihren Browser, um mithilfe ihrer privaten IP-Adressen eine Verbindung mit VMs in Ihrem virtuellen Netzwerk über Secure Shell (SSH) oder das Remotedesktopprotokoll (RDP) herzustellen. Die VMs benötigen keine öffentlichen IP-Adressen, keine Clientsoftware und keine spezielle Konfiguration. Weitere Informationen zu Azure Bastion finden Sie unter Azure Bastion.

Note

Die Stundenpreise gelten ab dem Zeitpunkt der Bereitstellung von Bastion, unabhängig von der Nutzung ausgehender Daten. Weitere Informationen dazu finden Sie unter Preise und SKUs. Wenn Sie Bastion als Teil eines Tutorials oder Tests einsetzen, empfehlen wir Ihnen, diese Ressource zu löschen, nachdem Sie diese benutzt haben.

  1. Füge ein AzureBastionSubnet zum virtuellen Netzwerk hinzu.

    $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. Erstelle eine öffentliche IP-Adresse für den Bastion-Host mit New-AzPublicIpAddress.

    $bastionPipParams = @{
        ResourceGroupName = 'test-rg'
        Name              = 'public-ip-bastion'
        Location          = 'EastUS2'
        AllocationMethod  = 'Static'
        Sku               = 'Standard'
    }
    $bastionPip = New-AzPublicIpAddress @bastionPipParams
    
  3. Erstellen Sie mit New-AzBastion einen Azure Bastion-Host.

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

Erstellen eines virtuellen Computers

Erstelle eine VM namens VM-1 im virtuellen Netzwerk. Die virtuelle Maschine wird verwendet, um die Konnektivität nach der Konfiguration zu überprüfen.

Erstellen Sie mit New-AzVM einen virtuellen Computer. Generiere ein SSH-Schlüsselpaar lokal mit ssh-keygen und hänge den öffentlichen Schlüssel an die VM-Konfiguration an.

## 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

Warten Sie, bis die Erstellung des virtuellen Computers abgeschlossen ist, bevor Sie mit dem nächsten Abschnitt fortfahren.

Note

VMs in einem virtuellen Netzwerk mit einem Azure Bastion-Host benötigen keine öffentlichen IP-Adressen. Bastion stellt die öffentliche IP-Adresse bereit und die VMs verwenden private IP-Adressen für die Kommunikation innerhalb des Netzwerks. Sie können die öffentlichen IP-Adressen von allen VMs in von Bastion gehosteten virtuellen Netzwerken entfernen. Weitere Informationen finden Sie unter Trennen einer öffentlichen IP-Adresse von einer Azure-VM.

Note

Azure stellt eine ausgehende Standardzugriffs-IP für VMs bereit, denen keine öffentliche IP-Adresse zugewiesen ist oder die sich im Backendpool eines internen grundlegenden Azure-Lastenausgleichs befinden. Der Mechanismus für Standard-IP-Adressen für den ausgehenden Zugriff stellt eine ausgehende IP-Adresse bereit, die nicht konfigurierbar ist.

Die Standard-IP-Adresse für ausgehenden Zugriff ist deaktiviert, wenn eines der folgenden Ereignisse auftritt:

  • Dem virtuellen Computer wird eine öffentliche IP-Adresse zugewiesen.
  • Die VM wird im Backendpool eines Standard-Load-Balancers platziert, mit oder ohne ausgehende Regeln.
  • Dem Subnetz der VM wird eine Azure NAT Gateway-Ressource zugewiesen.

VMs, die Sie mithilfe von VM-Skalierungsgruppen im Orchestrierungsmodus „Flexibel“ erstellen, haben keinen ausgehenden Standardzugriff.

Weitere Informationen zu ausgehenden Verbindungen in Azure finden Sie unter Standardzugriff in ausgehender Richtung in Azure und Verwenden von SNAT (Source Network Address Translation) für ausgehende Verbindungen.

Werkzeuge auf der virtuellen Maschine installieren

Installiere cifs-utils und Azure CLI auf der virtuellen Maschine, indem du ein Shell-Skript mit Invoke-AzVMRunCommand ausführst.

Speichere das folgende Skript in einer lokalen Datei namens install-tools.sh:

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

Dann führen Sie das Skript auf der virtuellen Maschine aus:

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

Speicherkonto erstellen

Erstelle ein Azure-Speicherkonto mit einer Dateifreigabe, die als PaaS-Ressource zum Testen der Konnektivität über den Service-Endpunkt verwendet wird.

  1. Erstelle ein Speicherkonto mit New-AzStorageAccount. Ersetzen Sie <storage-account-name> durch einen weltweit einzigartigen Namen.

    $storageParams = @{
        ResourceGroupName = 'test-rg'
        Name              = '<storage-account-name>'
        Location          = 'EastUS2'
        SkuName           = 'Standard_LRS'
        Kind              = 'StorageV2'
    }
    $storageAccount = New-AzStorageAccount @storageParams
    
  2. Erstellen Sie eine Dateifreigabe mit New-AzRmStorageShare.

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

Erstellen Sie ein öffentliches IP-Präfix

Erstelle ein öffentliches IP-Präfix und eine öffentliche IP-Adressinstanz als Netzwerkkennung.

  1. Erstelle ein öffentliches IP-Präfix mit New-AzPublicIpPrefix.

    $prefixParams = @{
        ResourceGroupName = 'test-rg'
        Name              = 'public-ip-prefix'
        Location          = 'EastUS2'
        PrefixLength      = 31
        Sku               = 'Standard'
    }
    $ipPrefix = New-AzPublicIpPrefix @prefixParams
    
  2. Erstelle eine öffentliche IP-Adresse aus dem Präfix New-AzPublicIpAddress.

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

Konfigurieren Sie Service-Endpunkte mit einer Netzwerkkennung

Dieser Schritt ist die Schlüsselkonfiguration für einen Standard-Service-Endpunkt. Sie verknüpfen eine öffentliche IP-Adresse als Netzwerkkennung mit Service-Endpunkten in einem Subnetz.

Eine Netzwerkkennung ist eine öffentliche IP-Adresse, die Sie Ihrem Service-Endpunkt zuweisen. Die öffentliche IP wird nicht für Netzwerkrouting-Entscheidungen verwendet. Wenn du innerhalb deines Abos eine öffentliche IP-Adresse erstellst, wird sie automatisch aus dem zugewiesenen IP-Pool deines Dienstes zugewiesen. Dienste innerhalb des Netzwerksicherheitsperimeters nutzen diese öffentliche IP-Adresse, um Service-Endpunkt-Verkehr zu erkennen und entsprechende Zugriffsregeln zu konfigurieren.

Aktualisieren Sie die Subnetzkonfiguration, um mit Set-AzVirtualNetworkSubnetConfig einen Service-Endpunkt mit der öffentlichen IP-Adresse als Netzwerkkennung hinzuzufügen.

$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

Die gleiche öffentliche IP-Adresse kann allen Subnetzen in einer Region innerhalb eines Abonnements zugewiesen werden. Die Netzwerkkennung wird während der öffentlichen Vorschau abonnementübergreifend unterstützt.

Erstellen eines Netzwerksicherheitsperimeters

Erstelle einen Netzwerksicherheitsperimeter und verknüpfe deine PaaS-Ressourcen damit.

  1. Erstellen Sie mit New-AzNetworkSecurityPerimeter einen Netzwerksicherheitsperimeter.

    $nspParams = @{
        ResourceGroupName = 'test-rg'
        Name              = 'nsp-1'
        Location          = 'EastUS2'
    }
    New-AzNetworkSecurityPerimeter @nspParams
    
  2. Erstellen Sie ein Profil im Netzwerksicherheitsperimeter mit New-AzNetworkSecurityPerimeterProfile.

    $profileParams = @{
        ResourceGroupName        = 'test-rg'
        SecurityPerimeterName    = 'nsp-1'
        Name                     = 'profile-1'
    }
    New-AzNetworkSecurityPerimeterProfile @profileParams
    
  3. Verknüpfen Sie Ihr Speicherkonto mit dem Netzwerksicherheitsperimeter mit New-AzNetworkSecurityPerimeterAssociation. Ersetzen Sie <subscription-id> und <storage-account-name> durch Ihre eigenen Werte.

    $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
    

Erstellen Sie eine Regel für eingehenden Zugriff für einen Netzwerksicherheitsperimeter

Fügen Sie eine IP-basierte Eingangszugriffsregel im Netzwerksicherheitsbereich hinzu, um den Datenverkehr von Ihrer Netzwerkkennung zu autorisieren. Diese Regel passt zur öffentlichen IP-Adresse, um die Verbindung zu Ihren Service-Endpunkten zu ermöglichen.

Erstellen Sie eine eingehende Zugriffsregel mit New-AzNetworkSecurityPerimeterAccessRule. Ersetze <public-ip-prefix-range> durch den Adressbereich deines öffentlichen IP-Präfixes.

$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

Um den Adressbereich deines öffentlichen IP-Präfixes zu finden, führe (Get-AzPublicIpPrefix -ResourceGroupName 'test-rg' -Name 'public-ip-prefix').IpPrefix.

Überprüfen der Konnektivität

Verbinden Sie sich mit Ihrer virtuellen Maschine mit Azure Bastion und testen Sie die Verbindung zum Speicherkonto, um zu überprüfen, dass der Datenverkehr durch die Netzwerksicherheitsperimeter-Eingehenszugriffsregel autorisiert wird.

Herstellen einer Verbindung mit dem virtuellen Computer

  1. Suchen Sie im Azure Portal nach Virtuelle Computer und wählen Sie diese aus.

  2. Wählen Sie vm-1 aus.

  3. Wählen Sie "Verbinden" und dann "Über Bastion verbinden" aus.

  4. Auf der Bastion-Seite geben Sie folgende Informationen ein:

    Setting Value
    Authentifizierungstyp Wählen Sie den privaten SSH-Schlüssel aus der lokalen Datei aus.
    Nutzername Geben Sie azureuser ein.
    Lokale Datei Wählen Sie die vm-1-key.pem Datei aus, die Sie beim Erstellen der virtuellen Maschine heruntergeladen haben.
  5. Wählen Sie Verbinden aus.

Testen der Verbindung mit dem Speicherkonto

  1. Melden Sie sich in der SSH-Sitzung auf VM-1 bei der Azure CLI an:

    az login
    
  2. Binden Sie die Azure-Dateifreigabe ein, um die Verbindung mit dem Speicherkonto über den Dienstendpunkt zu überprüfen. Ersetzen Sie <storage-account-name> durch den Namen Ihres Speicherkontos:

    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. Überprüfen Sie, dass die Dateifreigabe erfolgreich gemountet wird:

    df -h /mnt/fileshare-1
    
  4. Um zu bestätigen, dass die Inbound-Access-Regel funktioniert, überprüfen Sie die Netzwerksicherheitsperimeter-Diagnoseprotokolle. Weitere Informationen zu Netzwerksicherheitsperimeter-Diagnoseprotokollen finden Sie unter Diagnostische Protokollierung für Netzwerksicherheitsperimeter.

Bereinigen von Ressourcen

Wenn Sie die in diesem Artikel erstellten Ressourcen nicht mehr benötigen, löschen Sie die Ressourcengruppe:

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

Nächste Schritte