Authentifizieren von Benutzern für Ihren Cluster von einem OpenID Connect-Identitätsanbieter - Amazon EKS

Authentifizieren von Benutzern für Ihren Cluster von einem OpenID Connect-Identitätsanbieter

Amazon EKS unterstützt die Verwendung von OpenID Connect (OIDC)-Identitätsanbietern als Methode zur Authentifizierung von Benutzern bei Ihrem Cluster. OIDC-Identitätsanbieter können mit oder als Alternative zu AWS Identity and Access Management (IAM) verwendet werden. Weitere Informationen zur Verwendung von IAM finden Sie unter Aktivieren des IAM-Benutzer- und Rollenzugriffs auf Ihren Cluster. Nachdem Sie die Authentifizierung für Ihren Cluster konfiguriert haben, können Sie Kubernetes-roles und clusterroles erstellen, um den Rollen Berechtigungen zuzuweisen, und dann die Rollen mithilfe von Kubernetes-rolebindings und clusterrolebindings an die Identitäten binden. Weitere Informationen finden Sie unter Using RBAC authorization in der Kubernetes-Dokumentation.

Überlegungen

  • Sie können Ihrem Cluster einen OIDC-Identitätsanbieter zuordnen.

  • Kubernetes stellt keinen OIDC-Identitätsanbieter bereit. Sie können einen vorhandenen öffentlichen OIDC-Identitätsanbieter verwenden oder Ihren eigenen Identitätsanbieter ausführen. Eine Liste zertifizierter Anbieter finden Sie unter OpenID-Zertifizierung auf der OpenID-Website.

  • Die Aussteller-URL des OIDC-Identitätsanbieters muss öffentlich zugänglich sein, damit Amazon EKS die Signaturschlüssel erkennen kann. Amazon EKS unterstützt keine OIDC-Identitätsanbieter mit selbstsignierten Zertifikaten.

  • Sie können den AWS-IAM-Authentifikator in Ihrem Cluster nicht deaktivieren, da er weiterhin erforderlich ist, um Knoten zu einem Cluster hinzuzufügen. Weitere Informationen zur AWS-IAM-Authentifizierung für Kubernetes finden Sie unter GitHub.

  • Ein Amazon EKS-Cluster muss weiterhin von einem AWS-IAM-Benutzer erstellt werden und nicht von einem OIDC-Identitätsanbieter-Benutzer. Dies liegt daran, dass der Cluster-Ersteller mit den Amazon-EKS-APIs interagiert und nicht mit den Kubernetes-APIs.

  • Vom OIDC-Identitätsanbieter authentifizierte Benutzer werden im Überwachungsprotokoll des Clusters aufgeführt, wenn CloudWatch Logs für die Steuerungsebene aktiviert sind. Weitere Informationen finden Sie unter Aktivieren und Deaktivieren von Steuerebenenprotokollen.

  • Sie können sich nicht mit einem Konto eines OIDC-Anbieters beim AWS Management Console anmelden. Sie können nur Kubernetes-Ressourcen in der Konsole ansehen, indem Sie sich bei der AWS Management Console mit einem AWS Identity and Access Management-Konto anmelden.

Verknüpfen Sie einen OIDC-Identitätsanbieter

Bevor Sie Ihrem Cluster einen OIDC-Identitätsanbieter zuordnen können, benötigen Sie die folgenden Informationen von Ihrem Anbieter:

  • Aussteller-URL – Die URL des OIDC-Identitätsanbieters, die es dem API-Server ermöglicht, öffentliche Signaturschlüssel zum Verifizieren von Token zu erkennen. Die URL muss mit https:// beginnen und sollte dem iss-Anspruch in den OIDC-ID-Token des Anbieters entsprechen. Gemäß dem OIDC-Standard sind Pfadkomponenten erlaubt, Abfrageparameter jedoch nicht. Normalerweise besteht die URL nur aus einem Hostnamen wie https://server.example.org oder https://example.com. Diese URL sollte auf die Ebene unterhalb von .well-known/openid-configuration verweisen und muss über das Internet öffentlich zugänglich sein.

  • Client-ID (auch als Zielgruppe bekannt) – Die ID für die Clientanwendung, die Authentifizierungsanforderungen an den OIDC-Identitätsanbieter stellt.

Sie können einen Identitätsanbieter mit eksctl oder AWS Management Console zuordnen.

eksctl

So verknüpfen Sie einen OIDC-Identitätsanbieter mit Ihrem Cluster mit eksctl

  1. Erstellen Sie eine Datei mit dem Namen associate-identity-provider.yaml und dem folgenden Inhalt. Ersetzen Sie das example values durch Ihr eigenes. Die Werte im Abschnitt identityProviders erhalten Sie von Ihrem OIDC-Identitätsanbieter. Werte werden nur für die name-, type-, issuerUrl- und clientId-Einstellungen unter identityProviders benötigt.

    --- apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: my-cluster region: your-region-code identityProviders: - name: my-provider type: oidc issuerUrl: https://example.com clientId: kubernetes usernameClaim: email usernamePrefix: my-username-prefix groupsClaim: my-claim groupsPrefix: my-groups-prefix requiredClaims: string: string tags: env: dev
    Wichtig

    Geben Sie weder system: noch einen Teil dieser Zeichenfolge für groupsPrefix oder usernamePrefix an.

  2. Erstellen Sie den Anbieter.

    eksctl associate identityprovider -f associate-identity-provider.yaml
  3. Informationen zur Verwendung von kubectl für die Arbeit mit Ihrem Cluster und dem OIDC-Identitätsanbieter finden Sie unter Using kubectl in der Kubernetes-Dokumentation.

AWS Management Console

So verknüpfen Sie einen OIDC-Identitätsanbieter mit Ihrem Cluster mithilfe des AWS Management Console

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

  2. Wählen Sie Ihren Cluster aus.

  3. Wählen Sie die Registerkarte Konfiguration und dann die Registerkarte Authentifizierung aus.

  4. Wählen Sie auf der Seite OIDC-Identitätsanbieter die Option Identitätsanbieter zuordnen aus.

  5. Geben Sie auf der Seite OIDC-Identitätsanbieter zuordnen die folgenden Optionen ein oder wählen Sie sie aus, und wählen Sie dann Zuordnen aus.

    • Geben Sie für Name einen eindeutigen Namen für den Anbieter ein.

    • Geben Sie für Aussteller-URL die URL Ihres Anbieters ein. Diese URL muss über das Internet zugänglich sein.

    • Geben Sie für Client-ID die Client-ID des OIDC-Identitätsanbieters (auch als Zielgruppe bezeichnet) ein.

    • Geben Sie für Benutzernamenanspruch den Anspruch ein, der als Benutzername verwendet werden soll.

    • Geben Sie für Gruppenanspruch den Anspruch ein, der als Benutzergruppe verwendet werden soll.

    • (Optional) Wählen Sie Erweiterte Optionen, geben Sie die folgenden Informationen ein oder wählen Sie sie aus.

      • Benutzernamen-Präfix – Geben Sie ein Präfix ein, das den Benutzernamenansprüchen vorangestellt wird. Das Präfix wird den Benutzernamensansprüchen vorangestellt, um Konflikte mit bestehenden Namen zu vermeiden. Wenn Sie keinen Wert angeben und der Benutzername ein anderer Wert als email ist, wird als Präfix standardmäßig der Wert für die Aussteller-URL verwendet. Sie können den Wert - verwenden, um alle Präfixe zu deaktivieren. Geben Sie weder system: noch einen Teil dieser Zeichenfolge an.

      • Gruppen-Präfix – Geben Sie ein Präfix ein, um Gruppenansprüchen voranzustellen. Das Präfix wird Gruppenansprüchen vorangestellt, um Konflikte mit vorhandenen Namen (wie z. B. system: groups) zu vermeiden. Der Wert oidc: erstellt beispielsweise Gruppennamen wie oidc:engineering und oidc:infra. Geben Sie weder system: noch einen Teil dieser Zeichenfolge an.

      • Erforderliche Ansprüche – Wählen Sie Anspruch hinzufügen aus, und geben Sie ein oder mehrere Schlüsselwertpaare ein, die erforderliche Ansprüche im Client-ID-Token beschreiben. Der Paris beschreibt erforderliche Ansprüche im ID-Token. Wenn festgelegt, wird überprüft, ob jeder Anspruch im ID-Token mit einem übereinstimmenden Wert vorhanden ist.

  6. Informationen zur Verwendung von kubectl für die Arbeit mit Ihrem Cluster und dem OIDC-Identitätsanbieter finden Sie unter Using kubectl in der Kubernetes-Dokumentation.

Trennen Sie einen OIDC-Identitätsanbieter von Ihrem Cluster

Wenn Sie einen OIDC-Identitätsanbieter von Ihrem Cluster trennen, können Benutzer, die im Anbieter enthalten sind, nicht mehr auf den Cluster zugreifen. Sie können jedoch weiterhin mit AWS-IAM-Benutzern auf den Cluster zugreifen.

So trennen Sie einen OIDC-Identitätsanbieter von Ihrem Cluster mithilfe der AWS Management Console

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

  2. Wählen Sie im Abschnitt OIDC-Identitätsanbieter die Option Zuordnung aufheben, geben Sie den Namen des Identitätsanbieters ein und wählen Sie dann Disassociate aus.

Beispiel für eine IAM-Richtlinie

Wenn Sie verhindern möchten, dass ein OIDC-Identitätsanbieter mit einem Cluster verknüpft wird, erstellen Sie die folgende IAM-Richtlinie und verknüpfen Sie sie mit den IAM-Konten Ihrer Amazon-EKS-Administratoren. Weitere Informationen finden Sie unter Erstellen von IAM-Richtlinien und Hinzufügen von IAM-Identitätsberechtigungen im IAM-Benutzerhandbuch und Aktionen, Ressourcen und Bedingungsschlüssel für Amazon Elastic Kubernetes Service in der Service-Autorisierungsreferenz.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "denyOIDC", "Effect": "Deny", "Action": [ "eks:AssociateIdentityProviderConfig" ], "Resource": "arn:aws:eks:us-west-2.amazonaws.com:111122223333:cluster/*" }, { "Sid": "eksAdmin", "Effect": "Allow", "Action": [ "eks:*" ], "Resource": "*" } ] }

Die folgende Beispielrichtlinie lässt die Zuordnung von OIDC-Identitätsanbietern zu, wenn clientID kubernetes und issuerUrl https://cognito-idp.us-west-2amazonaws.com/* ist.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowCognitoOnly", "Effect": "Deny", "Action": "eks:AssociateIdentityProviderConfig", "Resource": "arn:aws:eks:us-west-2:111122223333:cluster/my-instance", "Condition": { "StringNotLikeIfExists": { "eks:issuerUrl": "https://cognito-idp.us-west-2.amazonaws.com/*" } } }, { "Sid": "DenyOtherClients", "Effect": "Deny", "Action": "eks:AssociateIdentityProviderConfig", "Resource": "arn:aws:eks:us-west-2:111122223333:cluster/my-instance", "Condition": { "StringNotEquals": { "eks:clientId": "kubernetes" } } }, { "Sid": "AllowOthers", "Effect": "Allow", "Action": "eks:*", "Resource": "*" } ] }