Estabeleça a associação ao Amazon S3
Como administrador do BigQuery, pode criar uma associação para permitir que os analistas de dados acedam aos dados armazenados em contentores do Amazon Simple Storage Service (Amazon S3).
O BigQuery Omni acede aos dados do Amazon S3 através de ligações. Cada associação tem o seu próprio utilizador único do Amazon Web Services (AWS) Identity and Access Management (IAM). Concede autorizações aos utilizadores através de funções do AWS IAM. As políticas nas funções de IAM do AWS determinam a que dados o BigQuery pode aceder para cada ligação.
As associações são necessárias para consultar os dados do Amazon S3 e exportar os resultados da consulta do BigQuery para o seu contentor do Amazon S3.
Antes de começar
Certifique-se de que criou os seguintes recursos:
- Um Trusted Cloud projeto com a API BigQuery Connection ativada.
- Se estiver no modelo de preços baseado na capacidade, certifique-se de que ativou a API BigQuery Reservation para o seu projeto. Para informações sobre os preços, consulte os preços do BigQuery Omni.
- Uma conta da AWS com autorizações para modificar as políticas de IAM na AWS.
Funções necessárias
Para receber as autorizações de que
precisa para criar uma associação para aceder aos dados do Amazon S3,
peça ao seu administrador para lhe conceder a função de IAM
administrador de associações do BigQuery (roles/bigquery.connectionAdmin
)
no projeto.
Para mais informações sobre a atribuição de funções, consulte o artigo Faça a gestão do acesso a projetos, pastas e organizações.
Também pode conseguir as autorizações necessárias através de funções personalizadas ou outras funções predefinidas.
Crie uma política de IAM do AWS para o BigQuery
Certifique-se de que segue as práticas recomendadas de segurança para o Amazon S3. Recomendamos que faça o seguinte:
- Configure uma política da AWS que impeça o acesso ao seu contentor do Amazon S3 através de HTTP.
- Configure uma política da AWS que impeça o acesso público ao seu contentor do Amazon S3.
- Use a encriptação do lado do servidor do Amazon S3.
- Limite as autorizações concedidas à Conta Google ao mínimo necessário.
- Configure o CloudTrails e ative os eventos de dados do Amazon S3.
Para criar uma política de IAM do AWS, use a consola do AWS ou o Terraform:
Consola AWS
Aceda à consola do AWS IAM. Certifique-se de que está na conta proprietária do contentor do Amazon S3 ao qual quer aceder.
Selecione Políticas > Criar política (abre num novo separador).
Clique em JSON e cole o seguinte no 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/*" ] } ] }
Substitua o seguinte:
BUCKET_NAME
: o contentor do Amazon S3 ao qual quer que o BigQuery aceda.EXPORT_PERM
(opcional): autorização adicional se quiser exportar dados para um contentor do Amazon S3. Substituir por"s3:PutObject"
- Para separar o controlo de acesso à exportação, recomendamos que crie outra associação com uma função do IAM da AWS separada e conceda à função acesso apenas de escrita. Para um controlo de acesso mais detalhado, também pode limitar o acesso de uma função a um caminho específico do contentor.
No campo Nome, introduza um nome da política, como
bq_omni_read_only
.Clique em Criar política.
A sua política é criada com um Nome do recurso da Amazon (ARN) no seguinte formato:
arn:aws:iam::AWS_ACCOUNT_ID:policy/POLICY_NAME
Substitua o seguinte:
AWS_ACCOUNT_ID
: o número de ID do utilizador do AWS IAM da ligação.POLICY_NAME
: o nome da política que escolheu.
AWS CLI
Para criar uma política de IAM do AWS, use o 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/*" ] } ] }'
Substitua o seguinte:
POLICY_NAME
: o nome da política que está a criar.BUCKET_NAME
: o contentor do Amazon S3 ao qual quer que o BigQuery aceda.EXPORT_PERM
(opcional): autorização adicional se quiser exportar dados para um contentor do Amazon S3. Substituir por"s3:PutObject"
- Para separar o controlo de acesso à exportação, recomendamos que crie outra associação com uma função do IAM da AWS separada e conceda à função acesso apenas de escrita. Para um controlo de acesso mais detalhado, também pode limitar o acesso de uma função a um caminho específico do contentor.
A sua política é criada com um Nome do recurso da Amazon (ARN) no seguinte formato:
arn:aws:iam::AWS_ACCOUNT_ID:policy/POLICY_NAME
Substitua o seguinte:
AWS_ACCOUNT_ID
: o número de ID do utilizador do AWS IAM da ligação.POLICY_NAME
: o nome da política que escolheu.
Terraform
Adicione o seguinte à sua configuração do Terraform para anexar uma política a um recurso de contentor do 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 }
Substitua o seguinte:
BUCKET_NAME
: o contentor do Amazon S3 ao qual quer que o BigQuery aceda.EXPORT_PERM
(opcional): autorização adicional se quiser exportar dados para um contentor do Amazon S3. Substituir por"s3:PutObject"
- Para separar o controlo de acesso à exportação, recomendamos que crie outra associação com uma função do AWS IAM separada e conceda à função acesso apenas de escrita. Para um controlo de acesso mais detalhado, também pode limitar o acesso de uma função a um caminho específico do contentor.
Crie uma função de IAM do AWS para o BigQuery
Em seguida, crie uma função que permita o acesso ao contentor do Amazon S3 a partir do BigQuery. Esta função usa a política que criou na secção anterior.
Para criar uma função de IAM do AWS, use a consola do AWS ou o Terraform:
Consola AWS
Aceda à consola do AWS IAM. Certifique-se de que está na conta proprietária do contentor do Amazon S3 ao qual quer aceder.
Selecione Funções > Criar função.
Em Selecionar tipo de entidade fidedigna, selecione Identidade Web.
Para Fornecedor de identidade, selecione Google.
Em Público-alvo, introduza
00000
como um valor de marcador de posição. Vai substituir o valor mais tarde.Clique em Seguinte: autorizações.
Para conceder à função acesso aos seus dados do Amazon S3, anexe uma política do IAM à função. Pesquise a política que criou na secção anterior e clique no botão ativar/desativar.
Clique em Seguinte: Etiquetas.
Clique em Seguinte: rever. Introduza um nome para a função, como
BQ_Read_Only
.Clique em Criar função.
AWS CLI
Use o comando seguinte para criar uma função de IAM e atribuir a política à função criada:
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
Adicione o seguinte à configuração do Terraform para criar uma função do IAM e atribuir a política à função criada:
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 }
Em seguida, anexe a política à função:
aws iam attach-role-policy \ --role-name bigquery-omni-connection \ --policy-arn arn:aws:iam::AWS_ACCOUNT_ID:policy/POLICY_NAME
Substitua o seguinte:
AWS_ACCOUNT_ID
: o número de ID do utilizador do AWS IAM da ligação.POLICY_NAME
: o nome da política que escolheu.
Crie associações
Para se ligar ao seu contentor do Amazon S3, use a Trusted Cloud consola, a ferramenta de linhas de comando bq ou a biblioteca de cliente:
Consola
Aceda à página do BigQuery.
No painel Explorador, clique em
Adicionar dados.É apresentada a caixa de diálogo Adicionar dados.
No painel Filtrar por, na secção Tipo de origem de dados, selecione Armazenamento/Data Lakes.
Em alternativa, no campo Pesquisar origens de dados, pode introduzir
aws
ouAmazon S3
.Na secção Origens de dados em destaque, clique em Amazon S3.
Clique no cartão da solução Amazon S3 Omni: federação do BigQuery.
Na caixa de diálogo Criar tabela, no campo ID da associação, selecione Criar uma nova associação do S3.
No painel Origem de dados externa, introduza as seguintes informações:
- Em Tipo de associação, selecione BigLake na AWS (através do BigQuery Omni).
- Para o ID da ligação, introduza um identificador para o recurso de ligação. Pode usar letras, números, travessões e sublinhados.
- Para Região, selecione a localização onde quer criar a ligação.
- Opcional: para Nome amigável, introduza um nome amigável para a associação, como
My connection resource
. O nome amigável pode ser qualquer valor que ajude a identificar o recurso de associação se precisar de o modificar mais tarde. - Opcional: em Descrição, introduza uma descrição para este recurso de ligação.
- Para ID da função do AWS, introduza o ID da função do IAM completo que
criou neste formato:
arn:aws:iam::AWS_ACCOUNT_ID:role/ROLE_NAME
Clique em Criar associação.
Clique em Aceder à associação.
No painel Informações da ligação, copie a identidade Google do BigQuery. Este é um principal da Google específico de cada associação. Exemplo:
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" } } }
Substitua o seguinte:
AWS_LOCATION
: uma localização do Amazon S3 em Trusted Cloud by S3NSAWS_ACCOUNT
: o ID da sua conta da AWS.IAM_ROLE_NAME
: a função que permite o acesso ao contentor do Amazon S3 a partir do BigQuery. Use o valor do argumentoname
do recursoaws_iam_role
em Crie uma função de IAM do AWS para o 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
Substitua o seguinte:
AWS_ACCOUNT_ID
: o número de ID do utilizador do AWS IAM da ligaçãoROLE_NAME
: o nome da política de função que escolheuAWS_LOCATION
: uma localização do Amazon S3 em Trusted Cloud by S3NSCONNECTION_ID
: o ID que atribui a este recurso de ligação.
A linha de comandos mostra o seguinte resultado:
Identity: IDENTITY_ID
A saída contém o seguinte:
IDENTITY_ID
: um principal da Google que Trusted Cloud by S3NS controla o que é específico de cada associação.
Tome nota do valor IDENTITY_ID
.
Java
Antes de experimentar este exemplo, siga as Javainstruções de configuração no início rápido do BigQuery com bibliotecas cliente. Para mais informações, consulte a API Java BigQuery documentação de referência.
Para se autenticar no BigQuery, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para bibliotecas de cliente.
Antes de executar exemplos de código, defina a variável GOOGLE_CLOUD_UNIVERSE_DOMAIN
environment
como s3nsapis.fr
.
Adicione uma relação de confiança à função do AWS
O BigQuery Omni oferece dois métodos para aceder em segurança aos dados
do Amazon S3.
Pode conceder à Trusted Cloud by S3NS conta de serviço acesso à sua função da AWS ou, se a sua conta da AWS tiver um fornecedor de identidade personalizado para o accounts.google.com
, tem de adicionar a Trusted Cloud by S3NS conta de serviço como um público-alvo ao fornecedor:
- Adicione a política de fidedignidade à função do AWS.
- Configure um Fornecedor de identidade da AWS personalizado.
Adicione uma política de fidedignidade à função do AWS
A relação de confiança permite que a ligação assuma a função e aceda aos dados do Amazon S3, conforme especificado na política de funções.
Para adicionar uma relação de confiança, use a consola da AWS ou o Terraform:
Consola AWS
Aceda à consola do AWS IAM. Certifique-se de que está na conta proprietária do contentor do Amazon S3 ao qual quer aceder.
Selecione Funções.
Selecione o
ROLE_NAME
que criou.Clique em Editar e, de seguida, faça o seguinte:
Defina a duração máxima da sessão como 12 horas. Como cada consulta pode ser executada durante um máximo de seis horas, esta duração permite uma nova tentativa adicional. Aumentar a duração da sessão para mais de 12 horas não permite novas tentativas. Para mais informações, consulte o limite de tempo de execução de consultas/consultas com várias declarações.
Clique em Guardar alterações.
Selecione Relações de confiança e clique em Editar relação de confiança. Substitua o conteúdo da política pelo seguinte:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "accounts.google.com" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "accounts.google.com:sub": "IDENTITY_ID" } } } ] }
Substitua
IDENTITY_ID
pelo valor da identidade Google do BigQuery, que pode encontrar na Trusted Cloud by S3NS consola para a associação que criou.Clique em Atualizar política de confiança.
AWS CLI
Para criar uma relação de confiança com a ligação do BigQuery,
use o 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" } } } ] }'
Substitua o seguinte:
Terraform
Atualize o recurso aws_iam_role
na configuração do Terraform para adicionar uma relação de confiança:
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 }
A ligação está agora pronta a usar.
Configure um Fornecedor de identidade da AWS personalizado
Se a sua conta da AWS tiver um fornecedor de identidade personalizado para o accounts.google.com
, tem de adicionar o IDENTITY_ID como público-alvo ao fornecedor. Pode fazê-lo:
Aceda à consola do AWS IAM. Certifique-se de que está na conta proprietária do contentor do Amazon S3 ao qual quer aceder.
Navegue para IAM > Fornecedores de identidade.
Selecione o fornecedor de identidade para accounts.google.com.
Clique em Adicionar público-alvo e adicione o IDENTITY_ID como público-alvo.
A ligação está agora pronta a usar.
Partilhe ligações com utilizadores
Pode conceder as seguintes funções para permitir que os utilizadores consultem dados e geram ligações:
roles/bigquery.connectionUser
: permite que os utilizadores usem associações para estabelecer ligação a origens de dados externas e executar consultas nas mesmas.roles/bigquery.connectionAdmin
: permite que os utilizadores geram associações.
Para mais informações sobre as funções e as autorizações do IAM no BigQuery, consulte o artigo Funções e autorizações predefinidas.
Selecione uma das seguintes opções:
Consola
Aceda à página do BigQuery.
As associações são apresentadas no seu projeto, num grupo denominado Associações externas.
No painel Explorador, clique no nome do projeto > Ligações externas > ligação.
No painel Detalhes, clique em Partilhar para partilhar uma associação. Depois, faça o seguinte:
Na caixa de diálogo Autorizações de ligação, partilhe a ligação com outros responsáveis adicionando ou editando responsáveis.
Clique em Guardar.
bq
Não pode partilhar uma ligação com a ferramenta de linhas de comando bq. Para partilhar uma associação, use a Trusted Cloud consola ou o método da API BigQuery Connections para partilhar uma associação.
API
Java
Antes de experimentar este exemplo, siga as Javainstruções de configuração no início rápido do BigQuery com bibliotecas cliente. Para mais informações, consulte a API Java BigQuery documentação de referência.
Para se autenticar no BigQuery, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para bibliotecas de cliente.
Antes de executar exemplos de código, defina a variável GOOGLE_CLOUD_UNIVERSE_DOMAIN
environment
como s3nsapis.fr
.
O que se segue?
- Saiba mais sobre os diferentes tipos de ligações.
- Saiba como gerir associações.
- Saiba mais acerca do BigQuery Omni.
- Use o laboratório do BigQuery Omni com a AWS.
- Saiba mais sobre as tabelas do BigLake.
- Saiba como consultar dados do Amazon S3.
- Saiba como exportar resultados de consultas para um contentor do Amazon S3.