Se connecter à Amazon S3
En tant qu'administrateur BigQuery, vous pouvez créer une connexion pour permettre aux analystes de données d'accéder aux données stockées dans des buckets Amazon S3 (pour Simple Storage Service).
BigQuery Omni accède aux données Amazon S3 via des connexions. Chaque connexion possède son propre utilisateur IAM (Identity and Access Management) Amazon Web Services (AWS). Vous accordez des autorisations aux utilisateurs à l'aide des rôles IAM AWS. Les stratégies des rôles IAM AWS déterminent les données auxquelles BigQuery peut accéder pour chaque connexion.
Les connexions sont nécessaires pour interroger les données Amazon S3 et exporter les résultats de requête de BigQuery vers votre bucket Amazon S3.
Avant de commencer
Assurez-vous d'avoir créé les ressources suivantes :
- Un projet Google Cloud avec l'API BigQuery Connection activée.
- Si vous utilisez le modèle de tarification basé sur la capacité, assurez-vous d'avoir activé l'API BigQuery Reservation pour votre projet. Pour en savoir plus sur les tarifs, consultez la section Tarifs de BigQuery Omni.
- Un compte AWS disposant des autorisations nécessaires pour modifier les stratégies IAM dans AWS.
Rôles requis
Afin d'obtenir les autorisations nécessaires pour créer une connexion afin d'accéder aux données Amazon S3, demandez à votre administrateur de vous accorder le rôle IAM Administrateur de connexion BigQuery (roles/bigquery.connectionAdmin
) sur le projet.
Pour en savoir plus sur l'attribution de rôles, consultez la section Gérer les accès.
Vous pouvez également obtenir les autorisations requises via des rôles personnalisés ou d'autres rôles prédéfinis.
Créer une stratégie IAM AWS pour BigQuery
Assurez-vous de suivre les bonnes pratiques de sécurité pour Amazon S3. Nous vous recommandons d'effectuer les opérations suivantes :
- Configurer une stratégie AWS qui empêche l'accès au bucket Amazon S3 via HTTP
- Configurer une stratégie AWS qui empêche l'accès public au bucket Amazon S3
- Utiliser le chiffrement côté serveur Amazon S3
- Limiter les autorisations accordées au compte Google au minimum requis
- Configurer CloudTrails et activer les événements de données Amazon S3
Pour créer une stratégie IAM AWS, utilisez la console AWS ou Terraform :
Console AWS
- Accédez à la console IAM (Identity and Access Management) AWS. Vérifiez que vous vous trouvez dans le compte contenant le bucket Amazon S3 auquel vous souhaitez accéder.
- Sélectionnez Règles > Créer une règle (s'ouvre dans un nouvel onglet).
Cliquez sur JSON, puis collez le texte suivant dans l'éditeur :
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::BUCKET_NAME" ] }, { "Effect": "Allow", "Action": [ "s3:GetObject" ], "Resource": [ "arn:aws:s3:::BUCKET_NAME", "arn:aws:s3:::BUCKET_NAME/*" ] } ] }
Remplacez les éléments suivants :
BUCKET_NAME
: bucket Amazon S3 auquel vous souhaitez que BigQuery accède.
Dans le champ Nom, saisissez un nom de stratégie, tel que
bq_omni_read_only
.Cliquez sur Create policy (Créer une régle).
La stratégie est créée avec un nom de ressource Amazon (ARN) au format suivant :
arn:aws:iam::AWS_ACCOUNT_ID:policy/POLICY_NAME
Remplacez les éléments suivants :
AWS_ACCOUNT_ID
: numéro d'identification de l'utilisateur IAM AWS à l'origine de la connexionPOLICY_NAME
: nom de la règle que vous avez choisi.
Terraform
Ajoutez les éléments suivants à votre configuration Terraform pour associer une stratégie à une ressource de bucket 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"], "Resource": [ "arn:aws:s3:::BUCKET_NAME", "arn:aws:s3:::BUCKET_NAME/*" ] } ] } EOF }
Remplacez BUCKET_NAME
par le bucket Amazon S3 auquel vous souhaitez que BigQuery accède.
Si vous devez exporter des données vers un bucket Amazon S3, vous devez également disposer de l'autorisation s3:PutObject
. Pour dissocier le contrôle des accès, nous vous recommandons de créer une autre connexion à l'aide d'un rôle IAM AWS distinct auquel vous accordez un accès en écriture seule. Pour un contrôle d'accès plus précis, vous pouvez également limiter l'accès d'un rôle à un chemin spécifique du bucket.
Créer un rôle IAM AWS pour BigQuery
Vous allez ensuite créer un rôle permettant d'accéder au bucket Amazon S3 depuis BigQuery. Ce rôle utilise la stratégie que vous avez créée dans la section précédente.
Pour créer un rôle IAM AWS, utilisez la console AWS ou Terraform :
Console AWS
- Accédez à la console IAM AWS. Vérifiez que vous vous trouvez dans le compte contenant le bucket Amazon S3 auquel vous souhaitez accéder.
- Sélectionnez Rôles > Créer un rôle.
- Dans le champ Sélectionner le type d'entité de confiance, sélectionnez Identité Web.
- Pour Fournisseur d'identité, sélectionnez Google.
- Pour Audience, saisissez la valeur d'espace réservé
00000
. Vous remplacerez cette valeur ultérieurement. - Cliquez sur Next: Permissions (Suivant : Autorisations).
- Pour autoriser le rôle à accéder à vos données Amazon S3, associez-lui une stratégie IAM. Recherchez la stratégie que vous avez créée dans la section précédente, puis cliquez sur le bouton d'activation/de désactivation.
- Cliquez sur Next: Tags (Suivant : Tags).
- Cliquez sur Suivant : Relire. Saisissez un nom pour le rôle, par exemple
BQ_Read_Only
. - Cliquez sur Créer un rôle.
Terraform
Ajoutez ci-dessous à votre configuration Terraform pour créer un rôle IAM et attribuez la stratégie au rôle créé :
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 }
Créer des connexions
Pour vous connecter à votre bucket Amazon S3, utilisez la console Google Cloud, l'outil de ligne de commande bq ou la bibliothèque cliente :
Console
Accédez à la page BigQuery.
Dans le menu Ajouter des données
, sélectionnez Source de données externe.Dans le volet Source de données externes, saisissez les informations suivantes :
- Dans le champ Type de connexion, sélectionnez BigLake sur AWS (via BigQuery Omni).
- Dans le champ Connection ID (ID de connexion), saisissez un identifiant pour la ressource de connexion. Vous pouvez utiliser des lettres, des chiffres et des traits de soulignement.
- Sélectionnez l'emplacement où vous souhaitez créer la connexion.
- Facultatif : Dans le champ Nom descriptif, saisissez un nom clair pour identifier la connexion, tel que
My connection resource
. Ce nom peut correspondre à n'importe quelle valeur permettant d'identifier la ressource de connexion si vous devez la modifier ultérieurement. - Facultatif : Dans le champ Description, saisissez une description pour la ressource de connexion.
- Dans le champ ID du rôle AWS, saisissez l'ID complet du rôle IAM que vous avez créé au format suivant :
arn:aws:iam::AWS_ACCOUNT_ID:role/ROLE_NAME
.
Cliquez sur Créer une connexion.
Cliquez sur Accéder à la connexion.
Dans le volet Connection info (Informations de connexion), copiez l'identité BigQuery Google. Il s'agit d'un principe de Google spécifique à chaque connexion. Exemple :
BigQuery Google identity: 000000000000000000000
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" } } }
Remplacez les éléments suivants :
AWS_LOCATION
: emplacement Amazon S3 dans Google CloudAWS_ACCOUNT
: ID de compte AWS.IAM_ROLE_NAME
: rôle permettant d'accéder au bucket Amazon S3 depuis BigQuery. Utilisez la valeur de l'argumentname
de la ressourceaws_iam_role
dans la section Créer un rôle IAM AWS pour 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
Remplacez les éléments suivants :
AWS_ACCOUNT_ID
: numéro d'identification de l'utilisateur IAM AWS à l'origine de la connexionROLE_NAME
: nom de la stratégie de rôle choisieAWS_LOCATION
: emplacement Amazon S3 dans Google CloudCONNECTION_ID
: ID que vous attribuez à cette ressource de connexion.
La ligne de commande affiche le résultat suivant :
Identity: IDENTITY_ID
Le résultat contient les éléments suivants :
IDENTITY_ID
: compte principal Google contrôlé par Google Cloud, spécifique à chaque connexion.
Notez la valeur IDENTITY_ID
.
Java
Avant d'essayer cet exemple, suivez les instructions de configuration pour Java du guide de démarrage rapide de BigQuery : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API BigQuery pour Java.
Pour vous authentifier auprès de BigQuery, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour les bibliothèques clientes.
Ajouter une relation d'approbation au rôle AWS
BigQuery Omni propose deux méthodes pour accéder en toute sécurité aux données depuis Amazon S3. Vous pouvez accorder au compte de service Google Cloud l'accès à votre rôle AWS ou, si votre compte AWS dispose d'un rôle Fournisseur d'identité personnalisé pour accounts.google.com, vous devez ajouter le compte de service Google Cloud en tant qu'audience au fournisseur :
- Ajoutez la stratégie d'approbation au rôle AWS.
- Configurez un fournisseur d'identité AWS personnalisé.
Ajouter une stratégie d'approbation au rôle AWS
La relation d'approbation permet à la connexion d'assurer le rôle qui lui a été attribué, et d'accéder aux données Amazon S3 comme spécifié dans la stratégie des rôles.
Pour ajouter une relation d'approbation, utilisez la console AWS ou Terraform :
Console AWS
- Accédez à la console IAM AWS. Vérifiez que vous vous trouvez dans le compte contenant le bucket Amazon S3 auquel vous souhaitez accéder.
- Cliquez sur Rôles.
- Sélectionnez le nom du rôle (
ROLE_NAME
) que vous avez créé. Cliquez sur Modifier, puis procédez comme suit :
Définissez la durée maximale de la session sur 12 heures. Étant donné que chaque requête peut s'exécuter pendant un maximum de six heures, cette durée permet une nouvelle tentative. L'augmentation de la durée de session au-delà de 12 heures n'autorise pas de nouvelles tentatives. Pour en savoir plus, consultez la limite de temps d'exécution des requêtes sur plusieurs instructions.
Cliquez sur Enregistrer les modifications.
Sélectionnez Relations d'approbation, puis cliquez sur Edit trust relationship (Modifier la relation d'approbation). Remplacez le contenu de la règle par ce qui suit :
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "accounts.google.com" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "accounts.google.com:sub": "IDENTITY_ID" } } } ] }
Remplacez
IDENTITY_ID
par la valeur de l'identité Google BigQuery, que vous pouvez trouver sur la page de la console AWS pour la connexion que vous avez créée.Cliquez sur Update Trust Policy (Mettre à jour la règle d'approbation).
Terraform
Mettez à jour la ressource aws_iam_role
dans la configuration Terraform pour ajouter une relation d'approbation :
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 connexion est maintenant prête à être utilisée.
Configurer un fournisseur d'identité AWS personnalisé
Si votre compte AWS dispose d'un fournisseur d'identité personnalisé pour accounts.google.com, vous devez ajouter IDENTITY_ID comme une audience pour le fournisseur. Pour ce faire, vous pouvez utiliser au choix l'une des méthodes suivantes :
Dans la console AWS, accédez à la page IAM.
Accédez à IAM > Fournisseurs d'identité.
Sélectionnez le fournisseur d'identité pour accounts.google.com.
Cliquez sur Ajouter une audience et ajoutez IDENTITY_ID comme audience.
La connexion est maintenant prête à être utilisée.
Partager des connexions avec les utilisateurs
Vous pouvez attribuer les rôles suivants pour permettre aux utilisateurs d'interroger des données et de gérer les connexions :
roles/bigquery.connectionUser
permet aux utilisateurs de se connecter à des sources de données externes et d'y exécuter des requêtes.roles/bigquery.connectionAdmin
permet aux utilisateurs de gérer les connexions.
Pour en savoir plus sur les rôles et les autorisations IAM dans BigQuery, consultez la page Rôles prédéfinis et autorisations.
Sélectionnez l'une des options suivantes :
Console
Accédez à la page BigQuery.
Les connexions sont répertoriées dans votre projet, dans un groupe appelé Connexions externes.
Dans le volet Explorateur, cliquez sur votre nom de projet > Connexions externes > connexion.
Dans le volet Détails, cliquez sur Partager pour partager une connexion. Ensuite, procédez comme suit :
Dans la boîte de dialogue Autorisations de connexion, partagez la connexion avec d'autres comptes principaux en ajoutant ou en modifiant des comptes principaux.
Cliquez sur Enregistrer.
bq
Vous ne pouvez pas partager de connexion avec l'outil de ligne de commande bq. Pour partager une connexion, utilisez la console Google Cloud ou la méthode de l'API BigQuery Connections permettant le partage de connexion.
API
Utilisez la méthode projects.locations.connections.setIAM
dans la section de référence de l'API REST BigQuery Connections et fournissez une instance de la ressource policy
.
Java
Avant d'essayer cet exemple, suivez les instructions de configuration pour Java du guide de démarrage rapide de BigQuery : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API BigQuery pour Java.
Pour vous authentifier auprès de BigQuery, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour les bibliothèques clientes.
Étapes suivantes
- Découvrez les différents types de connexions.
- Découvrez comment gérer les connexions.
- Découvrez BigQuery Omni.
- Utilisez l'atelier BigQuery Omni avec AWS.
- Découvrez les tables BigLake.
- Découvrez comment interroger des données Amazon S3.
- Apprenez à exporter des résultats de requêtes vers un bucket Amazon S3.