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 Lambda y los orígenes de datos que se van a consultar se encuentren en cuentas diferentes.

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 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 que la cuenta A del administrador de datos comparta una función 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 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 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 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 la clave 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. }
  • 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.

    La siguiente política, que permite la acción CreateDataCatalog, debe crearse en la cuenta B y agregarse al rol AthenaCrossAccountCreate-account-A-id que crea la cuenta B para la cuenta A.

    { "Effect": "Allow", "Action": "athena:CreateDataCatalog", "Resource": "arn:aws:athena:*:account-B-id:datacatalog/*" }

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 Data sources (Orígenes de datos) en la consola de Athena para compartir un conector de datos de su 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.

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 Edit Data Source (Editar origen de datos).

  4. En la página Data sources (Orígenes de datos), elija el enlace del conector que quiera compartir.

  5. En la página de detalles de un origen de datos de Lambda, elija la opción Share (Compartir) en la esquina superior derecha.

    
                        Elija Compartir.
  6. En el cuadro de diálogo Share Lambda-name with another account (Compartir nombre-Lambda con otra cuenta, ingrese la información requerida.

    • 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).

    
                        Ingrese un nombre de origen de datos y un ID de Cuenta de AWS.
  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 Data sources (Orígenes de datos) 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 utiliza la nueva experiencia de la consola y el panel de navegación no está visible, elija el menú de expansión de la izquierda.

  3. Elija Edit Data Source (Editar origen de datos).

  4. En la página Data sources (Orígenes de datos), elija Connect data source (Conectar origen de datos).

    
                        Elija Connect data source (Conectar origen de datos).
  5. Elija Custom or shared connector (Conector personalizado o compartido).

    
                        Elija Custom or shared connector (Conector personalizado o compartido).
  6. En la sección Lambda function (Función Lambda), asegúrese de que esté seleccionada la opción Use an existing Lambda function (Utilizar una función Lambda existente).

    
                        Especificación del ARN de Lambda de otra cuenta.
  7. En Choose or enter a Lambda function (Elegir o ingresar una función Lambda), ingrese el ARN de Lambda de la cuenta A.

  8. Elija Connect data source (Conectar 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.