Konfigurieren einer einzelnen öffentlichen IP-Adresse für eingehenden und ausgehenden Datenverkehr in eine und von einer Containergruppe
Durch Einrichten einer Containergruppe mit einer extern zugänglichen IP-Adresse können externe Clients die IP-Adresse für den Zugriff auf einen Container in der Gruppe nutzen. So kann beispielsweise ein Browser auf eine Web-App zugreifen, die in einem Container ausgeführt wird. Derzeit verwendet eine Containergruppe allerdings eine andere IP-Adresse für den ausgehenden Datenverkehr. Diese ausgehende IP-Adresse wird nicht programmgesteuert verfügbar gemacht, sodass die Überwachung und Konfiguration von Clientfirewallregeln für Containergruppen etwas komplexer ist.
Der vorliegende Artikel führt Sie durch die Schritte zum Konfigurieren einer Containergruppe in einem virtuellen Netzwerk, das in Azure Firewall integriert ist. Indem Sie eine benutzerdefinierte Route zur Containergruppe sowie Firewallregeln einrichten, können Sie Datenverkehr in die und aus der Containergruppe weiterleiten und identifizieren. Der eingehende und ausgehende Containerdatenverkehr verwendet die öffentliche IP-Adresse der Firewall. Mehrere Containergruppen, die im Subnetz des virtuellen Netzwerks bereitgestellt werden, können eine einzelne ausgehende IP-Adresse verwenden.
In diesem Artikel verwenden Sie die Azure-Befehlszeilenschnittstelle (Azure CLI), um die Ressourcen für das Szenario zu erstellen:
- Containergruppen, die in einem delegierten Subnetz im virtuellen Netzwerk bereitgestellt sind
- Eine Azure Firewall-Instanz, die im Netzwerk mit einer statischen öffentlichen IP-Adresse bereitgestellt ist
- Eine benutzerdefinierte Route im Subnetz der Containergruppen
- Eine NAT-Regel für den eingehenden Firewalldatenverkehr und eine Anwendungsregel für den ausgehenden Datenverkehr
Danach überprüfen Sie den Datenverkehr in und aus Beispielcontainergruppen über die Firewall.
Wenn Sie kein Azure-Abonnement haben, erstellen Sie ein kostenloses Azure-Konto, bevor Sie beginnen.
Voraussetzungen
Verwenden Sie die Bash-Umgebung in Azure Cloud Shell. Weitere Informationen finden Sie unter Schnellstart für Bash in Azure Cloud Shell.
Wenn Sie CLI-Referenzbefehle lieber lokal ausführen, installieren Sie die Azure CLI. Wenn Sie Windows oder macOS ausführen, sollten Sie die Azure CLI in einem Docker-Container ausführen. Weitere Informationen finden Sie unter Ausführen der Azure CLI in einem Docker-Container.
Wenn Sie eine lokale Installation verwenden, melden Sie sich mithilfe des Befehls az login bei der Azure CLI an. Führen Sie die in Ihrem Terminal angezeigten Schritte aus, um den Authentifizierungsprozess abzuschließen. Informationen zu anderen Anmeldeoptionen finden Sie unter Anmelden mit der Azure CLI.
Installieren Sie die Azure CLI-Erweiterung beim ersten Einsatz, wenn Sie dazu aufgefordert werden. Weitere Informationen zu Erweiterungen finden Sie unter Verwenden von Erweiterungen mit der Azure CLI.
Führen Sie az version aus, um die installierte Version und die abhängigen Bibliotheken zu ermitteln. Führen Sie az upgrade aus, um das Upgrade auf die aktuelle Version durchzuführen.
Starten von Azure Cloud Shell
Azure Cloud Shell ist eine kostenlose interaktive Shell, mit der Sie die Schritte in diesem Artikel durchführen können. Sie verfügt über allgemeine vorinstallierte Tools und ist für die Verwendung mit Ihrem Konto konfiguriert.
Wählen Sie zum Öffnen von Cloud Shell oben rechts in einem Codeblock einfach die Option Ausprobieren. Sie können Cloud Shell auch auf einem separaten Browsertab starten, indem Sie zu https://shell.azure.com navigieren.
Überprüfen Sie nach dem Öffnen von Cloud Shell, ob Bash für Ihre Umgebung ausgewählt ist. In den folgenden Sitzungen wird die Azure CLI in einer Bash-Umgebung verwendet. Wählen Sie Kopieren aus, um die Codeblöcke zu kopieren. Fügen Sie sie in Cloud Shell ein, und drücken Sie die EINGABETASTE, um sie auszuführen.
Anmelden bei Azure
Cloud Shell wird automatisch unter dem Konto authentifiziert, mit dem die Anmeldung anfänglich erfolgt ist. Verwenden Sie das folgende Skript, um sich mit einem anderen Abonnement anzumelden, und ersetzen Sie <Subscription ID>
durch Ihre Azure-Abonnement-ID. Wenn Sie kein Azure-Abonnement haben, erstellen Sie ein kostenloses Azure-Konto, bevor Sie beginnen.
subscription="<subscriptionId>" # add subscription here
az account set -s $subscription # ...or use 'az login'
Weitere Informationen finden Sie unter Festlegen des aktiven Abonnements oder unter Interaktives Anmelden.
Hinweis
Um das vollständige Skript herunterzuladen, gehen Sie zum vollständigen Skript.
Erste Schritte
Dieses Tutorial verwendet eine Zufallsvariable. Wenn Sie eine vorhandene Ressourcengruppe verwendet haben, ändern Sie den Wert dieser Variablen entsprechend.
resourceGroup=resourceGroup$RANDOM
Azure-Ressourcengruppe: Wenn Sie noch nicht über eine Azure-Ressourcengruppe verfügen, erstellen Sie eine mithilfe des Befehls az group create. Ändern Sie den Wert des Ortes entsprechend.
az group create --name $resourceGroup --location eastus
Bereitstellen von Azure Container Instances (ACI) in einem virtuellen Netzwerk
In der Regel verfügen Sie bereits über ein virtuelles Azure-Netzwerk, in der Sie eine Containergruppe bereitstellen können. Zum Zweck der Veranschaulichung: Die folgenden Befehle erstellen während der Erstellung der Containergruppe ein virtuelles Netzwerk und ein Subnetz. Das Subnetz wird an Azure Container Instances delegiert.
Die Containergruppe führt eine kleine Web-App aus dem Image aci-helloworld
aus. Wie in anderen Artikeln der Dokumentation beschrieben, verpackt dieses Image eine kleine in Node.js geschriebene Web-App für eine statische HTML-Seite.
Erstellen Sie die Containergruppe mit dem Befehl az container create:
az container create \
--name appcontainer \
--resource-group $resourceGroup \
--image mcr.microsoft.com/azuredocs/aci-helloworld \
--vnet aci-vnet \
--vnet-address-prefix 10.0.0.0/16 \
--subnet aci-subnet \
--subnet-address-prefix 10.0.0.0/24
Tipp
Passen Sie den Wert von --subnet address-prefix
an den IP-Adressraum an, den Sie in Ihrem Subnetz benötigen. Das kleinste unterstützte Subnetz ist /29 und stellt acht IP-Adressen bereit. Einige IP-Adressen sind für die Verwendung durch Azure reserviert.
Zur Verwendung in einem späteren Schritt rufen Sie die private IP-Adresse der Containergruppe ab, indem Sie den Befehl [az container show][az-container-show] ausführen:
aciPrivateIp="$(az container show --name appcontainer \
--resource-group $resourceGroup \
--query ipAddress.ip --output tsv)"
Bereitstellen von Azure Firewall im Netzwerk
Verwenden Sie in den folgenden Abschnitten die Azure CLI, um eine Azure Firewall-Instanz im virtuellen Netzwerk bereitzustellen. Hintergrundinformationen dazu finden Sie im Tutorial: Bereitstellen und Konfigurieren von Azure Firewall über das Azure-Portal.
Verwenden Sie zunächst den Befehl az network vnet subnet create, um ein Subnetz namens AzureFirewallSubnet für die Firewall hinzuzufügen. AzureFirewallSubnet ist der erforderliche Name dieses Subnetzes.
az network vnet subnet create \
--name AzureFirewallSubnet \
--resource-group $resourceGroup \
--vnet-name aci-vnet \
--address-prefix 10.0.1.0/26
Verwenden Sie die folgenden Azure CLI-Befehle, um eine Firewall im Subnetz zu erstellen.
Fügen Sie der Azure CLI mit dem Befehl az extension add die Firewallerweiterung hinzu, falls diese noch nicht installiert ist:
az extension add --name azure-firewall
Erstellen Sie die Firewallressourcen mithilfe des Befehls az network firewall create:
az network firewall create \
--name myFirewall \
--resource-group $resourceGroup \
--location eastus
az network public-ip create \
--name fw-pip \
--resource-group $resourceGroup \
--location eastus \
--allocation-method static \
--sku standard
az network firewall ip-config create \
--firewall-name myFirewall \
--name FW-config \
--public-ip-address fw-pip \
--resource-group $resourceGroup \
--vnet-name aci-vnet
Aktualisieren Sie die Firewallkonfiguration mit dem Befehl az network firewall update:
az network firewall update \
--name myFirewall \
--resource-group $resourceGroup
Rufen Sie mit dem Befehl az network firewall ip-config list die private IP-Adresse der Firewall ab. Diese private IP-Adresse wird in einem späteren Befehl verwendet.
fwPrivateIp="$(az network firewall ip-config list \
--resource-group $resourceGroup \
--firewall-name myFirewall \
--query "[].privateIpAddress" --output tsv)"
Rufen Sie mit dem Befehl az network public-ip show die öffentliche IP-Adresse ab. Diese öffentliche IP-Adresse wird in einem späteren Befehl verwendet.
fwPublicIp="$(az network public-ip show \
--name fw-pip \
--resource-group $resourceGroup \
--query ipAddress --output tsv)"
Definieren einer benutzerdefinierten Route im ACI-Subnetz
Um Datenverkehr an die Azure Firewall-Instanz umzuleiten, definieren Sie eine benutzerdefinierte Route im ACI-Subnetz. Weitere Informationen finden Sie unter Weiterleiten von Netzwerkdatenverkehr.
Erstellen einer Routingtabelle
Führen Sie zunächst den folgenden Befehl az network route-table create aus, um die Routingtabelle zu erstellen. Erstellen Sie die Routingtabelle in derselben Region, in der sich auch das virtuelle Netzwerk befindet.
az network route-table create \
--name Firewall-rt-table \
--resource-group $resourceGroup \
--location eastus \
--disable-bgp-route-propagation true
Erstellen der Route
Führen Sie az network-route-table route create aus, um eine Route in der Routingtabelle zu erstellen. Um Datenverkehr an die Firewall weiterzuleiten, legen Sie den Typ des nächsten Hops auf VirtualAppliance
fest, und übergeben Sie die private IP-Adresse der Firewall als Adresse des nächsten Hops.
az network route-table route create \
--resource-group $resourceGroup \
--name DG-Route \
--route-table-name Firewall-rt-table \
--address-prefix 0.0.0.0/0 \
--next-hop-type VirtualAppliance \
--next-hop-ip-address $fwPrivateIp
Zuordnen der Routingtabelle zum ACI-Subnetz
Führen Sie den Befehl az network vnet subnet update aus, um die Routingtabelle dem Subnetz zuzuordnen, das an Azure Container Instances delegiert wurde.
az network vnet subnet update \
--name aci-subnet \
--resource-group $resourceGroup \
--vnet-name aci-vnet \
--address-prefixes 10.0.0.0/24 \
--route-table Firewall-rt-table
Konfigurieren von Regeln in der Firewall
Standardmäßig verweigert (blockiert) Azure Firewall eingehenden und ausgehenden Datenverkehr.
Konfigurieren einer NAT-Regel zum ACI-Subnetz in der Firewall
Erstellen Sie eine NAT-Regel in der Firewall, um eingehenden Internetdatenverkehr in den Anwendungscontainer, den Sie zuvor im Netzwerk gestartet haben, zu übersetzen und zu filtern. Details dazu finden Sie unter Filtern von eingehendem Internetdatenverkehr mit Azure Firewall-DNAT.
Erstellen Sie mit dem Befehl az network firewall nat-rule create eine NAT-Regel und eine NAT-Sammlung:
az network firewall nat-rule create \
--firewall-name myFirewall \
--collection-name myNATCollection \
--action dnat \
--name myRule \
--protocols TCP \
--source-addresses '*' \
--destination-addresses $fwPublicIp \
--destination-ports 80 \
--resource-group $resourceGroup \
--translated-address $aciPrivateIp \
--translated-port 80 \
--priority 200
Fügen Sie nach Bedarf NAT-Regeln hinzu, um Datenverkehr an andere IP-Adressen im Subnetz zu filtern. Beispielsweise könnten andere Containergruppen im Subnetz IP-Adressen für eingehenden Datenverkehr verfügbar machen, oder der Containergruppe könnten nach einem Neustart andere interne IP-Adressen zugewiesen werden.
Erstellen einer ausgehenden Anwendungsregel in der Firewall
Führen Sie den Befehl az network firewall application-rule create aus, um eine Ausgangsregel in der Firewall zu erstellen. Diese Beispielregel lässt den Zugriff aus dem Subnetz, das an Azure Container Instances delegiert wurde, auf den vollqualifizierten Domänennamen checkip.dyndns.org
zu. In einem späteren Schritt wird HTTP-Zugriff auf die Website genutzt, um die ausgehenden IP-Adressen aus Azure Container Instances zu bestätigen.
az network firewall application-rule create \
--collection-name myAppCollection \
--firewall-name myFirewall \
--name Allow-CheckIP \
--protocols Http=80 Https=443 \
--resource-group $resourceGroup \
--target-fqdns checkip.dyndns.org \
--source-addresses 10.0.0.0/24 \
--priority 200 \
--action Allow
Testen des Containergruppenzugriffs über die Firewall
Mit den folgenden Abschnitten wird überprüft, ob das an Azure Container Instances delegierte Subnetz ordnungsgemäß hinter der Azure Firewall-Instanz konfiguriert ist. In den vorherigen Schritten wurde eingehender Datenverkehr an das Subnetz und ausgehender Datenverkehr aus dem Subnetz durch die Firewall geleitet.
Testen des eingehenden Datenverkehrs an eine Containergruppe
Testen Sie den eingehenden Datenverkehr an den appcontainer
, der im virtuellen Netzwerk ausgeführt wird, indem Sie zur öffentlichen IP-Adresse der Firewall wechseln. Zuvor haben Sie die öffentliche IP-Adresse in der Variable „$FW_PUBLIC_IP“ gespeichert:
echo $fwPublicIp
Die Ausgabe sieht in etwa wie folgt aus:
52.142.18.133
Sofern die NAT-Regel in der Firewall ordnungsgemäß konfiguriert ist, wird Folgendes angezeigt, wenn Sie die öffentliche IP-Adresse der Firewall in Ihren Browser eingeben:
Testen des ausgehenden Datenverkehrs aus einer Containergruppe
Stellen Sie den folgenden Beispielcontainer im virtuellen Netzwerk bereit. Bei Ausführung des Containers sendet er eine einzelne HTTP-Anforderung an http://checkip.dyndns.org
, wodurch die IP-Adresse des Absenders (ausgehende IP-Adresse) angezeigt wird. Wenn die Anwendungsregel in der Firewall ordnungsgemäß konfiguriert ist, wird die öffentliche IP-Adresse der Firewall zurückgegeben.
az container create \
--resource-group $resourceGroup \
--name testegress \
--image mcr.microsoft.com/azuredocs/aci-tutorial-sidecar \
--command-line "curl -s http://checkip.dyndns.org" \
--restart-policy OnFailure \
--vnet aci-vnet \
--subnet aci-subnet
Sehen Sie sich die Containerprotokolle an, um zu überprüfen, ob die IP-Adresse mit der öffentlichen IP-Adresse der Firewall übereinstimmt.
az container logs \
--resource-group $resourceGroup \
--name testegress
Die Ausgabe Die Ausgabe lautet in etwa wie folgt:
<html><head><title>Current IP Check</title></head><body>Current IP Address: 52.142.18.133</body></html>
Bereinigen von Ressourcen
Wenn Sie die Ressourcengruppe und die dazugehörigen Ressourcen nicht mehr benötigen, können Sie sie wie folgt mit dem Befehl az group delete entfernen. Der Parameter --no-wait
gibt die Steuerung an die Eingabeaufforderung zurück, ohne zu warten, bis der Vorgang abgeschlossen ist. Der Parameter --yes
bestätigt, dass Sie die Ressourcen ohne weitere Aufforderung löschen möchten.
az group delete --name $resourceGroup --yes --no-wait
Nächste Schritte
In diesem Artikel haben Sie Containergruppen in einem virtuellen Netzwerk hinter eine Azure-Firewall eingerichtet. Sie haben eine benutzerdefinierte Route sowie NAT- und Anwendungsregeln in der Firewall konfiguriert. Mit dieser Konfiguration haben Sie eine einzelne, statische IP-Adresse für den eingehenden und ausgehenden Datenverkehr in Azure Container Instances eingerichtet.
Weitere Informationen zum Verwalten von Datenverkehr und Schützen von Azure-Ressourcen finden Sie in der Dokumentation zu Azure Firewall.