Habilitación de las consultas federadas entre cuentas - Amazon Athena

Habilitación de las consultas federadas entre cuentas

La consulta federada permite consultar orígenes de datos distintos de Amazon S3 mediante conectores de origen de datos implementados en AWS Lambda. La característica de consulta federada entre cuentas permite que la función de Lambda y los orígenes de datos que se van a consultar se encuentren en cuentas diferentes.

nota

Utilice este método únicamente si no ha registrado el origen de datos federado en el AWS Glue Data Catalog. Si registró el origen de datos en el AWS Glue Data Catalog, utilice el modelo de características y permisos entre cuentas de AWS Glue Data Catalog. Para más información, consulte Concesión de acceso entre cuentas en la Guía del usuario de AWS Glue.

Como administrador de datos, puede habilitar las consultas federadas entre cuentas al compartir el conector de datos con la cuenta de un analista de datos o, como analista de datos, al utilizar un ARN Lambda compartido de un administrador de datos para agregarlo a su cuenta. Cuando se hacen cambios de configuración en un conector de la cuenta de origen, la configuración actualizada se aplica automáticamente a las instancias compartidas del conector en las cuentas de otro usuario.

Consideraciones y limitaciones

  • La característica de consulta federada entre cuentas está disponible para conectores de datos de metastore que no son de Hive y utilizan un origen de datos basado en Lambda.

  • La característica no está disponible para el tipo de origen de datos AWS Glue Data Catalog. Para obtener información sobre el acceso entre cuentas a AWS Glue Data Catalog, consulte Configuración del acceso entre cuentas a los catálogos de datos de AWS Glue.

  • Si la respuesta de la función de Lambda del conector supera el límite de tamaño de respuesta de Lambda de 6 MB, Athena cifra, agrupa y distribuye de forma automática la respuesta en un bucket de Amazon S3 que configure. La entidad que ejecuta la consulta de Athena debe tener acceso a la ubicación de la distribución para que Athena pueda leer los datos distribuidos. Le recomendamos que establezca una política de ciclo de vida de Amazon S3 para eliminar los objetos de la ubicación de la distribución, ya que los datos no son necesarios una vez que finaliza la consulta.

  • No se admite el uso de consultas federadas entre Regiones de AWS.

Permisos necesarios

Para configurar los permisos necesarios, se deben realizar acciones tanto en la Cuenta A como en la Cuenta B.

Acciones en la cuenta A

Para que la cuenta A del administrador de datos comparta una función de Lambda con la cuenta B de analista de datos, la cuenta B requiere la función de invocación de Lambda y el acceso al bucket de desbordamiento. En consecuencia, la cuenta A debería agregar una política basada en recursos a la función de Lambda y el acceso de la entidad principal al bucket de desbordamiento en Amazon S3.

  1. La siguiente política otorga permisos de función de invocación de Lambda a la cuenta B en una función de Lambda en la cuenta A.

    { "Version": "2012-10-17", "Statement": [ { "Sid": "CrossAccountInvocationStatement", "Effect": "Allow", "Principal": { "AWS": ["arn:aws:iam::account-B-id:user/username"] }, "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:aws-region:account-A-id:function:lambda-function-name" } ] }
  2. La siguiente política permite el acceso del bucket de desbordamiento a la entidad principal de la cuenta B.

    { "Version": "2008-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": ["arn:aws:iam::account-B-id:user/username"] }, "Action": [ "s3:GetObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::spill-bucket", "arn:aws:s3:::spill-bucket/*" ] } ] }
  3. Si la función de Lambda cifra el bucket de desbordamiento con una clave AWS KMS en lugar del cifrado predeterminado que ofrece el SDK de federación, la política de claves AWS KMS de la cuenta A debe conceder acceso al usuario de la cuenta B, como en el ejemplo siguiente.

    { "Sid": "Allow use of the key", "Effect": "Allow", "Principal": { "AWS": ["arn:aws:iam::account-B-id:user/username"] }, "Action": [ "kms:Decrypt" ], "Resource": "*" // Resource policy that gets placed on the KMS key. }

Acciones en la cuenta B

Para que la cuenta A comparta el conector con la cuenta B, la cuenta B debe crear un rol denominado AthenaCrossAccountCreate-account-A-id que la cuenta A asume al llamar a la acción de la API AssumeRole de AWS Security Token Service.

  1. Utilice la consola de IAM o la AWS CLI para crear el rol de AthenaCrossAccountCreate-account-A-id como un rol de política de confianza personalizado. Una política de confianza personalizada delega el acceso y permite a otros realizar acciones en la cuenta de AWS. Para conocer los pasos, consulte Creación de un rol mediante políticas de confianza personalizadas en la Guía del usuario de IAM.

    La relación de confianza debe tener un objeto de entidad principal en el que la clave sea AWS y el valor sea el ARN de la cuenta A, como en el siguiente ejemplo.

    ... "Principal": { "AWS": ["arn:aws:iam::account-A-id:user/username"] }, ...
  2. En la Cuenta B, cree también una política como la siguiente que permita la acción CreateDataCatalog.

    { "Effect": "Allow", "Action": "athena:CreateDataCatalog", "Resource": "arn:aws:athena:*:account-B-id:datacatalog/*" }
  3. Agregue la política que permite la acción CreateDataCatalog al rol de AthenaCrossAccountCreate-account-A-id que creó con la cuenta B.

Uso compartido de un origen de datos de la cuenta A con la cuenta B

Una vez establecidos los permisos, puede utilizar la página Orígenes de datos y catálogos en la consola de Athena para compartir un conector de datos de la cuenta (cuenta A) con otra cuenta (cuenta B). La cuenta A mantiene el control y la propiedad del conector. Cuando la cuenta A hace cambios de configuración en el conector, la configuración actualizada se aplica al conector compartido de la cuenta B.

nota

Solo puede compartir un origen de datos de tipo Lambda y no es posible compartir orígenes de datos que utilicen conexiones de AWS Glue. Para obtener más información, consulte Conectores de orígenes de datos disponibles.

Para compartir un origen de datos de Lambda de la cuenta A con la cuenta B
  1. Abra la consola de Athena en https://console.aws.amazon.com/athena/.

  2. Si el panel de navegación de la consola no está visible, elija el menú de expansión de la izquierda.

    Elija el menú de expansión.
  3. Elija Orígenes de datos y catálogos.

  4. En la página Orígenes de datos y catálogos, elija el enlace del conector que desea compartir.

  5. En la página de detalles de un origen de datos de Lambda, en el menú Acciones de la esquina superior derecha, elija Compartir.

  6. En el cuadro de diálogo ¿Compartir nombre de Lambda con otra cuenta?, introduzca la información necesaria.

    • En Data source name (Nombre de origen de datos), ingrese el nombre del origen de datos copiado tal como quiera que aparezca en la otra cuenta.

    • En Account ID ID de cuenta, ingrese el ID de la cuenta con la que quiera compartir su origen de datos (en este caso, la cuenta B).

  7. Elija Compartir. El conector de datos compartidos que ha especificado se crea en la cuenta B. Los cambios de configuración del conector de la cuenta A se aplican al conector de la cuenta B.

Incorporación de un origen de datos compartido de la cuenta A a la cuenta B

Como analista de datos, es posible que se le proporcione el ARN de un conector para agregarlo a la cuenta desde un administrador de datos. Puede utilizar la página Orígenes de datos y catálogos de la consola de Athena para agregar el ARN de Lambda proporcionado por el administrador de la cuenta.

Para agregar el ARN de Lambda de un conector de datos compartido a la cuenta
  1. Abra la consola de Athena en https://console.aws.amazon.com/athena/.

  2. Si el panel de navegación no es visible, elija el menú de expansión de la izquierda.

  3. Elija Orígenes de datos y catálogos.

  4. En la página Orígenes de datos y catálogos, elija Crear origen de datos.

  5. En la página Elegir un origen de datos, elija Conector personalizado o compartido.

  6. Elija Siguiente.

  7. En la página Introducir detalles del origen de datos, en la sección Detalles de conexión, para Seleccionar o introducir una función de Lambda, introduzca el ARN de Lambda de la cuenta A.

  8. Elija Siguiente.

  9. En la página Revisar y crear, elija Crear origen de datos.

Solución de problemas

Si recibe un mensaje de error que indica que la cuenta A no tiene permisos para asumir un rol en la cuenta B, asegúrese de que el nombre del rol creado en la cuenta B esté escrito correctamente y de que tenga adjunta la política adecuada.