Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
IAM-Rollen für Dienstkonten
Amazon EKS unterstützt hier Rollen für Service Accounts (IRSA)], wodurch Cluster-Betreiber AWS IAM-Rollen Kubernetes-Servicekonten zuordnen können.
Dies bietet ein detailliertes Berechtigungsmanagement für Apps, die auf EKS ausgeführt werden und andere AWS-Services verwenden. Dies können Apps sein, die S3, andere Datendienste (RDS, MQ, STS, DynamoDB) oder Kubernetes-Komponenten wie den AWS Load Balancer-Controller oder ExternalDNS verwenden.
Sie können ganz einfach IAM-Rollen- und Dienstkontopaare mit erstellen. eksctl
Anmerkung
Wenn Sie Instanzrollen verwendet haben und erwägen, stattdessen IRSA zu verwenden, sollten Sie die beiden Rollen nicht mischen.
Funktionsweise
Es funktioniert über den IAM OpenID Connect Provider (OIDC), den EKS verfügbar macht, und IAM-Rollen müssen mit Bezug auf den IAM OIDC-Anbieter (spezifisch für einen bestimmten EKS-Cluster) und einem Verweis auf das Kubernetes-Dienstkonto, an das sie gebunden werden, erstellt werden. Sobald eine IAM-Rolle erstellt wurde, sollte ein Dienstkonto den ARN dieser Rolle als Anmerkung (eks.amazonaws.com/role-arn
) enthalten. Standardmäßig wird das Dienstkonto so erstellt oder aktualisiert, dass es die Rollenanmerkung enthält. Diese kann mithilfe des Flags --role-only
deaktiviert werden.
In EKS gibt es einen ZugangscontrollerAWS_ROLE_ARN
AWS_WEB_IDENTITY_TOKEN_FILE
&-Umgebungsvariablen verfügbar gemacht. Wenn eine aktuelle Version des AWS-SDK verwendet wird (Einzelheiten zur genauen Version finden Sie hier), verwendet die Anwendung diese Anmeldeinformationen.
Im Namen eksctl
der Ressource steht iamserviceaccount, was ein Paar aus IAM-Rolle und Dienstkonto darstellt.
Verwendung über CLI
Anmerkung
IAM-Rollen für Dienstkonten erfordern Kubernetes Version 1.13 oder höher.
Der IAM OIDC Provider ist standardmäßig nicht aktiviert. Sie können ihn mit dem folgenden Befehl aktivieren oder die Konfigurationsdatei verwenden (siehe unten):
eksctl utils associate-iam-oidc-provider --cluster=<clusterName>
Sobald Sie den IAM-OIDC-Anbieter mit dem Cluster verknüpft haben, führen Sie folgenden Befehl aus, um eine an ein Dienstkonto gebundene IAM-Rolle zu erstellen:
eksctl create iamserviceaccount --cluster=<clusterName> --name=<serviceAccountName> --namespace=<serviceAccountNamespace> --attach-policy-arn=<policyARN>
Anmerkung
Sie können --attach-policy-arn
mehrfach angeben, dass mehr als eine Richtlinie verwendet werden soll.
Insbesondere können Sie ein Dienstkonto mit schreibgeschütztem Zugriff auf S3 erstellen, indem Sie Folgendes ausführen:
eksctl create iamserviceaccount --cluster=<clusterName> --name=s3-read-only --attach-policy-arn=arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess
Standardmäßig wird es im default
Namespace erstellt, aber Sie können jeden anderen Namespace angeben, z. B.:
eksctl create iamserviceaccount --cluster=<clusterName> --name=s3-read-only --namespace=s3-app --attach-policy-arn=arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess
Anmerkung
Wenn der Namespace noch nicht existiert, wird er erstellt.
Wenn Sie bereits ein Dienstkonto im Cluster erstellt haben (ohne IAM-Rolle), müssen Sie Flag verwenden--override-existing-serviceaccounts
.
Benutzerdefiniertes Tagging kann auch auf die IAM-Rolle angewendet werden, indem Folgendes angegeben wird: --tags
eksctl create iamserviceaccount --cluster=<clusterName> --name=<serviceAccountName> --tags "Owner=John Doe,Team=Some Team"
CloudFormation generiert einen Rollennamen, der eine zufällige Zeichenfolge enthält. Wenn Sie einen vordefinierten Rollennamen bevorzugen, können Sie Folgendes angeben--role-name
:
eksctl create iamserviceaccount --cluster=<clusterName> --name=<serviceAccountName> --role-name "custom-role-name"
Wenn das Dienstkonto mit einem anderen Tool wie Helm erstellt und verwaltet wird, verwenden Sie es, --role-only
um Konflikte zu vermeiden. Das andere Tool ist dann für die Pflege der ARN-Anmerkung der Rolle verantwortlich. Beachten Sie, dass dies keine Auswirkungen auf die roleOnly
--role-only
/-Dienstkonten --override-existing-serviceaccounts
hat. Die Rolle wird immer erstellt.
eksctl create iamserviceaccount --cluster=<clusterName> --name=<serviceAccountName> --role-only --role-name=<customRoleName>
Wenn Sie über eine bestehende Rolle verfügen, die Sie mit einem Dienstkonto verwenden möchten, können Sie anstelle der Richtlinien das --attach-role-arn
Kennzeichen angeben. Um sicherzustellen, dass die Rolle nur von dem angegebenen Dienstkonto übernommen werden kann, sollten Sie hier ein Dokument zur Beziehungsrichtlinie einrichten].
eksctl create iamserviceaccount --cluster=<clusterName> --name=<serviceAccountName> --attach-role-arn=<customRoleARN>
Um die Rollen und Berechtigungen eines Dienstkontos zu aktualisieren, können Sie ausführeneksctl update iamserviceaccount
.
Anmerkung
eksctl delete iamserviceaccount
löscht Kubernetes, ServiceAccounts
auch wenn sie nicht von erstellt wurden. eksctl
Verwendung mit Konfigurationsdateien
Um die Verwaltung iamserviceaccounts
mithilfe der Konfigurationsdatei durchzuführen, müssen Sie das gewünschte Konto einrichten iam.withOIDC: true
und auflisteniam.serviceAccount
.
Alle Befehle werden unterstützt--config-file
. Sie können iamserviceaccounts genauso verwalten wie Nodegroups. Der eksctl create iamserviceaccount
Befehl unterstützt --include
und --exclude
markiert (weitere Informationen darüber, wie diese funktionieren, finden Sie in diesem Abschnitt). Und der eksctl delete iamserviceaccount
Befehl unterstützt --only-missing
auch, sodass Sie Löschungen genauso durchführen können wie Nodegroups.
Anmerkung
IAM-Dienstkonten befinden sich innerhalb eines Namespaces, d. h. zwei Dienstkonten mit demselben Namen können in unterschiedlichen Namespaces existieren. Um also ein Dienstkonto als Teil von --exclude
Flags eindeutig zu definieren--include
, müssen Sie die Namenszeichenfolge im folgenden Format übergeben. namespace/name
z. B.
eksctl create iamserviceaccount --config-file=<path> --include backend-apps/s3-reader
Die Option zum Aktivieren wellKnownPolicies
ist für die Verwendung von IRSA in bekannten Anwendungsfällen wie cluster-autoscaler
und cert-manager
als Abkürzung für Richtlinienlisten enthalten.
Sie verwenden das folgende Konfigurationsbeispiel miteksctl create cluster
:
# An example of ClusterConfig with IAMServiceAccounts: --- apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: cluster-13 region: us-west-2 iam: withOIDC: true serviceAccounts: - metadata: name: s3-reader # if no namespace is set, "default" will be used; # the namespace will be created if it doesn't exist already namespace: backend-apps labels: {aws-usage: "application"} attachPolicyARNs: - "arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess" tags: Owner: "John Doe" Team: "Some Team" - metadata: name: cache-access namespace: backend-apps labels: {aws-usage: "application"} attachPolicyARNs: - "arn:aws:iam::aws:policy/AmazonDynamoDBReadOnlyAccess" - "arn:aws:iam::aws:policy/AmazonElastiCacheFullAccess" - metadata: name: cluster-autoscaler namespace: kube-system labels: {aws-usage: "cluster-ops"} wellKnownPolicies: autoScaler: true roleName: eksctl-cluster-autoscaler-role roleOnly: true - metadata: name: some-app namespace: default attachRoleARN: arn:aws:iam::123:role/already-created-role-for-app nodeGroups: - name: "ng-1" tags: # EC2 tags required for cluster-autoscaler auto-discovery k8s.io/cluster-autoscaler/enabled: "true" k8s.io/cluster-autoscaler/cluster-13: "owned" desiredCapacity: 1
Wenn Sie einen Cluster erstellen, ohne dass diese Felder gesetzt sind, können Sie die folgenden Befehle verwenden, um alles zu aktivieren, was Sie benötigen:
eksctl utils associate-iam-oidc-provider --config-file=<path> eksctl create iamserviceaccount --config-file=<path>