Zugriffskontrolle für den Amazon-EKS-Cluster-Endpunkt - Amazon EKS

Zugriffskontrolle für den Amazon-EKS-Cluster-Endpunkt

Dieses Thema hilft Ihnen, den privaten Zugriff für den Kubernetes-API-Server-Endpunkt Ihres Amazon-EKS-Clusters zu aktivieren und den öffentlichen Zugriff über das Internet einzuschränken oder vollständig zu deaktivieren.

Wenn Sie einen neuen Cluster erstellen, erstellt Amazon EKS einen Endpunkt für den verwalteten Kubernetes-API-Server, über den Sie mit Ihrem Cluster kommunizieren (mit Kubernetes-Verwaltungswerkzeugen wie kubectl). Standardmäßig ist dieser API-Server-Endpunkt öffentlich im Internet zugänglich und der Zugriff auf den API-Server wird durch eine Kombination aus AWS Identity and Access Management (IAM) und der nativen rollenbasierten Zugriffssteuerung (RBAC) von Kubernetes gesichert.

Sie können den privaten Zugriff auf den Kubernetes-API-Server aktivieren, sodass die gesamte Kommunikation zwischen Ihren Knoten und dem API-Server innerhalb Ihrer VPC bleibt. Sie können die IP-Adressen einschränken, die über das Internet auf Ihren API-Server zugreifen können, oder den Internetzugriff auf den API-Server vollständig deaktivieren.

Anmerkung

Da es sich bei diesem Endpunkt um den Kubernetes-API-Server und nicht um einen traditionellen AWS-PrivateLink-Endpunkt für die Kommunikation mit einer AWS-API handelt, wird er in der Amazon-VPC-Konsole nicht als Endpunkt angezeigt.

Wenn Sie den privaten Endpunktzugriff für Ihren Cluster aktivieren, erstellt Amazon EKS in Ihrem Namen eine privat gehostete Route-53-Zone und ordnet diese der VPC Ihres Clusters zu. Diese private gehostete Zone wird von Amazon EKS verwaltet und wird nicht in den Route-53-Ressourcen Ihres Kontos angezeigt. Damit die private gehostete Zone Datenverkehr ordnungsgemäß an Ihren API-Server weiterleiten kann, müssen enableDnsHostnames und enableDnsSupport für Ihre VPC auf true gesetzt sein und die DHCP-Optionen für Ihre VPC müssen AmazonProvidedDNS in ihrer Domänennamen-Serverliste enthalten. Weitere Informationen finden Sie unter Aktualisieren der DNS-Unterstützung für Ihre VPC im Amazon-VPC-Benutzerhandbuch.

Sie können Ihre Anforderungen für den Zugriff auf Ihre API-Server-Endpunkte definieren, wenn Sie einen neuen Cluster erstellen. Sie können den Zugriff auf die API-Server-Endpunkte für einen Cluster jederzeit aktualisieren.

Ändern des Cluster-Endpunktzugriffs

Verwenden Sie die Verfahren in diesem Abschnitt, um den Endpunktzugriff für einen bestehenden Cluster zu ändern. Die folgende Tabelle zeigt die unterstützten Kombinationen von API-Server-Endpunktzugriffen und das damit verbundene Verhalten.

Zugriffsoptionen für API-Server-Endpunkte
Endpunkt für öffentlichen Zugriff Endpunkt für privaten Zugriff Behavior
Enabled Disabled
  • Dies ist das Standardverhalten für neue Amazon-EKS-Cluster.

  • Kubernetes-API-Anfragen, die aus der VPC Ihres Clusters stammen (z. B. Knoten zur Steuerung der Steuerebenenkommunikation), verlassen zwar die VPC, aber nicht das Netzwerk von Amazon.

  • Ihr Cluster-API-Server ist über das Internet erreichbar. Optional können Sie die CIDR-Blöcke einschränken, die auf den öffentlichen Endpunkt zugreifen können. Wenn Sie den Zugriff auf bestimmte CIDR-Blöcke beschränken, wird empfohlen, auch den privaten Endpunkt zu aktivieren oder sicherzustellen, dass die von Ihnen angegebenen CIDR-Blöcke die Adressen enthalten, von denen Knoten und Fargate-pods (wenn Sie sie verwenden) auf den öffentlichen Endpunkt zugreifen.

Enabled Enabled
  • Kubernetes-API-Anfragen innerhalb der VPC Ihres Clusters (z. B. Knoten zur Steuerung der Steuerebenenkommunikation) verwenden den privaten VPC-Endpunkt.

  • Ihr Cluster-API-Server ist über das Internet erreichbar. Optional können Sie die CIDR-Blöcke einschränken, die auf den öffentlichen Endpunkt zugreifen können.

Disabled Enabled
  • Der gesamte Datenverkehr zu Ihrem Cluster-API-Server muss aus der VPC des Clusters oder einem verbundenen Netzwerk stammen.

  • Es gibt keinen öffentlichen Zugriff auf Ihren API-Server aus dem Internet. Alle kubectl-Befehle müssen aus der VPC oder einem verbundenen Netzwerk stammen. Die Verbindungsoptionen finden Sie unter Zugriff auf einen privaten API-Server.

  • Der API-Server-Endpunkt des Clusters wird von öffentlichen DNS-Servern in eine private IP-Adresse von der VPC aufgelöst. In der Vergangenheit konnte der Endpunkt nur innerhalb der VPC aufgelöst werden.

    Wenn Ihr Endpunkt nicht in eine private IP-Adresse innerhalb der VPC für einen vorhandenen Cluster aufgelöst wird, können Sie:

    • Den öffentlichen Zugriff aktivieren und ihn dann erneut deaktivieren. Sie müssen dies nur einmal für einen Cluster tun und der Endpunkt wird von diesem Punkt an zu einer privaten IP-Adresse aufgelöst.

    • Aktualisieren Sie Ihren Cluster.

Sie können den Endpunktzugriff des Cluster-API-Servers mit der AWS Management Console oder AWS CLI ändern. Wählen Sie die Registerkarte mit dem Namen des Tools aus, mit dem Sie Ihren Endpunktzugriff ändern möchten.

AWS Management Console

So ändern Sie den Zugriff auf Ihren Cluster-API-Server-Endpunkt mit der AWS Management Console

  1. Öffnen Sie die Amazon-EKS-Konsole unter https://console.aws.amazon.com/eks/home#/clusters.

  2. Wählen Sie den Namen des Clusters aus, um Ihre Cluster-Informationen anzuzeigen.

  3. Wählen Sie auf der Registerkarte Networking (Netzwerk) die Option Update (Aktualisieren) aus.

  4. Wählen Sie fürPrivate access (Privater Zugriff) aus, ob der private Zugriff für den Kubernetes-API-Server-Endpunkt Ihres Clusters aktiviert oder deaktiviert werden soll. Wenn Sie den privaten Zugriff aktivieren, verwenden Kubernetes-API-Anfragen aus der VPC Ihres Clusters den privaten VPC-Endpunkt. Sie müssen den privaten Zugriff aktivieren, um den öffentlichen Zugriff zu deaktivieren.

  5. Wählen Sie für Private access (Öffentlicher Zugriff) aus, ob der öffentliche Zugriff für den Kubernetes API-Server-Endpunkt Ihres Clusters aktiviert oder deaktiviert werden soll. Wenn Sie den öffentlichen Zugriff deaktivieren, kann der Kubernetes-API-Server Ihres Clusters nur Anfragen aus der VPC des Clusters empfangen.

  6. (Optional) Wenn Sie Öffentlicher Zugriff aktiviert haben, können Sie angeben, welche Adressen aus dem Internet mit dem öffentlichen Endpunkt kommunizieren können. Wählen Sie Erweiterte Einstellungen aus. Geben Sie einen CIDR-Block ein, z. B. <203.0.113.5/32>. Der Block darf keine reservierten Adressen enthalten. Sie können zusätzliche Blöcke eingeben, indem Sie Quelle hinzufügen auswählen. Es gibt eine maximale Anzahl von CIDR-Blöcken, die Sie angeben können. Weitere Informationen finden Sie unter Amazon-EKS-Service-Quotas. Wenn Sie keine Blöcke angeben, empfängt der öffentliche API-Server-Endpunkt Anfragen von allen (0.0.0.0/0) IP-Adressen. Wenn Sie den Zugriff auf Ihren öffentlichen Endpunkt mithilfe von CIDR-Blöcken einschränken, wird empfohlen, dass Sie auch den privaten Endpunktzugriff aktivieren, damit Knoten und Fargate-pods (falls Sie diese verwenden) mit dem Cluster kommunizieren können. Wenn der private Endpunkt nicht aktiviert ist, müssen die CIDR-Quellen des öffentlichen Zugriffs die Ausgangsquellen aus Ihrer VPC enthalten. Wenn Sie beispielsweise einen Knoten in einem privaten Subnetz haben, der über ein NAT-Gateway mit dem Internet kommuniziert, müssen Sie die ausgehende IP-Adresse des NAT-Gateways als Teil eines erlaubten CIDR-Blocks auf Ihrem öffentlichen Endpunkt hinzufügen.

  7. Wählen Sie zum Abschluss Update (Aktualisieren) aus.

AWS CLI

So ändern Sie den Zugriff auf Ihren Cluster-API-Server-Endpunkt mit der AWS CLI

Führen Sie die folgenden Schritte mit der AWS CLI Version 1.25.25 oder höher aus. Sie können Ihre aktuelle Version mit aws --version überprüfen. Informationen zum Installieren oder Aktualisieren der AWS CLI finden Sie unter Installieren der AWS CLI.

  1. Aktualisieren Sie den Zugriff auf Ihren Cluster-API-Server-Endpunkt mit dem folgenden AWS CLI-Befehl. Verwenden Ihre eigenen Werte für den Clusternamen und den gewünschten Endpunkt. Wenn Sie endpointPublicAccess=true festlegen, können Sie (optional) einen einzelnen CIDR-Block oder eine kommagetrennte Liste von CIDR-Blöcken für publicAccessCidrs eingeben. Die Blöcke dürfen keine reservierten Adressen enthalten. Wenn Sie CIDR-Blöcke angeben, empfängt der öffentliche API-Server-Endpunkt nur Anforderungen von den aufgelisteten Blöcken. Es gibt eine maximale Anzahl von CIDR-Blöcken, die Sie angeben können. Weitere Informationen finden Sie unter Amazon-EKS-Service-Quotas. Wenn Sie den Zugriff auf Ihren öffentlichen Endpunkt mithilfe von CIDR-Blöcken einschränken, wird empfohlen, dass Sie auch den privaten Endpunktzugriff aktivieren, damit Knoten und Fargate-pods (falls Sie diese verwenden) mit dem Cluster kommunizieren können. Wenn der private Endpunkt nicht aktiviert ist, müssen die CIDR-Quellen des öffentlichen Zugriffs die Ausgangsquellen aus Ihrer VPC enthalten. Wenn Sie beispielsweise einen Knoten in einem privaten Subnetz haben, der über ein NAT-Gateway mit dem Internet kommuniziert, müssen Sie die ausgehende IP-Adresse des NAT-Gateways als Teil eines erlaubten CIDR-Blocks auf Ihrem öffentlichen Endpunkt hinzufügen. Wenn Sie keine CIDR-Blöcke angeben, empfängt der öffentliche API-Server-Endpunkt Anfragen von allen (0.0.0.0/0) IP-Adressen.

    Anmerkung

    Der folgende Befehl ermöglicht den privaten Zugriff und den öffentlichen Zugriff von einer einzelnen IP-Adresse für den API-Server-Endpunkt. Ersetzen Sie 203.0.113.5/32 durch einen einzelnen CIDR-Block oder eine kommagetrennte Liste von CIDR-Blöcken, auf die Sie den Netzwerkzugriff beschränken möchten.

    aws eks update-cluster-config \ --region region-code \ --name my-cluster \ --resources-vpc-config endpointPublicAccess=<true>,publicAccessCidrs="203.0.113.5/32",endpointPrivateAccess=<true>

    Die Beispielausgabe lautet wie folgt.

    { "update": { "id": "e6f0905f-a5d4-4a2a-8c49-EXAMPLE00000", "status": "InProgress", "type": "EndpointAccessUpdate", "params": [ { "type": "EndpointPublicAccess", "value": "<true>" }, { "type": "EndpointPrivateAccess", "value": "<true>" }, { "type": "publicAccessCidrs", "value": "[\203.0.113.5/32\"]" } ], "createdAt": <1576874258.137>, "errors": [] } }
  2. Überwachen Sie den Status des aktualisierten Endpunktzugriffs mit dem folgenden Befehl unter Verwendung des Cluster-Namens und der Update-ID, die vom vorherigen Befehl zurückgegeben wurden. Ihre Aktualisierung ist abgeschlossen, wenn als Status Successful angezeigt wird.

    aws eks describe-update \ --region region-code \ --name my-cluster \ --update-id e6f0905f-a5d4-4a2a-8c49-EXAMPLE00000

    Die Beispielausgabe lautet wie folgt.

    { "update": { "id": "e6f0905f-a5d4-4a2a-8c49-EXAMPLE00000", "status": "Successful", "type": "EndpointAccessUpdate", "params": [ { "type": "EndpointPublicAccess", "value": "<true>" }, { "type": "EndpointPrivateAccess", "value": "<true"> }, { "type": "publicAccessCidrs", "value": "[\203.0.113.5/32\"]" } ], "createdAt": <1576874258.137>, "errors": [] } }

Zugriff auf einen privaten API-Server

Wenn Sie den öffentlichen Zugriff für den Kubernetes-API-Server-Endpunkt Ihres Clusters deaktiviert haben, können Sie nur über Ihre VPC oder ein verbundenes Netzwerk auf den API-Server zugreifen. Hier sind einige Möglichkeiten, um auf den Kubernetes-API-Server-Endpunkt zuzugreifen:

  • Verbundenes Netzwerk – Verbinden Sie Ihr Netzwerk über ein AWS-Transit-Gateway oder eine andere Konnektivitäts-Option mit der VPC und verwenden Sie dann einen Computer im verbundenen Netzwerk. Sie müssen sicherstellen, dass Ihre Amazon-EKS-Steuerebenen-Sicherheitsgruppe Regeln enthält, die den eingehenden Datenverkehr auf Port 443 von Ihrem verbundenen Netzwerk zulassen.

  • Amazon-EC2-Bastion-Host – Sie können eine Amazon-EC2-Instance in einem öffentlichen Subnetz in der VPC Ihres Clusters starten und sich dann über SSH in dieser Instance anmelden, um kubectl-Befehle auszuführen. Weitere Informationen finden Sie unter Linux-Bastion-Hosts in AWS. Sie müssen sicherstellen, dass Ihre Amazon-EKS-Steuerebenen-Sicherheitsgruppe Regeln enthält, die den eingehenden Datenverkehr auf Port 443 von Ihrem Bastion-Host zulassen. Weitere Informationen finden Sie unter Anforderungen und Überlegungen zur Amazon-EKS-Sicherheitsgruppe.

    Wenn Sie kubectl für Ihren Bastion-Host konfigurieren, stellen Sie sicher, dass Sie AWS-Anmeldeinformationen verwenden, die der RBAC-Konfiguration Ihres Clusters bereits zugeordnet sind. Fügen Sie alternativ zur RBAC-Konfiguration den IAM-Benutzer oder die Rolle hinzu, die Ihre Bastion verwenden wird (bevor Sie den öffentlichen Zugriff auf den Endpunkt entfernen). Weitere Informationen finden Sie unter Aktivieren des IAM-Benutzer- und Rollenzugriffs auf Ihren Cluster und Nicht autorisiert oder Zugriff verweigert (kubectl).

  • AWS Cloud9-IDE – AWS Cloud9 ist eine Cloud-basierte integrierte Entwicklungsumgebung (IDE), mit der Sie Ihren Code vollständig mit einem Browser schreiben, ausführen und debuggen können. Sie können eine AWS Cloud9-IDE in der VPC Ihres Clusters erstellen und die IDE zur Kommunikation mit Ihrem Cluster verwenden. Weitere Informationen finden Sie unter Erstellen einer Umgebung in AWS Cloud9. Sie müssen sicherstellen, dass Ihre Amazon-EKS-Steuerebenen-Sicherheitsgruppe Regeln enthält, die den eingehenden Datenverkehr auf Port 443 von Ihrer IDE-Sicherheitsgruppe zulassen. Weitere Informationen finden Sie unter Anforderungen und Überlegungen zur Amazon-EKS-Sicherheitsgruppe.

    Wenn Sie kubectl für Ihre AWS Cloud9-IDE konfigurieren, stellen Sie sicher, dass Sie AWS-Anmeldeinformationen verwenden, die der RBAC-Konfiguration Ihres Clusters bereits zugeordnet sind. Fügen Sie alternativ zur RBAC-Konfiguration den IAM-Benutzer oder die Rolle hinzu, die Ihre IDE verwenden wird (bevor Sie den öffentlichen Zugriff auf den Endpunkt entfernen). Weitere Informationen finden Sie unter Aktivieren des IAM-Benutzer- und Rollenzugriffs auf Ihren Cluster und Nicht autorisiert oder Zugriff verweigert (kubectl).