Uso de roles de ejecución de trabajos con Amazon EMR en EKS
Para usar el comando StartJobRun
para enviar una ejecución de trabajo en un clúster de EKS, antes debe incorporar un rol de ejecución de trabajos para usarlo con un clúster virtual. Para obtener más información, consulte Crear un rol de ejecución de trabajos en Configuración de Amazon EMR en EKS. También puede seguir las instrucciones de la sección Crear rol de IAM para la ejecución de trabajos
Los siguientes permisos deben incluirse en la política de confianza del rol de ejecución de trabajos.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::
AWS_ACCOUNT_ID
:oidc-provider/OIDC_PROVIDER
" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringLike": { "OIDC_PROVIDER
:sub": "system:serviceaccount:NAMESPACE
:emr-containers-sa-*-*-AWS_ACCOUNT_ID
-BASE36_ENCODED_ROLE_NAME
" } } } ] }
La política de confianza del ejemplo anterior concede permisos únicamente a una cuenta de servicio de Kubernetes administrada por Amazon EMR con un nombre que coincida con el patrón emr-containers-sa-*-*-
. Las cuentas de servicio que sigan este patrón se crearán automáticamente al enviar el trabajo y se circunscribirán al espacio de nombres en el que envíes el trabajo. Esta política de confianza permite a estas cuentas de servicio asumir el rol de ejecución y obtener las credenciales temporales del rol de ejecución. Las cuentas de servicio de un clúster de Amazon EKS diferente o de un espacio de nombres diferente dentro del mismo clúster de EKS no pueden asumir el rol de ejecución.AWS_ACCOUNT_ID
-BASE36_ENCODED_ROLE_NAME
Puede ejecutar el siguiente comando para actualizar automáticamente la política de confianza en el formato indicado anteriormente.
aws emr-containers update-role-trust-policy \ --cluster-name
cluster
\ --namespacenamespace
\ --role-nameiam_role_name_for_job_execution
Control del acceso al rol de ejecución
Un administrador de su clúster de Amazon EKS puede crear un clúster virtual de Amazon EMR en EKS con varios inquilinos al que un administrador de IAM puede agregar varios roles de ejecución. Debido a que los inquilinos que no son de confianza pueden usar estos roles de ejecución para enviar trabajos que ejecutan código arbitrario, es posible que desee restringirlos para que no puedan ejecutar código que obtenga los permisos asignados a uno o más de estos roles de ejecución. Para restringir la política de IAM asociada a una identidad de IAM, el administrador de IAM puede utilizar la clave de condición opcional del nombre de recurso de Amazon (ARN) emr-containers:ExecutionRoleArn
. Esta condición acepta una lista de los ARN de los roles de ejecución que tienen permisos para el clúster virtual, tal como lo demuestra la siguiente política de permisos..
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "emr-containers:StartJobRun", "Resource": "arn:aws:emr-containers:
REGION
:AWS_ACCOUNT_ID
:/virtualclusters/VIRTUAL_CLUSTER_ID
", "Condition": { "ArnEquals": { "emr-containers:ExecutionRoleArn": [ "execution_role_arn_1
", "execution_role_arn_2
", ... ] } } } ] }
Si quiere permitir todos los roles de ejecución que comiencen con un prefijo concreto, como MyRole
, puede sustituir el operador de condición ArnEquals
por el operador ArnLike
y sustituir el valor execution_role_arn
de la condición por un carácter comodín *
. Por ejemplo, arn:aws:iam::
. También se admiten todas las demás claves de condición de ARN.AWS_ACCOUNT_ID
:role/MyRole*
nota
Con Amazon EMR en EKS, no puede conceder permisos a roles de ejecución en función de etiquetas o atributos. Amazon EMR en EKS no admite el control de acceso basado en etiquetas (TBAC) ni el control de acceso basado en atributos (ABAC) para roles de ejecución.