Activez l'accès au cluster pour Amazon EMR sur EKS - Amazon EMR

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Activez l'accès au cluster pour Amazon EMR sur EKS

Les sections suivantes présentent deux manières d'activer l'accès au cluster. Le premier consiste à utiliser Amazon EKS cluster access management (CAM) et le second montre comment effectuer des étapes manuelles pour activer l'accès au cluster.

Activer l'accès au cluster à l'aide d'EKSAccess Entry (recommandé)

Amazon EMR est intégré à Amazon EKS Cluster Access Management (CAM), ce qui vous permet d'automatiser la configuration des politiques AuthN et AuthZ nécessaires pour exécuter des tâches Amazon EMR Spark dans les espaces de noms des clusters Amazon. EKS Lorsque vous créez un cluster virtuel à partir d'un espace de noms de EKS cluster Amazon, Amazon configure EMR automatiquement toutes les autorisations nécessaires, de sorte que vous n'avez pas besoin d'ajouter d'étapes supplémentaires à vos flux de travail actuels.

Note

L'EMRintégration d'Amazon à Amazon n'EKSCAMest prise en charge que pour les nouveaux Amazon EMR sur des clusters EKS virtuels. Vous ne pouvez pas migrer des clusters virtuels existants pour utiliser cette intégration.

Prérequis

  • Assurez-vous que vous utilisez la version 2.15.3 ou supérieure du AWS CLI

  • Votre EKS cluster Amazon doit être doté de la version 1.23 ou supérieure.

Configuration

Pour configurer l'intégration entre Amazon EMR et les AccessEntry API opérations d'AmazonEKS, assurez-vous d'avoir effectué les étapes suivantes :

  • Assurez-vous que celui authenticationMode de votre EKS cluster Amazon est défini surAPI_AND_CONFIG_MAP.

    aws eks describe-cluster --name <eks-cluster-name>

    Si ce n'est pas déjà le cas, réglez-le authenticationMode surAPI_AND_CONFIG_MAP.

    aws eks update-cluster-config --name <eks-cluster-name> --access-config authenticationMode=API_AND_CONFIG_MAP

    Pour plus d'informations sur les modes d'authentification, consultez la section Modes d'authentification de cluster.

  • Assurez-vous que le IAMrôle que vous utilisez pour exécuter les DeleteVirtualCluster API opérations CreateVirtualCluster et dispose également des autorisations suivantes :

    { "Effect": "Allow", "Action": [ "eks:CreateAccessEntry" ], "Resource": "arn:<AWS_PARTITION>:eks:<AWS_REGION>:<AWS_ACCOUNT_ID>:cluster/<EKS_CLUSTER_NAME>" }, { "Effect": "Allow", "Action": [ "eks:DescribeAccessEntry", "eks:DeleteAccessEntry", "eks:ListAssociatedAccessPolicies", "eks:AssociateAccessPolicy", "eks:DisassociateAccessPolicy" ], "Resource": "arn:<AWS_PARTITION>:eks:<AWS_REGION>:<AWS_ACCOUNT_ID>:access-entry/<EKS_CLUSTER_NAME>/role/<AWS_ACCOUNT_ID>/AWSServiceRoleForAmazonEMRContainers/*" }

Concepts et terminologie

Vous trouverez ci-dessous une liste de terminologies et de concepts liés à Amazon EKSCAM.

  • Cluster virtuel (VC) : représentation logique de l'espace de noms créé dans AmazonEKS. Il s'agit d'un lien 1:1 vers un espace de noms de EKS cluster Amazon. Vous pouvez l'utiliser pour exécuter des EMR charges de travail Amazon sur un EKS cluster Amazon au sein de l'espace de noms spécifié.

  • Namespace : mécanisme permettant d'isoler des groupes de ressources au sein d'un même EKS cluster.

  • Politique d'accès : autorisations qui accordent l'accès et des actions à un IAM rôle au sein d'un EKS cluster.

  • Entrée d'accès : entrée créée à l'aide d'un rôle arn. Vous pouvez lier l'entrée d'accès à une politique d'accès pour attribuer des autorisations spécifiques dans le EKS cluster Amazon.

  • EKScluster virtuel intégré d'entrée d'accès : cluster virtuel créé à l'aide des APIopérations de saisie d'accès d'AmazonEKS.

Activez l'accès au cluster en utilisant aws-auth

Vous devez autoriser Amazon à EKS accéder EMR à un espace de noms spécifique de votre cluster en effectuant les actions suivantes : créer un rôle Kubernetes, lier le rôle à un utilisateur Kubernetes et mapper l'utilisateur Kubernetes avec le rôle lié au service. AWSServiceRoleForAmazonEMRContainers Ces actions sont automatisées eksctl lorsque la commande de mappage IAM d'identité est utilisée emr-containers comme nom de service. Vous pouvez effectuer ces opérations facilement à l'aide de la commande suivante.

eksctl create iamidentitymapping \ --cluster my_eks_cluster \ --namespace kubernetes_namespace \ --service-name "emr-containers"

Remplacez my_eks_cluster avec le nom de votre EKS cluster Amazon et remplacez kubernetes_namespace avec l'espace de noms Kubernetes créé pour exécuter les charges de travail Amazon. EMR

Important

Vous devez télécharger la dernière version d'eksctl en suivant l'étape précédente. Configurez kubectl et eksctl pour utiliser cette fonctionnalité.

Étapes manuelles pour activer l'accès au cluster pour Amazon EMR sur EKS

Vous pouvez également utiliser les étapes manuelles suivantes pour activer l'accès au cluster pour Amazon EMR surEKS.

  1. Création d'un rôle Kubernetes dans un espace de noms spécifique

    Amazon EKS 1.22 - 1.29

    Avec Amazon EKS 1.22 - 1.29, exécutez la commande suivante pour créer un rôle Kubernetes dans un espace de noms spécifique. Ce rôle accorde les RBAC autorisations nécessaires à Amazon EMR leEKS.

    namespace=my-namespace cat - >>EOF | kubectl apply -f - >>namespace "${namespace}" apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: emr-containers namespace: ${namespace} rules: - apiGroups: [""] resources: ["namespaces"] verbs: ["get"] - apiGroups: [""] resources: ["serviceaccounts", "services", "configmaps", "events", "pods", "pods/log"] verbs: ["get", "list", "watch", "describe", "create", "edit", "delete", "deletecollection", "annotate", "patch", "label"] - apiGroups: [""] resources: ["secrets"] verbs: ["create", "patch", "delete", "watch"] - apiGroups: ["apps"] resources: ["statefulsets", "deployments"] verbs: ["get", "list", "watch", "describe", "create", "edit", "delete", "annotate", "patch", "label"] - apiGroups: ["batch"] resources: ["jobs"] verbs: ["get", "list", "watch", "describe", "create", "edit", "delete", "annotate", "patch", "label"] - apiGroups: ["extensions", "networking.k8s.io"] resources: ["ingresses"] verbs: ["get", "list", "watch", "describe", "create", "edit", "delete", "annotate", "patch", "label"] - apiGroups: ["rbac.authorization.k8s.io"] resources: ["roles", "rolebindings"] verbs: ["get", "list", "watch", "describe", "create", "edit", "delete", "deletecollection", "annotate", "patch", "label"] - apiGroups: [""] resources: ["persistentvolumeclaims"] verbs: ["get", "list", "watch", "describe", "create", "edit", "delete", "deletecollection", "annotate", "patch", "label"] EOF
    Amazon EKS 1.21 and below

    Avec Amazon EKS 1.21 et versions antérieures, exécutez la commande suivante pour créer un rôle Kubernetes dans un espace de noms spécifique. Ce rôle accorde les RBAC autorisations nécessaires à Amazon EMR leEKS.

    namespace=my-namespace cat - >>EOF | kubectl apply -f - >>namespace "${namespace}" apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: emr-containers namespace: ${namespace} rules: - apiGroups: [""] resources: ["namespaces"] verbs: ["get"] - apiGroups: [""] resources: ["serviceaccounts", "services", "configmaps", "events", "pods", "pods/log"] verbs: ["get", "list", "watch", "describe", "create", "edit", "delete", "deletecollection", "annotate", "patch", "label"] - apiGroups: [""] resources: ["secrets"] verbs: ["create", "patch", "delete", "watch"] - apiGroups: ["apps"] resources: ["statefulsets", "deployments"] verbs: ["get", "list", "watch", "describe", "create", "edit", "delete", "annotate", "patch", "label"] - apiGroups: ["batch"] resources: ["jobs"] verbs: ["get", "list", "watch", "describe", "create", "edit", "delete", "annotate", "patch", "label"] - apiGroups: ["extensions"] resources: ["ingresses"] verbs: ["get", "list", "watch", "describe", "create", "edit", "delete", "annotate", "patch", "label"] - apiGroups: ["rbac.authorization.k8s.io"] resources: ["roles", "rolebindings"] verbs: ["get", "list", "watch", "describe", "create", "edit", "delete", "deletecollection", "annotate", "patch", "label"] - apiGroups: [""] resources: ["persistentvolumeclaims"] verbs: ["get", "list", "watch", "describe", "create", "edit", "delete", "deletecollection", "annotate", "patch", "label"] EOF
  2. Création d'une liaison de rôle Kubernetes adaptée à l'espace de noms

    Exécutez la commande suivante pour créer une liaison de rôle Kubernetes dans l'espace de noms donné. Cette liaison de rôle accorde les autorisations définies dans le rôle créé à l'étape précédente à un utilisateur nommé emr-containers. Cet utilisateur identifie les rôles liés aux services pour Amazon EMR on EKS et permet ainsi à Amazon d'EKSeffectuer EMR des actions telles que définies par le rôle que vous avez créé.

    namespace=my-namespace cat - <<EOF | kubectl apply -f - --namespace "${namespace}" apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: emr-containers namespace: ${namespace} subjects: - kind: User name: emr-containers apiGroup: rbac.authorization.k8s.io roleRef: kind: Role name: emr-containers apiGroup: rbac.authorization.k8s.io EOF
  3. Mise à jour la carte de configuration aws-auth de Kubernetes

    Vous pouvez utiliser l'une des options suivantes pour associer le rôle Amazon EMR on EKS service à l'emr-containersutilisateur associé au rôle Kubernetes à l'étape précédente.

    Option 1 : utilisation de l'outil eksctl

    Exécutez la eksctl commande suivante pour associer le rôle Amazon EMR on EKS Service à l'emr-containersutilisateur.

    eksctl create iamidentitymapping \ --cluster my-cluster-name \ --arn "arn:aws:iam::my-account-id:role/AWSServiceRoleForAmazonEMRContainers" \ --username emr-containers

    Option 2 : sans utiliser eksctl

    1. Exécutez la commande suivante pour ouvrir la carte de configuration aws-auth dans l'éditeur de texte.

      kubectl edit -n kube-system configmap/aws-auth
      Note

      Si vous recevez un message d'erreurError from server (NotFound): configmaps "aws-auth" not found, consultez les étapes décrites dans la section Ajouter des rôles d'utilisateur dans le guide de EKS l'utilisateur Amazon pour appliquer le stock ConfigMap.

    2. Ajoutez les détails du rôle EKS lié à Amazon EMR on Service dans la mapRoles section duConfigMap, ci-dessous. data Ajoutez cette section si elle n'existe pas déjà dans le fichier. La section mapRoles mise à jour sous les données ressemble à l'exemple suivant.

      apiVersion: v1 data: mapRoles: | - rolearn: arn:aws:iam::<your-account-id>:role/AWSServiceRoleForAmazonEMRContainers username: emr-containers - ... <other previously existing role entries, if there's any>.
    3. Enregistrez le fichier et quittez votre éditeur de texte.