Zugriff von Pods auf den Endpunkt des Azure Instance Metadata Service (IMDS) blockieren (Vorschau)

Standardmäßig können alle Pods, die in einem Azure Kubernetes Service (AKS)-Cluster ausgeführt werden, auf den Azure Instance Metadata Service (IMDS)-Endpunkt zugreifen. Sie können jetzt optional den Zugriff auf den IMDS-Endpunkt von Ihren Azure Kubernetes Service (AKS)-Clustern einschränken, um die Sicherheit (Vorschau) zu verbessern.

Wichtig

AKS-Previewfunktionen sind im Selbstbedienungsmodus auf Opt-in-Basis verfügbar. Vorschauversionen werden in der jeweils verfügbaren Form bereitgestellt und sind nicht Bestandteil der Service-Level-Agreements und der beschränkten Garantie. AKS-Vorschauversionen werden vom Kundensupport nach bestem Bemühen teilweise unterstützt. Daher sind diese Funktionen nicht für die Verwendung in der Produktion vorgesehen. Weitere Informationen finden Sie in den folgenden Supportartikeln:

Informationen zur IMDS-Einschränkung für AKS-Cluster

Azure IMDS ist eine REST-API, die Informationen zu derzeit ausgeführten Instanzen virtueller Computer bereitstellt. Hierzu gehören die SKU, der Speicher, Netzwerkkonfigurationen und bevorstehende Wartungsereignisse.

Die IMDS-REST-API ist in einer bekannten, nicht routingfähigen IP-Adresse (169.254.169.254) verfügbar, auf die standardmäßig von allen Pods zugegriffen werden kann, die in einem AKS-Cluster ausgeführt werden. Dieser Standardzugriff führt zu bestimmten Sicherheitsrisiken für einen AKS-Cluster:

  • Böswillige benutzende Personen können den Dienst ausnutzen, um vertrauliche Informationen wie Token und andere Plattforminformationen zu erhalten, was zu Informationslecks führt.
  • Potenzielle Authentifizierungsrisiken werden dann verfügbar gemacht, da Anwendungen diese Anmeldeinformationen missbrauchen könnten.

Sie können jetzt festlegen, den Zugriff auf den IMDS-Endpunkt für Pods zu beschränken, die in Ihrem Cluster ausgeführt werden und nicht das Hostnetzwerk verwenden. Pods ohne Host-Netzwerk haben hostNetwork in ihren Spezifikationen auf false gesetzt. Wenn die IMDS-Einschränkung aktiviert ist, können nicht hostbasierte Netzwerkpods nicht auf den IMDS-Endpunkt zugreifen oder OAuth 2.0-Token für die Autorisierung durch eine verwaltete Identität erwerben. Pods, die nicht das Hostnetzwerk verwenden, sollten Microsoft Entra Workload ID verwenden, sobald die IMDS-Einschränkung aktiviert ist.

Pods mit Hostnetzwerk haben in ihren Spezifikationen hostNetwork auf true gesetzt. Pods im Hostnetzwerk können auch nach Aktivierung der IMDS-Einschränkung weiterhin auf den IMDS-Endpunkt zugreifen, da sie sich denselben Netzwerk-Namespace mit den Hostprozessen teilen. Lokale Prozesse in Knoten können den IMDS-Endpunkt verwenden, um Instanzmetadaten abzurufen, sodass sie nach der Aktivierung der IMDS-Einschränkung auf den Endpunkt zugreifen dürfen.

Bevor Sie beginnen

  1. Vergewissern Sie sich, dass mindestens die Version 2.61.0 der Azure CLI installiert ist. Führen Sie az --version aus, um die Version zu finden. Informationen zum Durchführen einer Installation oder eines Upgrades finden Sie bei Bedarf unter Installieren der Azure CLI.

  2. Installieren Sie die aks-preview Azure CLI-Erweiterung in Version 7.0.0b2 oder höher.

    • Wenn Sie noch nicht über die Erweiterung aks-preview verfügen, installieren Sie sie mit dem Befehl az extension add.

      az extension add --name aks-preview
      
    • Wenn Sie bereits über die Erweiterung aks-preview verfügen, aktualisieren Sie sie über den Befehl az extension update, um sicherzustellen, dass Sie die neueste Version haben.

      az extension update --name aks-preview
      
  3. Registrieren Sie das Featureflag IMDSRestrictionPreview mithilfe des Befehls az feature register.

    az feature register --namespace Microsoft.ContainerService --name IMDSRestrictionPreview
    

    Überprüfen Sie den Registrierungsstatus mithilfe des Befehls az feature show. Es dauert einige Minuten, bis der Status Registriert angezeigt wird:

    az feature show --namespace Microsoft.ContainerService --name IMDSRestrictionPreview
    

    Wenn der Zustand Registered (Registriert) lautet, aktualisieren Sie die Registrierung des Ressourcenanbieters Microsoft.ContainerService mithilfe des Befehls az provider register:

    az provider register --namespace Microsoft.ContainerService
    
  4. Aktivieren Sie den OIDC-Aussteller auf Ihrem AKS-Cluster. Um einen neuen Cluster zu erstellen oder einen bestehenden Cluster zu aktualisieren, siehe Konfigurieren eines AKS-Clusters mit OIDC-Aussteller.

Begrenzungen

Bestimmte Add-Ons, die auf den IMDS-Endpunkt zugreifen müssen, werden mit IMDS-Einschränkungen nicht unterstützt. Wenn diese Add-Ons in Ihrem Cluster installiert sind, können Sie die IMDS-Einschränkung nicht aktivieren. Wenn die IMDS-Einschränkung aktiviert ist, können Sie umgekehrt diese Add-Ons nicht installieren. Nicht unterstützte Add-Ons umfassen:

  • Application Gateway-Eingangscontroller
  • Azure Monitor für Container (Einblicke in Container)
  • Virtuelle Knoten
  • Azure Policy
  • Clustererweiterungen: Flux (GitOps), Dapr, Azure App Configuration, Azure Machine Learning, Azure Container Storage, Azure Backup
  • KI-Toolchain-Betreiber (Vorschau)
  • Weiterleitung von Bewerbungen
  • Routing für HTTP-Anwendungen
  • Webanwendungs-Routing
  • Analyse der Azure-Kosten

Der Azure Key Vault-Anbieter für den CSI-Treiber (Secrets Store Container Storage Interface) unterstützt jetzt den Workload-Identitätsauthentifizierungsmodus und kann daher mit aktivierter IMDS-Einschränkung arbeiten.

Darüber hinaus werden Windows-Knotenpools derzeit nicht mit IMDS-Einschränkungen unterstützt.

Achtung

Das Aktivieren von IMDS-Einschränkungen für einen Cluster, der nicht unterstützte Add-Ons verwendet, führt zu einem Fehler.

Wichtige Hinweise

Wenn die IMDS-Einschränkung aktiviert ist, verwaltet AKS die IPTables-Regeln auf dem Knoten. Beachten Sie die folgenden Punkte, um zu verhindern, dass die IPTables-Regeln versehentlich entfernt oder manipuliert werden:

  • Die iptables-Regeln können mit SSH oder der Node-Shell geändert werden. Daher empfehlen wir, SSH zu deaktivieren oder eine Richtlinie zu verwenden, um privilegierte Pods zu deaktivieren.
  • Die IPTables-Regeln, die den Zugriff auf IMDS einschränken, werden wiederhergestellt, wenn der Knoten neu abgebildet oder neu gestartet wird.

Aktivieren der IMDS-Einschränkung für einen neuen Cluster

Um die IMDS-Einschränkung für einen neuen Cluster zu aktivieren und den gesamten Datenverkehr von nicht hostbasierten Netzwerkpods an den IMDS-Endpunkt zu blockieren, rufen Sie den Befehl az aks create mit dem Parameter --enable-imds-restriction auf.

az aks create \
    --resource-group myResourceGroup \
    --name myAKSCluster \
    --enable-imds-restriction

Aktivieren der IMDS-Einschränkung für einen vorhandenen Cluster

Um die IMDS-Einschränkung für einen bestehenden Cluster zu aktivieren und den gesamten Datenverkehr von nicht hostbasierten Netzwerkpods an den IMDS-Endpunkt zu blockieren, rufen Sie den Befehl az aks update mit dem Parameter --enable-imds-restriction auf.

az aks update \
    --resource-group myResourceGroup \
    --name myAKSCluster \
    --enable-imds-restriction

Nachdem Sie den Cluster aktualisiert haben, müssen Sie die Knoten in Ihrem Cluster neu aufsetzen mit az aks upgrade --node-image-only, um den Datenverkehr zu den Pods des Clusters zu blockieren.

Überprüfen des Datenverkehrs in einem Cluster mit aktivierter IMDS-Einschränkung

Um zu überprüfen, dass die IMDS-Einschränkung wirksam ist, testen Sie den Datenverkehr zu Pods ohne Host-Netzwerk sowie zu Pods mit Host-Netzwerk.

Überprüfen Sie den Datenverkehr auf einem Pod, der nicht das Host-Netzwerk verwendet.

  1. Erstellen Sie einen Pod mit hostNetwork: false. Wenn Sie nicht über einen Testpod mit hostNetwork: false verfügen, können Sie den folgenden Befehl ausführen, um einen zu erstellen.

    cat <<EOF | kubectl apply -f -
    apiVersion: v1
    kind: Pod
    metadata:
         name: non-host-nw
    spec:
      hostNetwork: false
      containers:
      - name: non-host-nw
        image: mcr.microsoft.com/azurelinux/base/nginx:1
        command: ["sleep", "infinity"]
    EOF
    
  2. Stellen Sie mit kubectl exec eine Verbindung zur Shell im Pod her.

    kubectl exec -it non-host-nw -- /bin/bash
    
  3. Testen Sie den Datenverkehr vom Pod zum IMDS-Endpunkt.

    curl -s -H Metadata:true --connect-timeout 10 --noproxy "*" "http://169.254.169.254/metadata/instance?api-version=2023-11-15" 
    

Warten Sie ca. 10 Sekunden, und beachten Sie, dass der Befehl nichts zurückgibt. Dies bedeutet, dass bei der Verbindung eine Zeitüberschreitung aufgetreten ist und der Pod nicht auf den IMDS-Endpunkt zugreifen kann.

Bereinigen Sie danach den Pod mit kubectl delete pod non-host-nw.

Überprüfen Sie den Datenverkehr eines Pods im Host-Netzwerk

  1. Erstellen Sie einen Pod mit hostNetwork: true. Wenn Sie nicht über einen Testpod mit hostNetwork: true verfügen, können Sie den folgenden Befehl ausführen, um einen zu erstellen.

    cat <<EOF | kubectl apply -f -
    apiVersion: v1
    kind: Pod
    metadata:
      name: host-nw
    spec:
      hostNetwork: true
      containers:
      - name: host-nw
        image: mcr.microsoft.com/azurelinux/base/nginx:1
        command: ["sleep", "infinity"]
    EOF
    
  2. Verbinden Sie sich mit der Shell im Pod mit kubectl exec.

    kubectl exec -it host-nw -- /bin/bash
    
  3. Testen Sie den Datenverkehr vom Pod zum IMDS-Endpunkt

    curl -s -H Metadata:true --noproxy "*" "http://169.254.169.254/metadata/instance?api-version=2023-11-15" 
    

Beachten Sie, dass der Befehl die Ergebnisse zurückgibt, was bedeutet, dass der Pod erwartungsgemäß auf IMDS-Endpunkte zugreifen kann.

Bereinigen Sie danach den Pod mit kubectl delete pod host-nw.

Deaktivieren der IMDS-Einschränkung für einen Cluster

Um die IMDS-Einschränkung für einen vorhandenen Cluster zu deaktivieren und den gesamten Datenverkehr aller Pods an den IMDS-Endpunkt zuzulassen, rufen Sie den Befehl az aks update mit dem Parameter --disable-imds-restriction auf.

az aks update \
    --resource-group myResourceGroup \
    --name myAKSCluster \
    --disable-imds-restriction

Nachdem Sie den Cluster aktualisiert haben, müssen Sie die Knoten in Ihrem Cluster neu aufsetzen, damit der gesamte Datenverkehr zu den Pods des Clusters zugelassen wird.

Siehe auch

Azure Instance Metadata Service für virtuelle Computer