Configuration des autorisations d'accès avec des IAM rôles pour les comptes de service (IRSA) - 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.

Configuration des autorisations d'accès avec des IAM rôles pour les comptes de service (IRSA)

Par défaut, le serveur Livy et le pilote et les exécuteurs de l'application Spark n'ont pas accès aux AWS ressources. Le compte de service du serveur et le compte de service Spark contrôlent l'accès aux AWS ressources pour le serveur Livy et les pods de l'application Spark. Pour accorder l'accès, vous devez associer les comptes de service à un IAM rôle disposant des AWS autorisations nécessaires.

Vous pouvez configurer le IRSA mappage avant d'installer Apache Livy, pendant l'installation ou après l'avoir terminée.

Configuration IRSA lors de l'installation d'Apache Livy (pour le compte de service du serveur)

Note

Ce mappage n'est pris en charge que pour le compte de service du serveur.

  1. Assurez-vous que vous avez terminé de configurer Apache Livy pour Amazon EMR sur EKS et que vous êtes en train d'installer Apache Livy avec Amazon EMR activé. EKS

  2. Créez un espace de noms Kubernetes pour le serveur Livy. Dans cet exemple, le nom de l'espace de noms estlivy-ns.

  3. Créez une IAM politique qui inclut les Services AWS autorisations auxquelles vous souhaitez que vos pods accèdent. L'exemple suivant crée une IAM politique d'obtention des ressources Amazon S3 pour le point d'entrée Spark.

    cat >my-policy.json <<EOF{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::my-spark-entrypoint-bucket" } ] } EOF aws iam create-policy --policy-name my-policy --policy-document file://my-policy.json
  4. Utilisez la commande suivante pour attribuer une variable à votre Compte AWS identifiant.

    account_id=$(aws sts get-caller-identity --query "Account" --output text)
  5. Définissez le fournisseur d'identité OpenID Connect (OIDC) de votre cluster sur une variable d'environnement.

    oidc_provider=$(aws eks describe-cluster --name my-cluster --region $AWS_REGION --query "cluster.identity.oidc.issuer" --output text | sed -e "s/^https:\/\///")
  6. Définissez des variables pour l'espace de noms et le nom du compte de service. Assurez-vous d'utiliser vos propres valeurs.

    export namespace=default export service_account=my-service-account
  7. Créez un fichier de politique de confiance à l'aide de la commande suivante. Si vous souhaitez accorder l'accès au rôle à tous les comptes de service d'un espace de noms, copiez la commande suivante, remplacez StringEquals par StringLike et remplacez $service_account par*.

    cat >trust-relationship.json <<EOF { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::$account_id:oidc-provider/$oidc_provider" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "$oidc_provider:aud": "sts.amazonaws.com", "$oidc_provider:sub": "system:serviceaccount:$namespace:$service_account" } } } ] } EOF
  8. Créez le rôle.

    aws iam create-role --role-name my-role --assume-role-policy-document file://trust-relationship.json --description "my-role-description"
  9. Utilisez la commande d'installation Helm suivante pour définir le serviceAccount.executionRoleArn to mapIRSA. Voici un exemple de commande d'installation de Helm. Vous pouvez trouver la ECR-registry-account valeur correspondante pour vos comptes Région AWS de ECR registre Amazon par région.

    helm install livy-demo \ oci://895885662937.dkr.ecr.us-west-2.amazonaws.com/livy \ --version 7.5.0 \ --namespace livy-ns \ --set image=ECR-registry-account.dkr.ecr.region-id.amazonaws.com/livy/emr-7.5.0:latest \ --set sparkNamespace=spark-ns \ --set serviceAccount.executionRoleArn=arn:aws:iam::123456789012:role/my-role

Mappage IRSA vers un compte de service Spark

Avant de IRSA mapper vers un compte de service Spark, assurez-vous d'avoir terminé les étapes suivantes :

Procédez comme suit pour le IRSA mapper à votre compte de service Spark :

  1. Utilisez la commande suivante pour obtenir le compte de service Spark.

    SPARK_NAMESPACE=<spark-ns> LIVY_APP_NAME=<livy-app-name> kubectl --namespace $SPARK_NAMESPACE describe sa -l "app.kubernetes.io/instance=$LIVY_APP_NAME" | awk '/^Name:/ {print $2}'
  2. Définissez vos variables pour l'espace de noms et le nom du compte de service.

    export namespace=default export service_account=my-service-account
  3. Utilisez la commande suivante pour créer un fichier de politique de confiance pour le IAM rôle. L'exemple suivant autorise tous les comptes de service de l'espace de noms à utiliser le rôle. Pour ce faire, remplacez StringEquals par StringLike et remplacez $service_account par *.

    cat >trust-relationship.json <<EOF { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::$account_id:oidc-provider/$oidc_provider" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "$oidc_provider:aud": "sts.amazonaws.com", "$oidc_provider:sub": "system:serviceaccount:$namespace:$service_account" } } } ] } EOF
  4. Créez le rôle.

    aws iam create-role --role-name my-role --assume-role-policy-document file://trust-relationship.json --description "my-role-description"
  5. Mappez le serveur ou le compte de service Spark à l'aide de la eksctl commande suivante. Assurez-vous d'utiliser vos propres valeurs.

    eksctl create iamserviceaccount --name spark-sa \ --namespace spark-namespace --cluster livy-eks-cluster \ --attach-role-arn arn:aws:iam::0123456789012:role/my-role \ --approve --override-existing-serviceaccounts