Habilitación de Lake Formation con Amazon EMR en EKS
Con las versiones 7.7 y posteriores de Amazon EMR, puede aprovechar AWS Lake Formation para aplicar controles de acceso detallados en las tablas del Catálogo de datos respaldadas por Amazon S3. Esta capacidad le permite configurar los controles de acceso a nivel de tabla, fila, columna y celda para las consultas de lectura dentro de sus trabajos de Spark de Amazon EMR en EKS.
En esta sección, explicamos cómo crear una configuración de seguridad y cómo configurar Lake Formation para que funcione con Amazon EMR. También explicamos cómo crear un clúster virtual con la configuración de seguridad que creó para Lake Formation. Estas secciones deben completarse en secuencia.
Paso 1: configurar permisos a nivel de columna, fila o celda basados en Lake Formation
Para aplicar permisos a nivel de tabla y columna con Lake Formation, el administrador del lago de datos de Lake Formation debe establecer la etiqueta de sesión LakeFormationAuthorizedCaller. Lake Formation usa esta etiqueta de sesión para autorizar a los intermediarios y proporcionar acceso al lago de datos.
Para habilitar el acceso a nivel de tabla, vaya a la consola de AWS Lake Formation y seleccione la opción Configuración de integración de aplicaciones en la sección Administración de la barra lateral. Luego, marque la casilla Permitir que motores externos filtren datos en las ubicaciones de Amazon S3 registradas en Lake Formation. Añada los ID de cuenta de AWS en los que se ejecutarían los trabajos de Spark y los valores de las etiquetas de sesión.
Tenga en cuenta que la etiqueta de sesión LakeFormationAuthorizedCaller que se menciona aquí se nombra en SecurityConfiguration más adelante, al configurar los roles de IAM, en la sección 3.
Paso 2: configurar los permisos RBAC de EKS
A continuación, configurará permisos para control de acceso basado en roles.
Proporcione permisos de clúster de EKS al servicio de Amazon EMR en EKS
El servicio Amazon EMR en EKS debe tener permisos de rol de clúster de EKS para poder crear permisos de espacios de nombres cruzados a fin de que el controlador del sistema genere ejecutores de usuarios en el espacio de nombres del usuario.
Cree su rol del clúster
Esta muestra define los permisos para una colección de recursos.
vim emr-containers-cluster-role.yaml --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: emr-containers 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: ["clusterroles","clusterrolebindings","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"] - apiGroups: ["kyverno.io"] resources: ["clusterpolicies"] verbs: ["create", "delete"] ---
kubectl apply -f emr-containers-cluster-role.yaml
Cree enlaces de roles de clúster
vim emr-containers-cluster-role-binding.yaml --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: emr-containers subjects: - kind: User name: emr-containers apiGroup: rbac.authorization.k8s.io roleRef: kind: ClusterRole name: emr-containers apiGroup: rbac.authorization.k8s.io ---
kubectl apply -f emr-containers-cluster-role-binding.yaml
Proporcione acceso de espacio de nombres al servicio de Amazon EMR en EKS
Cree dos espacios de nombres de Kubernetes, uno para el controlador de usuario y los ejecutores, y otro para el controlador y los ejecutores del sistema. Habilite el acceso al servicio Amazon EMR en EKS para enviar trabajos en los espacios de nombres de usuario y sistema. Siga la guía existente para proporcionar acceso a cada espacio de nombres, que está disponible en Enable cluster access using aws-auth.
Paso 3: configurar los roles de IAM para los componentes del perfil de usuario y del sistema
En tercer lugar, debe configurar los roles para componentes específicos. Un trabajo de Spark habilitado para Lake Formation tiene dos componentes: usuario y sistema. El controlador de usuario y los ejecutores se ejecutan en el espacio de nombres de usuario y están vinculados al JobExecutionRole que se pasa a la API StartJobrun. El controlador y los ejecutores del sistema se ejecutan en el espacio de nombres del sistema y están vinculados al rol QueryEngine.
Configure el rol Query Engine
El rol QueryEngine está vinculado a los componentes del espacio del sistema y tendría permisos para asumir la función JobExecutionRole con la etiqueta de sesión LakeFormationAuthorizedCaller. La política de permisos de IAM del rol Query Engine es la siguiente:
Configure la política de confianza del rol Query Engine para que confíe en el espacio de nombres del sistema Kubernetes.
aws emr-containers update-role-trust-policy \ --cluster-nameeks cluster\ --namespaceeks system namespace\ --role-namequery_engine_iam_role_name
Para obtener más información, consulte Actualización de una política de confianza de rol.
Configurar el rol de ejecución de tareas
Los permisos de Lake Formation controlan el acceso a los recursos de Catálogo de datos de AWS Glue, a las ubicaciones de Amazon S3 y a los datos subyacentes en esas ubicaciones. Los permisos de IAM controlan el acceso a las API y los recursos de Lake Formation y AWS Glue. Aunque es posible que tenga el permiso de Lake Formation para acceder a una tabla del Catálogo de datos (SELECT), la operación fallará si no tiene el permiso de IAM en la operativa de la API glue:Get*.
Política de permisos de IAM de JobExecutionRole: el rol JobExecution debe incluir las declaraciones de política en su política de permisos.
Política de confianza de IAM para JobExecutionRole:
Configure el rol de la política de confianza del trabajo para que confíe en el espacio de nombres de usuario de Kubernetes:
aws emr-containers update-role-trust-policy \ --cluster-nameeks cluster\ --namespaceeks User namespace\ --role-namejob_execution_role_name
Para obtener más información, consulte Update the trust policy of the job execution role.
Paso 4: establecer la configuración de seguridad
Para ejecutar un trabajo habilitado para Lake Formation, debe crear una configuración de seguridad.
aws emr-containers create-security-configuration \ --name 'security-configuration-name' \ --security-configuration '{ "authorizationConfiguration": { "lakeFormationConfiguration": { "authorizedSessionTagValue": "SessionTag configured in LakeFormation", "secureNamespaceInfo": { "clusterId": "eks-cluster-name", "namespace": "system-namespace-name" }, "queryEngineRoleArn": "query-engine-IAM-role-ARN" } } }'
Asegúrese de que la etiqueta de sesión pasada en el campo authorizedSessionTagValue pueda autorizar a Lake Formation. Establezca el valor como el configurado en Lake Formation en Paso 1: configurar permisos a nivel de columna, fila o celda basados en Lake Formation.
Paso 5: crear un clúster virtual
Cree un clúster virtual de Amazon EMR en EKS con una configuración de seguridad.
aws emr-containers create-virtual-cluster \ --name my-lf-enabled-vc \ --container-provider '{ "id": "eks-cluster", "type": "EKS", "info": { "eksInfo": { "namespace": "user-namespace" } } }' \ --security-configuration-idSecurityConfiguraionId
Asegúrese de pasar el identificador de SecurityConfiguration del paso anterior para que la configuración de autorización de Lake Formation se aplique a todos los trabajos que se ejecutan en el clúster virtual. Para obtener más información, consulte Register the Amazon EKS cluster with Amazon EMR.
Paso 6: enviar un trabajo en el clúster virtual habilitado para FGAC
El proceso de presentación de trabajos es el mismo tanto para los trabajos que son de Lake Formation como los que no lo son. Para obtener más información, consulte Submit a job run with StartJobRun.
El controlador, el ejecutor y los registros de eventos del controlador del sistema de Spark se almacenan en el bucket de S3 de la cuenta de servicio de AWS para su depuración. Recomendamos configurar una clave KMS administrada por el cliente en la ejecución de trabajos para cifrar todos los registros almacenados en el bucket de servicio de AWS. Para obtener más información sobre cómo habilitar el cifrado de registros, consulte Encrypting Amazon EMR on EKS logs.