Conectarse a Amazon S3
Como administrador de BigQuery, puedes crear una conexión para permitir que los analistas de datos accedan a los datos almacenados en los contenedores de Amazon Simple Storage Service (Amazon S3).
BigQuery Omni accede a los datos de Amazon S3 a través de conexiones. Cada conexión tiene su propio usuario de gestión de identidades y accesos (IAM) de Amazon Web Services (AWS). Concedes permisos a los usuarios a través de roles de AWS IAM. Las políticas de los roles de gestión de identidades y accesos de AWS determinan a qué datos puede acceder BigQuery en cada conexión.
Las conexiones son necesarias para consultar los datos de Amazon S3 y exportar los resultados de las consultas de BigQuery a tu segmento de Amazon S3.
Antes de empezar
Asegúrate de haber creado los siguientes recursos:
- Un Google Cloud proyecto con la API de conexión de BigQuery habilitada.
- Si utilizas el modelo de precios basado en la capacidad, asegúrate de que la API BigQuery Reservation esté habilitada en tu proyecto. Para obtener información sobre los precios, consulta los precios de BigQuery Omni.
- Una cuenta de AWS con permisos para modificar políticas de gestión de identidades y accesos en AWS.
Roles obligatorios
Para obtener los permisos que necesitas para crear una conexión y acceder a los datos de Amazon S3,
pide a tu administrador que te conceda el
rol de gestión de identidades y accesos Administrador de conexiones de BigQuery (roles/bigquery.connectionAdmin
) en el proyecto.
Para obtener más información sobre cómo conceder roles, consulta el artículo Gestionar el acceso a proyectos, carpetas y organizaciones.
También puedes conseguir los permisos necesarios a través de roles personalizados u otros roles predefinidos.
Crear una política de gestión de identidades y accesos de AWS para BigQuery
Asegúrate de seguir las prácticas recomendadas de seguridad para Amazon S3. Te recomendamos que hagas lo siguiente:
- Configura una política de AWS que impida el acceso a tu bucket de Amazon S3 a través de HTTP.
- Configura una política de AWS que impida el acceso público a tu bucket de Amazon S3.
- Utiliza el cifrado del lado del servidor de Amazon S3.
- Limita los permisos concedidos a la cuenta de Google al mínimo necesario.
- Configura CloudTrail y habilita los eventos de datos de Amazon S3.
Para crear una política de gestión de identidades y accesos de AWS, usa la consola de AWS o Terraform:
Consola de AWS
Ve a la consola de IAM de AWS. Asegúrate de que estás en la cuenta propietaria del segmento de Amazon S3 al que quieres acceder.
Selecciona Políticas > Crear política (se abre en una pestaña nueva).
Haz clic en JSON y pega lo siguiente en el editor:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::BUCKET_NAME" ] }, { "Effect": "Allow", "Action": [ "s3:GetObject", EXPORT_PERM ], "Resource": [ "arn:aws:s3:::BUCKET_NAME", "arn:aws:s3:::BUCKET_NAME/*" ] } ] }
Haz los cambios siguientes:
BUCKET_NAME
: el bucket de Amazon S3 al que quieres que acceda BigQuery.EXPORT_PERM
(opcional): permiso adicional si quieres exportar datos a un segmento de Amazon S3. Reemplazar por"s3:PutObject"
- Para separar el control de acceso a la exportación, te recomendamos que crees otra conexión con un rol de IAM de AWS independiente y que le concedas acceso de solo escritura. Para tener un control de acceso más detallado, también puedes limitar el acceso de un rol a una ruta específica del contenedor.
En el campo Name (Nombre), introduce un nombre para la política, como
bq_omni_read_only
.Haz clic en Crear política.
La política se crea con un nombre de recurso de Amazon (ARN) con el siguiente formato:
arn:aws:iam::AWS_ACCOUNT_ID:policy/POLICY_NAME
Haz los cambios siguientes:
AWS_ACCOUNT_ID
: número de ID del usuario de AWS IAM de la conexión.POLICY_NAME
: el nombre de la política que has elegido.
CLI de AWS
Para crear una política de gestión de identidades y accesos de AWS, usa el comando aws iam create-policy
:
aws iam create-policy \ --policy-name POLICY_NAME \ --policy-document '{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::BUCKET_NAME" ] }, { "Effect": "Allow", "Action": [ "s3:GetObject", EXPORT_PERM ], "Resource": [ "arn:aws:s3:::BUCKET_NAME", "arn:aws:s3:::BUCKET_NAME/*" ] } ] }'
Haz los cambios siguientes:
POLICY_NAME
: el nombre de la política que vas a crear.BUCKET_NAME
: el bucket de Amazon S3 al que quieres que acceda BigQuery.EXPORT_PERM
(opcional): permiso adicional si quieres exportar datos a un segmento de Amazon S3. Reemplazar por"s3:PutObject"
- Para separar el control de acceso a la exportación, te recomendamos que crees otra conexión con un rol de IAM de AWS independiente y que le concedas acceso de solo escritura. Para tener un control de acceso más detallado, también puedes limitar el acceso de un rol a una ruta específica del contenedor.
La política se crea con un nombre de recurso de Amazon (ARN) con el siguiente formato:
arn:aws:iam::AWS_ACCOUNT_ID:policy/POLICY_NAME
Haz los cambios siguientes:
AWS_ACCOUNT_ID
: número de ID del usuario de AWS IAM de la conexión.POLICY_NAME
: el nombre de la política que has elegido.
Terraform
Añade lo siguiente a tu configuración de Terraform para adjuntar una política a un recurso de segmento de Amazon S3:
resource "aws_iam_policy" "bigquery-omni-connection-policy" { name = "bigquery-omni-connection-policy" policy = <<-EOF { "Version": "2012-10-17", "Statement": [ { "Sid": "BucketLevelAccess", "Effect": "Allow", "Action": ["s3:ListBucket"], "Resource": ["arn:aws:s3:::BUCKET_NAME"] }, { "Sid": "ObjectLevelAccess", "Effect": "Allow", "Action": ["s3:GetObject",EXPORT_PERM], "Resource": [ "arn:aws:s3:::BUCKET_NAME", "arn:aws:s3:::BUCKET_NAME/*" ] } ] } EOF }
Haz los cambios siguientes:
BUCKET_NAME
: el bucket de Amazon S3 al que quieres que acceda BigQuery.EXPORT_PERM
(opcional): permiso adicional si quieres exportar datos a un segmento de Amazon S3. Reemplazar por"s3:PutObject"
- Para separar el control de acceso a la exportación, te recomendamos que crees otra conexión con un rol de gestión de identidades y accesos de AWS independiente y que le concedas acceso de solo escritura. Para tener un control más granular del acceso, también puedes limitar el acceso de un rol a una ruta específica del contenedor.
Crear un rol de gestión de identidades y accesos de AWS para BigQuery
A continuación, crea un rol que permita acceder al segmento de Amazon S3 desde BigQuery. Este rol usa la política que has creado en la sección anterior.
Para crear un rol de gestión de identidades y accesos de AWS, usa la consola de AWS o Terraform:
Consola de AWS
Ve a la consola de IAM de AWS. Asegúrate de que estás en la cuenta propietaria del segmento de Amazon S3 al que quieres acceder.
Selecciona Roles > Crear rol.
En Select type of trusted entity (Seleccionar tipo de entidad de confianza), selecciona Web Identity (Identidad web).
En Proveedor de identidades, selecciona Google.
En Audiencia, introduce
00000
como valor de marcador de posición. Sustituirás el valor más adelante.Haz clic en Siguiente: Permisos.
Para conceder acceso al rol a tus datos de Amazon S3, adjunta una política de gestión de identidades y accesos al rol. Busca la política que has creado en la sección anterior y haz clic en el interruptor.
Haz clic en Siguiente: Etiquetas.
Haz clic en Siguiente: Revisar. Introduce un nombre para el rol, como
BQ_Read_Only
.Haz clic en Crear rol.
CLI de AWS
Usa el siguiente comando para crear un rol de gestión de identidades y accesos y asignarle la política creada:
aws iam create-role \ --role-name bigquery-omni-connection \ --max-session-duration 43200 \ --assume-role-policy-document '{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "accounts.google.com" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "accounts.google.com:sub": "00000" } } } ] }'
Terraform
Añade lo siguiente a tu configuración de Terraform para crear un rol de gestión de identidades y accesos (IAM) y asignar la política al rol creado:
resource "aws_iam_role" "bigquery-omni-connection-role" { name = "bigquery-omni-connection" max_session_duration = 43200 assume_role_policy = <<-EOF { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "accounts.google.com" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "accounts.google.com:sub": "00000" } } } ] } EOF } resource "aws_iam_role_policy_attachment" "bigquery-omni-connection-role-attach" { role = aws_iam_role.bigquery-omni-connection-role.name policy_arn = aws_iam_policy.bigquery-omni-connection-policy.arn } output "bigquery_omni_role" { value = aws_iam_role.bigquery-omni-connection-role.arn }
A continuación, adjunta la política al rol:
aws iam attach-role-policy \ --role-name bigquery-omni-connection \ --policy-arn arn:aws:iam::AWS_ACCOUNT_ID:policy/POLICY_NAME
Haz los cambios siguientes:
AWS_ACCOUNT_ID
: número de ID del usuario de AWS IAM de la conexión.POLICY_NAME
: el nombre de la política que has elegido.
Crear conexiones
Para conectarse a su segmento de Amazon S3, utilice la Google Cloud consola, la herramienta de línea de comandos bq o la biblioteca de cliente:
Consola
Ve a la página BigQuery.
En el panel Explorador, haz clic en
Añadir datos.Se abrirá el cuadro de diálogo Añadir datos.
En el panel Filtrar por, en la sección Tipo de fuente de datos, selecciona Almacenamiento o lagos de datos.
También puede introducir
aws
oAmazon S3
en el campo Buscar fuentes de datos.En la sección Fuentes de datos destacadas, haga clic en Amazon S3.
Haz clic en la tarjeta de solución Amazon S3 Omni: federación de BigQuery.
En el cuadro de diálogo Crear tabla, en el campo ID de conexión, seleccione Crear una conexión de S3.
En el panel Fuente de datos externa, introduce la siguiente información:
- En Tipo de conexión, seleccione BigLake en AWS (a través de BigQuery Omni).
- En Connection ID (ID de conexión), introduce un identificador para el recurso de conexión. Puedes usar letras, números, guiones y guiones bajos.
- En Región, selecciona la ubicación en la que quieras crear la conexión.
- Opcional: En Nombre descriptivo, introduce un nombre descriptivo para la conexión, como
My connection resource
. El nombre descriptivo puede ser cualquier valor que te ayude a identificar el recurso de conexión si necesitas modificarlo más adelante. - Opcional: En Descripción, escribe una descripción de este recurso de conexión.
- En ID de rol de AWS, introduce el ID de rol de gestión de identidades y accesos completo que has creado con este formato:
arn:aws:iam::AWS_ACCOUNT_ID:role/ROLE_NAME
Haga clic en Crear conexión.
Haz clic en Ir a la conexión.
En el panel Información de la conexión, copia la identidad de Google de BigQuery. Se trata de un principal de Google específico de cada conexión. Ejemplo:
BigQuery Google identity: IDENTITY_ID
Terraform
resource "google_bigquery_connection" "connection" { connection_id = "bigquery-omni-aws-connection" friendly_name = "bigquery-omni-aws-connection" description = "Created by Terraform" location = "AWS_LOCATION" aws { access_role { # This must be constructed as a string instead of referencing the # AWS resources directly to avoid a resource dependency cycle # in Terraform. iam_role_id = "arn:aws:iam::AWS_ACCOUNT:role/IAM_ROLE_NAME" } } }
Haz los cambios siguientes:
AWS_LOCATION
: una ubicación de Amazon S3 en Google CloudAWS_ACCOUNT
: tu ID de cuenta de AWS.IAM_ROLE_NAME
: el rol que permite acceder al segmento de Amazon S3 desde BigQuery. Usa el valor del argumentoname
del recursoaws_iam_role
en Crear un rol de gestión de identidades y accesos de AWS para BigQuery.
bq
bq mk --connection --connection_type='AWS' \ --iam_role_id=arn:aws:iam::AWS_ACCOUNT_ID:role/ROLE_NAME \ --location=AWS_LOCATION \ CONNECTION_ID
Haz los cambios siguientes:
AWS_ACCOUNT_ID
: número de ID del usuario de AWS IAM de la conexión.ROLE_NAME
: el nombre de la política de rol que has elegidoAWS_LOCATION
: una ubicación de Amazon S3 en Google CloudCONNECTION_ID
: el ID que asignas a este recurso de conexión.
La línea de comandos muestra el siguiente resultado:
Identity: IDENTITY_ID
La salida contiene lo siguiente:
IDENTITY_ID
: un principal de Google que Google Cloud controla y que es específico de cada conexión.
Anota el valor de IDENTITY_ID
.
Java
Antes de probar este ejemplo, sigue las Javainstrucciones de configuración de la guía de inicio rápido de BigQuery con bibliotecas de cliente. Para obtener más información, consulta la documentación de referencia de la API Java de BigQuery.
Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación para bibliotecas de cliente.
Añadir una relación de confianza al rol de AWS
BigQuery Omni ofrece dos métodos para acceder de forma segura a los datos de Amazon S3.
Puedes conceder acceso a la cuenta de servicio a tu rol de AWS o, si tu cuenta de AWS tiene un proveedor de identidades personalizado para accounts.google.com
, debes añadir la cuenta de servicio como audiencia al proveedor: Google Cloud Google Cloud
- Añade la política de confianza al rol de AWS.
- Configura un proveedor de identidades de AWS personalizado.
Añade una política de confianza al rol de AWS
La relación de confianza permite que la conexión asuma el rol y acceda a los datos de Amazon S3 tal como se especifica en la política de roles.
Para añadir una relación de confianza, usa la consola de AWS o Terraform:
Consola de AWS
Ve a la consola de IAM de AWS. Asegúrate de que estás en la cuenta propietaria del segmento de Amazon S3 al que quieres acceder.
Selecciona Roles.
Selecciona el
ROLE_NAME
que has creado.Haga clic en Editar y, a continuación, siga estos pasos:
En Duración máxima de la sesión, selecciona 12 horas. Como cada consulta puede ejecutarse durante un máximo de seis horas, esta duración permite un intento adicional. Si aumentas la duración de la sesión a más de 12 horas, no podrás hacer más reintentos. Para obtener más información, consulta el límite de tiempo de ejecución de consultas o consultas con varias instrucciones.
Haz clic en Guardar cambios.
Selecciona Relaciones de confianza y haz clic en Editar relación de confianza. Sustituye el contenido de la política por lo siguiente:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "accounts.google.com" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "accounts.google.com:sub": "IDENTITY_ID" } } } ] }
Sustituye
IDENTITY_ID
por el valor de identidad de Google de BigQuery, que puedes encontrar en la Google Cloud consola de la conexión que has creado.Haz clic en Actualizar política de confianza.
CLI de AWS
Para crear una relación de confianza con la conexión de BigQuery, usa el comando aws iam update-assume-role-policy
:
aws iam update-assume-role-policy \ --role-name bigquery-omni-connection \ --policy-document '{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "accounts.google.com" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "accounts.google.com:sub": "IDENTITY_ID" } } } ] }' aws iam update-assume-role-policy \ --role-name bigquery-omni-connection \ --policy-document '{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "accounts.google.com" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "accounts.google.com:sub": "IDENTITY_ID" } } } ] }'
Haz los cambios siguientes:
IDENTITY_ID
: el valor de identidad de Google de BigQuery, que puedes encontrar en la consola de Google Cloud la conexión que has creado.
Terraform
Actualiza el recurso aws_iam_role
en la configuración de Terraform para añadir una relación de confianza:
resource "aws_iam_role" "bigquery-omni-connection-role" { name = "bigquery-omni-connection" max_session_duration = 43200 assume_role_policy = <<-EOF { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "accounts.google.com" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "accounts.google.com:sub": "${google_bigquery_connection.connection.aws[0].access_role[0].identity}" } } } ] } EOF }
La conexión ya está lista para usarse.
Configurar un proveedor de identidades de AWS personalizado
Si tu cuenta de AWS tiene un proveedor de identidades personalizado para accounts.google.com
, tendrás que añadir IDENTITY_ID como audiencia al proveedor. Para ello, puedes hacer lo siguiente:
Ve a la consola de IAM de AWS. Asegúrate de que estás en la cuenta propietaria del segmento de Amazon S3 al que quieres acceder.
Ve a IAM > Proveedores de identidades.
Selecciona el proveedor de identidades de accounts.google.com.
Haga clic en Añadir audiencia y añada el IDENTITY_ID como audiencia.
La conexión ya está lista para usarse.
Compartir conexiones con usuarios
Puede conceder los siguientes roles para permitir que los usuarios consulten datos y gestionen conexiones:
roles/bigquery.connectionUser
: permite a los usuarios usar conexiones para conectarse con fuentes de datos externas y ejecutar consultas en ellas.roles/bigquery.connectionAdmin
: permite a los usuarios gestionar las conexiones.
Para obtener más información sobre los roles y permisos de gestión de identidades y accesos en BigQuery, consulta el artículo sobre roles y permisos predefinidos.
Selecciona una de las opciones siguientes:
Consola
Ve a la página BigQuery.
Las conexiones se muestran en tu proyecto, en un grupo llamado Conexiones externas.
En el panel Explorador, haga clic en el nombre del proyecto > Conexiones externas > conexión.
En el panel Detalles, haz clic en Compartir para compartir una conexión. A continuación, sigue estas instrucciones:
En el cuadro de diálogo Permisos de conexión, comparte la conexión con otras entidades principales añadiendo o editando entidades principales.
Haz clic en Guardar.
bq
No puedes compartir una conexión con la herramienta de línea de comandos bq. Para compartir una conexión, usa la Google Cloud consola o el método de la API Connections de BigQuery.
API
Usa el método projects.locations.connections.setIAM
de la sección de referencia de la API REST Connections de BigQuery y proporciona una instancia del recurso policy
.
Java
Antes de probar este ejemplo, sigue las Javainstrucciones de configuración de la guía de inicio rápido de BigQuery con bibliotecas de cliente. Para obtener más información, consulta la documentación de referencia de la API Java de BigQuery.
Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación para bibliotecas de cliente.
Siguientes pasos
- Consulta información sobre los diferentes tipos de conexión.
- Consulta cómo gestionar las conexiones.
- Consulta información sobre BigQuery Omni.
- Usa el laboratorio de BigQuery Omni con AWS.
- Consulta información sobre las tablas de BigLake.
- Consulta cómo consultar datos de Amazon S3.
- Consulta cómo exportar resultados de consultas a un segmento de Amazon S3.