Configuración de los permisos de acceso con roles de IAM para las cuentas de servicio (IRSA)
De forma predeterminada, el servidor de Livy y el controlador y ejecutores de la aplicación Spark no tienen acceso a los recursos de AWS. La cuenta de servicio del servidor y la cuenta de servicio Spark controlan el acceso a los recursos de AWS de los pods del servidor de Livy y de la aplicación Spark. Para conceder el acceso, debe asignar las cuentas de servicio a un rol de IAM que tenga los permisos necesarios de AWS.
Puede configurar la asignación de IRSA antes de instalar Apache Livy, durante la instalación o después de finalizarla.
Configuración de IRSA durante la instalación de Apache Livy (para la cuenta de servicio del servidor)
nota
Esta asignación solo es compatible con la cuenta de servicio del servidor.
-
Asegúrese de haber terminado la configuración de Apache Livy para Amazon EMR en EKS y de que está realizando la instalación de Apache Livy con Amazon EMR en EKS.
-
Cree un espacio de nombres de Kubernetes para el servidor Livy. En este ejemplo, el nombre del espacio de nombres es
livy-ns
. -
Cree una política de IAM que incluya los permisos para los Servicios de AWS a los que quiere que accedan sus pods. El siguiente ejemplo crea una política de IAM para obtener recursos de Amazon S3 para el punto de entrada de 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-namemy-policy
--policy-document file://my-policy.json
-
Use el siguiente comando para establecer su ID de Cuenta de AWS en una variable.
account_id=$(aws sts get-caller-identity --query "Account" --output text)
-
Establezca el proveedor de identidades de OpenID Connect (OIDC) de su clúster en una variable de entorno.
oidc_provider=$(aws eks describe-cluster --name
my-cluster
--region $AWS_REGION --query "cluster.identity.oidc.issuer" --output text | sed -e "s/^https:\/\///") -
Establezca variables para el espacio de nombres y el nombre de la cuenta de servicio. Asegúrese de utilizar sus propios valores.
export namespace=default export service_account=my-service-account
-
Cree un archivo de política de confianza con el comando siguiente. Si desea conceder el acceso al rol a todas las cuentas de servicio de un espacio de nombres, copie el siguiente comando y sustituya
StringEquals
porStringLike
; sustituya, también,$service_account
por*
.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
-
Cree el rol.
aws iam create-role --role-name
my-role
--assume-role-policy-document file://trust-relationship.json --description "my-role-description
" -
Utilice el siguiente comando de instalación Helm para establecer el
serviceAccount.executionRoleArn
para asignar IRSA. A continuación, se muestra un ejemplo del comando de instalación Helm. Puede encontrar el valorECR-registry-account
correspondiente a su Región de AWS a partir de sus cuentas de registro de Amazon ECR por región.helm install livy-demo \ oci://895885662937.dkr.ecr.us-west-2.amazonaws.com/livy \ --version 7.3.0 \ --namespace
livy-ns
\ --set image=ECR-registry-account.dkr.ecr.region-id
.amazonaws.com/livy/emr-7.3.0:latest \ --set sparkNamespace=spark-ns
\ --set serviceAccount.executionRoleArn=arn:aws:iam::123456789012:role/my-role
Asignación del IRSA a una cuenta de servicio de Spark
Antes de asignar el IRSA a una cuenta de servicio de Spark, asegúrese de haber realizado los siguientes pasos:
-
Asegúrese de haber terminado la configuración de Apache Livy para Amazon EMR en EKS y de que está realizando la instalación de Apache Livy con Amazon EMR en EKS.
-
Debe tener un proveedor de OpenID Connect (OIDC) de IAM para su clúster. Para ver si ya tiene este proveedor o cómo crear uno, consulte Crear un proveedor de OIDC de IAM para su clúster.
-
Asegúrese de que tiene la versión 0.171.0 o posterior de la CLI de
eksctl
instalada o AWS CloudShell. Para instalar o actualizareksctl
, consulte Instalaciónen la eksctl
documentación.
Siga estos pasos para asignar el IRSA a su cuenta de servicio de Spark:
-
Ejecute el comando siguiente para obtener la cuenta de servicio de 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}' -
Establezca variables para el espacio de nombres y el nombre de la cuenta de servicio.
export namespace=
default
export service_account=my-service-account
-
Use el siguiente comando para crear un archivo de política de confianza para el rol de IAM. El siguiente ejemplo da permiso a todas las cuentas de servicio dentro del espacio de nombres para utilizar el rol. Para ello, sustituya
StringEquals
porStringLike
; sustituya, también,$service_account
por *.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
-
Cree el rol.
aws iam create-role --role-name
my-role
--assume-role-policy-document file://trust-relationship.json
--description "my-role-description" -
Asigne el servidor o la cuenta de servicio de Spark con el siguiente comando
eksctl
. Asegúrese de utilizar sus propios valores.eksctl create iamserviceaccount --name
spark-sa
\ --namespace spark-namespace --clusterlivy-eks-cluster
\ --attach-role-arn arn:aws:iam::0123456789012
:role/my-role
\ --approve --override-existing-serviceaccounts