Uso de la autenticación LDAP para Presto en Amazon EMR - Amazon EMR

Uso de la autenticación LDAP para Presto en Amazon EMR

Siga los pasos de esta sección para configurar LDAP. Examine cada paso para ver ejemplos y enlaces a información adicional.

Paso 1: recopilar información sobre su servidor LDAP y copiar el certificado de servidor en Amazon S3

Necesitará la información y los elementos de la siguiente sección de su servidor LDAP para configurar la autenticación de LDAP.

La dirección IP o el nombre de host del servidor LDAP

El coordinador de Presto en el nodo maestro de Amazon EMR debe poder conectarse al servidor LDAP en la dirección IP o el nombre de host especificados. De forma predeterminada, Presto se comunica con el servidor LDAP mediante LDAPS a través del puerto 636. Si su implementación de LDAP requiere un puerto personalizado, puede especificarlo mediante la propiedad ldap.url con Amazon EMR 5.16.0 o versiones posteriores, o utilizar authentication.ldap.url con versiones anteriores. Sustituya el puerto personalizado de 636 que se muestra en los ejemplos de clasificación de configuración presto-config en Paso 3: Crear una configuración JSON con propiedades de Presto para LDAP. Asegúrese de que todos los firewalls y grupos de seguridad permiten el tráfico entrante y saliente en el puerto 636 (o en el puerto personalizado) y también en el puerto 8446 (o en el puerto personalizado), que se utiliza para las comunicaciones internas del clúster.

El certificado del servidor LDAP

Debe cargar el archivo de certificado en una ubicación segura en Amazon S3. Para obtener más información, consulte ¿Cómo puedo cargar archivos y carpetas en un bucket de S3? en la Guía del usuario de Amazon Simple Storage Service. Debe crear una acción de arranque que copie este certificado de Amazon S3 en cada nodo del clúster cuando se lance el clúster. En Paso 4: crear el script para copiar el certificado de servidor LDAP y cargarlo en Amazon S3. El certificado de ejemplo es s3://amzn-s3-demo-bucket/ldap_server.crt.

La configuración del servidor LDAP para la conexión anónima

Si la conexión anónima está deshabilitada en PrestoDB, necesita el ID de usuario (UID) y la contraseña de una cuenta con permisos para conectarse al servidor LDAP, de modo que el servidor de PrestoDB pueda establecer una conexión. El UID y la contraseña se especifican con las propiedades internal-communication.authentication.ldap.user e internal-communication.authentication.ldap.password en la clasificación de configuración presto-config. Amazon EMR 5.10.0 no admite esta configuración, por lo que la conexión anónima debe permitirse en el servidor LDAP cuando se utiliza esta versión.

Tenga en cuenta que Trino no requiere la configuración de enlace anónimo.

Para obtener el estado de la conexión anónima en el servidor LDAP
  • Utilice el comando ldapwhoami desde un cliente Linux, tal y como se muestra en el ejemplo siguiente:

    ldapwhoami -x -H ldaps://LDAPServerHostNameOrIPAddress

    Si la conexión anónima no está permitida, el comando devuelve lo siguiente:

    ldap_bind: Inappropriate authentication (48) additional info: anonymous bind disallowed
Para verificar que una cuenta tiene permisos para un servidor LDAP que utiliza la autenticación sencilla
  • Utilice el comando ldapwhoami desde un cliente Linux, tal y como se muestra en el ejemplo siguiente. El ejemplo utiliza un usuario ficticio, presto, almacenado en un servidor Open LDAP que se ejecuta en una instancia EC2 con el nombre de host ficticio ip-xxx-xxx-xxx-xxx.ec2.internal. El usuario está asociado a la unidad organizativa (OU) admins y a la contraseña 123456:

    ldapwhoami -x -w "123456" -D uid=presto,ou=admins,dc=ec2,dc=internal -H ldaps://ip-xxx-xxx-xxx-xxx.ec2.internal

    Si la cuenta es válida y tiene los permisos adecuados, el comando devuelve:

    dn:uid=presto,ou=admins,dc=ec2,dc=internal

Las configuraciones de ejemplo de Paso 3: Crear una configuración JSON con propiedades de Presto para LDAP incluyen esta cuenta por razones de claridad, con la excepción del ejemplo de 5.10.0, en el que no se admite. Si el servidor LDAP utiliza la conexión anónima, quite el par de nombre-valor internal-communication.authentication.ldap.user e internal-communication.authentication.ldap.password.

El nombre distintivo (DN) de LDAP para los usuarios de Presto

Cuando especifique la configuración de LDAP para Presto, debe especificar un patrón de conexión que conste de ${USER} junto con una unidad organizativa (OU) y los componentes de dominio (DC) adicionales. Presto sustituye ${USER} por el ID de usuario (UID) real de cada usuario durante la autenticación de contraseñas para que coincida con el nombre distintivo (DN) que este patrón de conexión especifica. Necesita las unidades organizativas a las que pertenecen los usuarios y sus DC. Por ejemplo, para permitir que los usuarios de la unidad organizativa admins del dominio corp.example.com se autentiquen en Presto, debe especificar ${USER},ou=admins,dc=corp,dc=example,dc=com como el patrón de conexión del usuario.

nota

Cuando utilice AWS CloudFormation, tendrá que utilizar la función Fn::Sub para sustituir ${USER} por el ID de usuario (UID) real. Para obtener más información, consulte el tema Fn::Sub en la Guía del usuario de AWS CloudFormation.

Cuando utilice Amazon EMR 5.10.0, solo puede especificar un patrón de este tipo. Con Amazon EMR 5.11.0 o versiones posteriores, puede especificar varios patrones separados por un signo de dos puntos (:). Los usuarios que intentan autenticarse en Presto se cotejan con el primer patrón, después con el segundo y así sucesivamente. Para ver un ejemplo, consulte Paso 3: Crear una configuración JSON con propiedades de Presto para LDAP.

Paso 2: Definir una configuración de seguridad

Cree una configuración de seguridad con el cifrado en tránsito habilitado. Para obtener más información, consulte Creación de una configuración de seguridad en la Guía de administración de Amazon EMR. Los artefactos de cifrado que proporcionó al configurar el cifrado en tránsito se utilizan para cifrar la comunicación interna entre los nodos de Presto. Para obtener más información, consulte Proporcionar certificados para cifrado de datos en tránsito. El certificado de servidor LDAP se utiliza para autenticar las conexiones cliente con el servidor de Presto.

Paso 3: Crear una configuración JSON con propiedades de Presto para LDAP

Se utiliza la clasificación de configuración presto-config para establecer las propiedades de Presto para LDAP. El formato y el contenido de presto-config varían ligeramente según la versión de lanzamiento de Amazon EMR y la instalación de Presto (PrestoDB o Trino). Más adelante en esta sección, se proporcionan ejemplos de las diferencias de configuración. Para obtener más información, consulte Configuración de aplicaciones.

En los siguientes pasos, se presupone que se guardan los datos de JSON en un archivo, MyPrestoConfig.json. Si utiliza la consola, cargue el archivo en un lugar seguro en Amazon S3 para que pueda hacer referencia a él cuando cree el clúster. Si utiliza la AWS CLI, puede hacer referencia al archivo localmente.

ejemplo Amazon EMR 6.1.0 y versiones posteriores con PrestoSQL (Trino)

En el siguiente ejemplo, se utiliza el nombre de host de LDAP de Paso 1: recopilar información sobre su servidor LDAP y copiar el certificado de servidor en Amazon S3 para la autenticación en el servidor LDAP para la conexión. Se especifican dos patrones de conexión de usuario, que indican que los usuarios dentro de las unidades organizativas admins y datascientists del servidor LDAP reúnen los requisitos para la autenticación en el servidor de Trino como usuarios. Los patrones de conexión están separados por un signo de dos puntos (:).

Las versiones 6.4.0 y posteriores de Amazon EMR utilizan el nuevo nombre Trino en lugar de PrestoSQL. Si usa Trino, sustituya prestosql-config en la siguiente clasificación de configuración por trino-config y prestosql-password-authenticator por trino-password-authenticator.

[ { "Classification":"prestosql-config", "Properties":{ "http-server.authentication.type":"PASSWORD" } }, { "Classification":"prestosql-password-authenticator", "Properties":{ "password-authenticator.name":"ldap", "ldap.url":"ldaps://ip-xxx-xxx-xxx-xxx.ec2.internal:636", "ldap.user-bind-pattern": "uid=${USER},ou=admins,dc=ec2,dc=internal:uid=${USER},ou=datascientists,dc=ec2,dc=internal" } } ]
ejemplo Versiones 5.16.0 y posteriores de Amazon EMR

En el siguiente ejemplo se utiliza el ID de usuario y la contraseña de LDAP y el nombre de host de LDAP Paso 1: recopilar información sobre su servidor LDAP y copiar el certificado de servidor en Amazon S3 para la autenticación en el servidor LDAP para la conexión. Se especifican dos patrones de conexión de usuario, que indican que los usuarios dentro de las unidades organizativas admins y datascientists del servidor LDAP reúnen los requisitos para la autenticación en el servidor de Presto como usuarios. Los patrones de conexión están separados por un signo de dos puntos (:).

[{ "Classification": "presto-config", "Properties": { "http-server.authentication.type": "PASSWORD" } }, { "Classification": "presto-password-authenticator", "Properties": { "password-authenticator.name": "ldap", "ldap.url": "ldaps://ip-xxx-xxx-xxx-xxx.ec2.internal:636", "ldap.user-bind-pattern": "uid=${USER},ou=admins,dc=ec2,dc=internal:uid=${USER},ou=datascientists,dc=ec2,dc=internal", "internal-communication.authentication.ldap.user": "presto", "internal-communication.authentication.ldap.password": "123456" } }]
ejemplo Amazon EMR 5.11.0 a 5.15.0

El formato de la clasificación de configuración presto-config es ligeramente diferente para estas versiones. En el siguiente ejemplo se especifican los mismos parámetros que en el ejemplo anterior.

[{ "Classification": "presto-config", "Properties": { "http-server.authentication.type": "LDAP", "authentication.ldap.url": "ldaps://ip-xxx-xxx-xxx-xxx.ec2.internal:636", "authentication.ldap.user-bind-pattern": "uid=${USER},ou=admins,dc=ec2,dc=internal:uid=${USER},ou=datascientists,dc=ec2,dc=internal", "internal-communication.authentication.ldap.user": "presto", "internal-communication.authentication.ldap.password": "123456" } }]
ejemplo Amazon EMR 5.10.0

Amazon EMR 5.10.0 solo admite la conexión anónima, por lo que se omiten estas entradas. Además, solo se puede especificar un patrón de conexión.

[{ "Classification": "presto-config", "Properties": { "http-server.authentication.type": "LDAP", "authentication.ldap.url": "ldaps://ip-xxx-xxx-xxx-xxx.ec2.internal:636", "ldap.user-bind-pattern": "uid=${USER},ou=prestousers,dc=ec2,dc=internal" } }]

Paso 4: crear el script para copiar el certificado de servidor LDAP y cargarlo en Amazon S3

Cree un script que copie el archivo de certificado en cada nodo del clúster y lo añada al almacén de claves. Cree el script con un editor de texto, guárdelo y, a continuación, cárguelo en Amazon S3. En Paso 5: Crear el clúster, se hace referencia al archivo de script como s3://amzn-s3-demo-bucket/LoadLDAPCert.sh.

El siguiente script de ejemplo utiliza la contraseña del almacén de claves predeterminada, changeit. Le recomendamos que se conecte al nodo principal después de crear el clúster y que cambie la contraseña del almacén de claves con el comando keytool.

#!/bin/bash aws s3 cp s3://amzn-s3-demo-bucket/ldap_server.crt . sudo keytool -import -keystore /usr/lib/jvm/jre-1.8.0-openjdk.x86_64/lib/security/cacerts -trustcacerts -alias ldap_server -file ./ldap_server.crt -storepass changeit -noprompt

Paso 5: Crear el clúster

Al crear el clúster, debe especificar Presto y demás aplicaciones que desee que Amazon EMR instale. Los siguientes ejemplos también hacen referencia a las propiedades de clasificación de configuración de un archivo JSON, pero también puede especificar la clasificación de configuración directamente.

Para crear un clúster de Presto con autenticación LDAP mediante la consola de Amazon EMR
  1. Vaya hasta la nueva consola de Amazon EMR y seleccione Ir a la consola antigua en el panel de navegación lateral. Para más información sobre lo que puede esperar al cambiar a la consola antigua, consulte Uso de la consola antigua.

  2. Elija Crear clúster e Ir a las opciones avanzadas.

  3. Elija Presto junto con las demás aplicaciones que desee que Amazon EMR instale y, en Configuración de software, seleccione un valor en Versión para la versión de Amazon EMR que desee utilizar. La autenticación LDAP solo se admite con Amazon EMR 5.10.0 y versiones posteriores.

  4. En Editar configuración de software, elija Cargar JSON desde S3, escriba la ubicación en Amazon S3 del archivo de configuración JSON que creó en Paso 3: Crear una configuración JSON con propiedades de Presto para LDAP y, a continuación, elija Siguiente.

  5. Configure el hardware y la conexión en red del clúster y, a continuación, elija Next (Siguiente).

  6. Elija Bootstrap Actions (Acciones de arranque). En Add bootstrap action (Añadir acción de arranque), seleccione Custom action (Acción personalizada) y después elija Configure and add (Configurar y añadir).

  7. Utilice el campo Nombre para escribir un nombre para la acción de arranque, utilice el campo Ubicación del script para especificar la ubicación de script que creó en el Paso 4: crear el script para copiar el certificado de servidor LDAP y cargarlo en Amazon S3 (por ejemplo, s3://amzn-s3-demo-bucket/LoadLDAPCert.sh) y después elija Añadir.

  8. En General Options (Opciones generales), Tags (Etiquetas) y Additional Options (Opciones adicionales), elija la configuración adecuada para su aplicación y después elija Next (Siguiente).

  9. Elija Authentication and encryption (Autenticación y cifrado) y, a continuación, seleccione el valor de Security configuration (Configuración de seguridad) correspondiente a la configuración de seguridad que creó en el Paso 2: Definir una configuración de seguridad.

  10. Elija otras opciones de seguridad que sean necesarias para su aplicación y, a continuación, elija Create cluster (Crear clúster).

Para crear un clúster de Presto con autenticación LDAP mediante la AWS CLI
  • Utilice el comando aws emr create-cluster. Como mínimo, especifique la aplicación de Presto y también la clasificación de configuración de Presto, el script de arranque y la configuración de seguridad que creó en los pasos anteriores. El siguiente ejemplo hace referencia al archivo de configuración como un archivo JSON guardado en el mismo directorio en el que se ejecuta el comando. El script de arranque, por otro lado, debe guardarse en Amazon S3. El siguiente ejemplo utiliza s3://amzn-s3-demo-bucket/LoadLDAPCert.sh.

    nota

    Se incluyen caracteres de continuación de línea de Linux (\) para facilitar la lectura. Se pueden eliminar o utilizar en los comandos de Linux. En Windows, elimínelos o sustitúyalos por un signo de intercalación (^).

    aws emr create-cluster --applications Name=presto --release-label emr-5.16.0 \ --use-default-roles --ec2-attributes KeyName=MyKeyPair,SubnetId=subnet-1234ab5 \ --instance-count 3 --instance-type m5.xlarge --region us-west-2 --name "MyPrestoWithLDAPAuth" \ --bootstrap-actions Name="Distribute LDAP server cert",Path="s3://amzn-s3-demo-bucket/LoadLDAPCert.sh" \ --security-configuration MyPrestoLDAPSecCfg --configurations file://MyPrestoConfig.json