Configurar o Lakehouse sem bordas para o AWS Glue

Neste documento, descrevemos como configurar um Lakehouse sem fronteiras para consultar dados de um catálogo do AWS Glue diretamente no Google Cloud. Essa capacidade unifica a análise de dados ao integrar suas fontes de dados externas ao ambiente Google Cloud atual.

Depois, use o Lakehouse para Apache Iceberg para gerenciar o acesso aos seus dados federados.

Antes de começar

  1. Leia a visão geral do Lakehouse para entender como ele gerencia o acesso aos dados.
  2. Leia Sobre o Lakehouse sem fronteiras para entender como ele funciona.
  3. Revise os catálogos compatíveis para verificar os requisitos de formato de tabela e as configurações compatíveis.
  4. Verifique se o administrador da AWS tem permissões para criar papéis do Identity and Access Management (IAM) e configurar políticas de permissões.
  5. Opcional: se você planeja rotear consultas por uma interconexão privada entre sua VPC Google Cloud e a VPC do provedor de nuvem remota (por exemplo, AWS), verifique se você tem uma conta ativa com o provedor remoto, provisione uma interconexão dedicada entre nuvens ou interconexão entre nuvens de parceiro, estabeleça sessões BGP com o Cloud Router e verifique se você tem as permissões necessárias do IAM nos dois ambientes de nuvem.
  6. Faça login na sua conta do Google Cloud . Se você começou a usar o Google Cloud, crie uma conta para avaliar o desempenho de nossos produtos em situações reais. Clientes novos também recebem US$ 300 em créditos para executar, testar e implantar cargas de trabalho.
  7. Verify that billing is enabled for your Google Cloud project.

  8. Enable the BigLake API.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.

    Enable the API

  9. Verify that billing is enabled for your Google Cloud project.

  10. Enable the BigLake API.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.

    Enable the API

Funções exigidas

Para receber as permissões necessárias para configurar o Lakehouse sem fronteiras, peça ao administrador para conceder a você os seguintes papéis do IAM no projeto:

Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.

Também é possível conseguir as permissões necessárias usando papéis personalizados ou outros papéis predefinidos.

Limitações e considerações

Nesta seção, listamos as limitações e considerações para usar o Lakehouse sem fronteiras.

  • Provedores de nuvem compatíveis:é possível usar uma interconexão privada com seu Lakehouse sem fronteiras com os seguintes provedores de nuvem remotos: Amazon Web Services (AWS). Você pode usar uma Cross-Cloud Interconnect dedicada ou uma Cross-Cloud Interconnect por parceiro.
  • Roteamento de rede:se uma interconexão privada (como CCI dedicada ou CCI de parceiro) não estiver configurada, as consultas serão roteadas pela Internet pública. Isso pode resultar em taxas de saída mais altas do seu provedor de nuvem remota e em um desempenho menos previsível.
  • Atualização de dados:a flag --refresh-interval do catálogo federado determina a frequência de sincronização dos metadados. Um intervalo menor fornece dados mais recentes, mas pode gerar custos adicionais de API do provedor de catálogo remoto.
  • Relatório de métricas do Iceberg:o Relatório de métricas do Iceberg não está disponível para catálogos federados. Defina a propriedade rest-metrics-reporting-enabled como false no cliente do Iceberg ao acessar um catálogo federado.

Fluxo de trabalho geral

Para configurar e usar o Lakehouse sem bordas, siga estas etapas gerais:

  • Configure o Cross-Cloud Interconnect (opcional): configure uma conexão privada entre a Google Cloud VPC e o provedor de nuvem remota.
  • Configurar a federação:configure a autenticação criando um papel do IAM com uma política de confiança substituta com seu provedor remoto. Em seguida, crie um catálogo federado no Lakehouse e atualize a política de confiança.
  • Verifique a conexão:confira se o Lakehouse consegue se conectar ao catálogo remoto.
  • Consultar dados:execute consultas nos seus dados federados usando o BigQuery ou o Serviço Gerenciado para Apache Spark. Para mais informações, consulte Usar Lakehouse sem fronteiras.
  • Configurar permissões:use o IAM para gerenciar quem pode visualizar e consultar os dados federados.

Configurar o Interconexão entre nuvens (opcional)

Por padrão, as consultas ao catálogo remoto são transmitidas pela Internet pública. Para ajudar a melhorar a segurança e a conformidade, oferecer desempenho previsível e reduzir os custos de transferência de dados, use uma interconexão privada. Isso estabelece uma conexão de rede dedicada e privada entre sua Google Cloud nuvem privada virtual (VPC) e a rede do provedor de nuvem remota (por exemplo, AWS).

É possível provisionar e configurar uma das seguintes opções de interconexão privada entre sua Google Cloud VPC e a VPC do provedor de nuvem remota (por exemplo, AWS):

Crie sessões do BGP entre o Cloud Router em Google Cloud e a VPC do provedor de nuvem remota para garantir a troca de rotas.

Para ativar consultas particulares, configure um caminho do Lakehouse para seu bucket de armazenamento remoto (por exemplo, um bucket do Amazon S3 da AWS) usando sua interconexão particular. Há dois fluxos arquitetônicos que você pode seguir para configurar esse roteamento:

  • Roteamento do balanceador de carga de rede de proxy interno regional:esse fluxo usa um balanceador de carga de rede de proxy interno regionalGoogle Cloud para distribuir solicitações em grupos de endpoints de rede (NEGs) de conectividade híbrida que apontam para várias interfaces de rede elásticas (ENIs) da AWS. Esse fluxo é essencial para balanceamento de carga, escalonabilidade e alta disponibilidade. É necessário para a CCI de parceiro e recomendado para a CCI dedicada para balanceamento de carga, escalonabilidade e alta disponibilidade.
  • Roteamento direto de endpoint:esse fluxo conecta o Diretório de serviços diretamente a um único endereço IP de endpoint de interface da VPC da AWS. Esse fluxo só funciona para CCI dedicado e não é compatível com CCI de parceiro.

Selecione o fluxo de configuração que corresponde aos seus requisitos de arquitetura:

Balanceador de carga de rede de proxy interno regional

Para configurar um balanceador de carga de rede de proxy regional interno para distribuir solicitações em várias ENIs da AWS para alta disponibilidade e balanceamento de carga, siga estas etapas:

Configurar a rede da AWS

Primeiro, crie um endpoint de interface de VPC do Amazon S3 (AWS PrivateLink):

  1. No console da VPC da AWS, crie um endpoint de interface para o Amazon S3.
  2. Como nome do serviço, especifique com.amazonaws.AWS_REGION.s3.
  3. Selecione a VPC e as sub-redes conectadas pelo Direct Connect à sua VPC Google Cloud .
  4. Anexe grupos de segurança ao endpoint para controlar o acesso de entrada.
  5. Isso provisiona interfaces de rede elásticas (ENIs, na sigla em inglês) em cada sub-rede selecionada. Anote os endereços IP particulares dessas ENIs.

Em seguida, configure os grupos de segurança:

  • Verifique se o grupo ou os grupos de segurança anexados às ENIs do endpoint do Amazon S3 permitem o tráfego TCP de entrada na porta 443 da sua VPC Google Cloud . Isso precisa incluir o intervalo CIDR da sua sub-rede somente proxyGoogle Cloud para permitir verificações de integridade e tráfego encaminhado.

Configurar Google Cloud rede

Para simplificar a configuração, execute os comandos a seguir para configurar o balanceador de carga interno. Para configurações avançadas ou mais detalhes, consulte Configurar um balanceador de carga de rede de proxy interno regional para endpoints híbridos.

gcloud compute networks subnets create PROXY_SUBNET_NAME \
    --purpose=REGIONAL_MANAGED_PROXY \
    --role=ACTIVE \
    --region=REGION \
    --network=VPC_NETWORK \
    --range=PROXY_SUBNET_RANGE

Substitua:

  • PROXY_SUBNET_NAME: um nome para a sub-rede somente proxy.
  • PROXY_SUBNET_RANGE: um intervalo CIDR não utilizado na rede VPC (por exemplo, 10.129.0.0/23).
  1. Criar uma verificação de integridade regional:

    gcloud compute health-checks create tcp HEALTH_CHECK_NAME \
        --region=REGION \
        --port=443

    Substitua:

    • HEALTH_CHECK_NAME: um nome para a verificação de integridade.
    • REGION: a região Google Cloud (por exemplo, us-east4).
  2. Crie grupos de endpoints de rede (NEGs) de conectividade híbrida e adicione endpoints:

    Crie um NEG híbrido (NON_GCP_PRIVATE_IP_PORT) para cada zona:

    gcloud compute network-endpoint-groups create NEG_NAME \
        --network-endpoint-type=NON_GCP_PRIVATE_IP_PORT \
        --zone=ZONE \
        --network=VPC_NETWORK

    Adicione o endereço IP particular da sua ENI da AWS ao NEG híbrido correspondente:

    gcloud compute network-endpoint-groups update NEG_NAME \
        --zone=ZONE \
        --add-endpoint="ip=AWS_S3_IP,port=443"

    Substitua:

    • NEG_NAME: um nome para o NEG híbrido.
    • ZONE: a zona Google Cloud (por exemplo, us-east4-a). Essa zona precisa estar na região do anexo da VLAN do Interconexão entre nuvens.
    • VPC_NETWORK: o nome da sua rede VPC.
    • AWS_S3_IP: o endereço IP particular do endpoint da VPC do Amazon S3 da AWS (ENI) nessa zona.

    Repita esses comandos para criar NEGs e adicionar endpoints para outras zonas se as ENIs da AWS estiverem distribuídas em várias zonas.

  3. Crie e configure o serviço de back-end:

    Crie um serviço de back-end regional com balanceamento de carga gerenciado interno:

    gcloud compute backend-services create BACKEND_SERVICE_NAME \
        --load-balancing-scheme=INTERNAL_MANAGED \
        --protocol=TCP \
        --region=REGION \
        --health-checks=HEALTH_CHECK_NAME \
        --health-checks-region=REGION

    Adicione seus NEGs híbridos ao serviço de back-end:

    gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \
        --region=REGION \
        --network-endpoint-group=NEG_NAME \
        --network-endpoint-group-zone=ZONE \
        --balancing-mode=CONNECTION \
        --max-connections=MAX_CONNECTIONS

    Substitua:

    • BACKEND_SERVICE_NAME: um nome para o serviço de back-end.
    • NEG_NAME: o nome do NEG híbrido que você criou na etapa anterior.
    • ZONE: a Google Cloud zona (por exemplo, us-east4-a).
    • MAX_CONNECTIONS: o número máximo de conexões simultâneas que o back-end precisa processar (por exemplo, 100).

    Repita o comando add-backend para cada NEG híbrido criado.

  4. Configure o front-end do balanceador de carga:

    Crie um proxy TCP de destino:

    gcloud compute target-tcp-proxies create TARGET_PROXY_NAME \
        --backend-service=BACKEND_SERVICE_NAME \
        --region=REGION

    Crie uma regra de encaminhamento para encaminhar o tráfego para o proxy de destino:

    gcloud compute forwarding-rules create FORWARDING_RULE_NAME \
        --load-balancing-scheme=INTERNAL_MANAGED \
        --network=VPC_NETWORK \
        --subnet=VPC_SUBNET \
        --ports=443 \
        --region=REGION \
        --target-tcp-proxy=TARGET_PROXY_NAME \
        --target-tcp-proxy-region=REGION \
        --allow-global-access

    Substitua:

    • TARGET_PROXY_NAME: um nome para o proxy de destino.
    • FORWARDING_RULE_NAME: um nome para a regra de encaminhamento.
    • VPC_SUBNET: o nome da sub-rede VPC.

Depois de criar a regra de encaminhamento para o balanceador de carga, anote o endereço IP interno atribuído a ele. Esta é sua ILB_IP_ADDRESS.

Configurar o Service Directory

Registre o endereço IP do ILB no Diretório de serviços para que o Lakehouse possa descobri-lo.

  1. Crie um namespace para sua nuvem remota:

    gcloud service-directory namespaces create NAMESPACE \
        --project=PROJECT_ID \
        --location=REGION

    Substitua:

    • NAMESPACE: um identificador exclusivo para seu namespace.
    • PROJECT_ID: o ID do projeto do Google Cloud .
    • REGION: a Google Cloud região. Por exemplo, us-east4. Precisa ser a mesma região do catálogo federado.
  2. Crie um serviço no namespace do Diretório de serviços:

    gcloud service-directory services create SERVICE_NAME \
        --namespace=NAMESPACE \
        --project=PROJECT_ID \
        --location=REGION

    Substitua:

    • SERVICE_NAME: um identificador exclusivo para seu serviço.
  3. Crie um endpoint para o ILB no serviço:

    gcloud service-directory endpoints create ENDPOINT_NAME \
        --project=PROJECT_ID \
        --namespace=NAMESPACE \
        --service=SERVICE_NAME \
        --location=REGION \
        --network=projects/PROJECT_NUMBER/global/networks/VPC_NETWORK \
        --address=ILB_IP_ADDRESS \
        --port=443

    Substitua:

    • ENDPOINT_NAME: um identificador exclusivo para seu endpoint.
    • PROJECT_NUMBER: o número do projeto do Google Cloud. Use o número do projeto na flag --network.
    • ILB_IP_ADDRESS: o endereço IP interno da regra de encaminhamento do ILB.

Endpoint direto

Para configurar o Diretório de serviços para rotear o tráfego diretamente para um único endereço IP de endpoint da VPC de interface da AWS, siga estas etapas:

  1. Crie um endpoint de VPC de interface para o Amazon S3 na sua VPC da AWS. Anote o endereço IP e a porta desse endpoint.
  2. Crie um namespace para sua nuvem remota:

    gcloud service-directory namespaces create NAMESPACE \
        --project=PROJECT_ID \
        --location=REGION

    Substitua:

    • NAMESPACE: um identificador exclusivo para seu namespace.
    • PROJECT_ID: o ID do projeto do Google Cloud .
    • REGION: a Google Cloud região. Por exemplo, us-east4. Precisa ser a mesma região do catálogo federado.
  3. Crie um serviço no namespace do Diretório de serviços:

    gcloud service-directory services create SERVICE_NAME \
        --namespace=NAMESPACE \
        --project=PROJECT_ID \
        --location=REGION

    Substitua:

    • SERVICE_NAME: um identificador exclusivo para seu serviço.
  4. Crie um endpoint no serviço que contenha as informações de roteamento para o endpoint de VPC de interface do Amazon S3:

    gcloud service-directory endpoints create ENDPOINT_NAME \
        --service=SERVICE_NAME \
        --namespace=NAMESPACE \
        --project=PROJECT_ID \
        --location=REGION \
        --address=S3_VPCE_IP_ADDRESS \
        --port=S3_VPCE_PORT \
        --network=projects/PROJECT_NUMBER/global/networks/VPC_NETWORK

    Substitua:

    • ENDPOINT_NAME: um identificador exclusivo para seu endpoint.
    • S3_VPCE_IP_ADDRESS: o endereço IP do endpoint da VPC de interface do Amazon S3. Por exemplo, 10.0.1.45.
    • S3_VPCE_PORT: o número da porta do endpoint da VPC de interface do Amazon S3. Por exemplo, 443.
    • PROJECT_NUMBER: o número do projeto do Google Cloud. Use o número do projeto na flag --network.
    • VPC_NETWORK: o nome da rede VPC Google Cloud associada à sua interconexão particular.

Configurar a federação

Para consultar seus dados, configure um catálogo federado do Lakehouse que se conecta ao seu catálogo remoto da AWS.

Criar o papel do IAM da AWS com uma política de confiança de marcador de posição

O Lakehouse provisiona um ID de conta de serviço do Google após a criação do catálogo. Crie o papel do IAM da AWS com uma política de confiança de marcador de posição.

  1. Crie um arquivo chamado trust_policy.json:

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": {
            "Federated": "accounts.google.com"
          },
          "Action": "sts:AssumeRoleWithWebIdentity",
          "Condition": {
            "StringEquals": {
              "accounts.google.com:aud": [
                "PLACEHOLDER_VALUE"
              ],
              "accounts.google.com:sub": [
                "PLACEHOLDER_VALUE"
              ]
            }
          }
        }
      ]
    }
  2. Execute o comando da CLI da AWS para criar a função com a política de confiança de marcador de posição. Recomendamos definir a duração máxima da sessão como 12 horas (43200 segundos) para evitar a expiração das credenciais durante jobs de longa duração:

    aws iam create-role \
      --role-name AWS_ROLE_NAME \
      --assume-role-policy-document file://trust_policy.json \
      --max-session-duration 43200

    Substitua:

    • AWS_ROLE_NAME: um nome para seu papel do IAM da AWS. Por exemplo, lakehouse_glue_federation_role.

Anexar uma política de permissões

Anexe uma política de permissões à sua função do IAM que permita ao Lakehouse acessar o Data Catalog do Glue e os buckets do S3 da região da AWS. Essa política também concede acesso a buckets de tabelas do S3 se você usar a integração de tabelas do S3 do AWS Lake Formation. Se você fez upgrade das permissões de dados padrão do AWS Glue para o modelo do AWS Lake Formation, talvez seja necessário conceder outras permissões no Lake Formation.

  1. Crie um arquivo chamado permissions_policy.json com a seguinte configuração de política.

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Sid": "GlueRead",
          "Effect": "Allow",
          "Action": [
            "glue:GetCatalog",
            "glue:GetDatabase",
            "glue:GetDatabases",
            "glue:GetTable",
            "glue:GetTables"
          ],
          "Resource": "arn:aws:glue:AWS_REGION:AWS_ACCOUNT_ID:*"
        },
        {
          "Sid": "S3Read",
          "Effect": "Allow",
          "Action": [
            "s3:ListBucket",
            "s3:GetObject"
          ],
          "Resource": [
            "arn:aws:s3:::*"
          ]
        },
        {
          "Sid": "S3TablesRead",
          "Effect": "Allow",
          "Action": [
            "s3tables:GetTableBucket",
            "s3tables:ListNamespaces",
            "s3tables:GetNamespace",
            "s3tables:ListTables",
            "s3tables:GetTable",
            "s3tables:GetTableMetadataLocation",
            "s3tables:GetTableData"
          ],
          "Resource": [
            "arn:aws:s3tables:AWS_REGION:AWS_ACCOUNT_ID:*"
          ]
        }
      ]
    }

    Se você estiver usando chaves gerenciadas pelo cliente hospedadas no AWS Key Management Service (KMS) para criptografar recursos do AWS Glue, do Amazon S3 ou das tabelas do Amazon S3, adicione uma instrução que conceda acesso à chave do KMS para descriptografar os recursos:

    # ...
    {
      "Sid": "GlueS3S3TablesKmsDecrypt",
      "Effect": "Allow",
      "Action": [
          "kms:Decrypt"
      ],
      "Resource": [
          "arn:aws:kms:AWS_REGION:AWS_ACCOUNT_ID:key/key_id_for_glue",
          "arn:aws:kms:AWS_REGION:AWS_ACCOUNT_ID:key/key_id_for_s3",
          "arn:aws:kms:AWS_REGION:AWS_ACCOUNT_ID:key/key_id_for_s3_tables"
      ]
    }
    # ...
  2. Anexe esta política de permissões ao seu papel do IAM:

    aws iam put-role-policy \
      --role-name AWS_ROLE_NAME \
      --policy-name AWS_POLICY_NAME \
      --policy-document file://permissions_policy.json

    Substitua:

    • AWS_ROLE_NAME: o nome do papel do IAM da AWS. Por exemplo, lakehouse_glue_federation_role.
    • AWS_POLICY_NAME: um nome para sua política de permissões. Por exemplo, lakehouse_glue_federation_policy.
    • AWS_REGION: a região da AWS em que seu catálogo do Glue ou tabelas do S3 estão. Por exemplo, us-east-1.
    • AWS_ACCOUNT_ID: sua string de ID da conta da AWS com 12 dígitos. Por exemplo, 123456789012.

Criar um catálogo federado

Estabeleça o catálogo federado no Google Cloud usando o console Google Cloud , a CLIgcloud ou a API REST.

Para evitar falhas prematuras na atualização de metadados em segundo plano enquanto as relações de confiança da AWS estão sendo propagadas, inicialize o catálogo sem especificar uma programação de atualização (que é definida como 0s por padrão).

Console

Para criar um catálogo federado:

  1. No console Google Cloud , acesse Lakehouse.

    Acessar Lakehouse

  2. Clique em Criar catálogo.

  3. Clique em Catálogo federado.

    Os detalhes da Configuração do catálogo aparecem.

  4. Em Origem do catálogo federado, selecione AWS Glue.

  5. Em Local dos dados, selecione a região do Lakehouse em que você quer criar o catálogo federado. Por exemplo, us-east4. Para minimizar a latência (mesmo na Internet pública), selecione a região Google Cloud mais próxima da sua região da AWS.

  6. Clique em Continuar.

    Os detalhes da conexão aparecem.

  7. Na seção Detalhes do catálogo remoto, no campo Data warehouse da AWS, insira o ID da sua conta da AWS ou o catálogo do bucket da tabela do S3. Por exemplo: 123456789012.

  8. No campo Região da AWS, insira sua região da AWS. Por exemplo, us-east-1.

  9. No campo ARN do papel da AWS, insira o ARN do papel da AWS. Use o seguinte formato: arn:aws:iam::AWS_ACCOUNT_ID:role/AWS_ROLE_NAME.

  10. Opcional: no campo Nome do diretório de serviços, insira o caminho para o endpoint ou serviço do Diretório de Serviços. Isso só é necessário se você estiver configurando uma interconexão particular (Interconexão entre nuvens).

  11. Clique em Criar.

CLI do Google Cloud

Internet pública (sem CCI)

Se você não configurar o CCI, a conexão vai viajar com segurança pela Internet pública.

gcloud alpha biglake iceberg catalogs create FEDERATED_CATALOG_NAME \
    --project="PROJECT_ID" \
    --primary-location="REGION" \
    --catalog-type="federated" \
    --federated-catalog-type="glue" \
    --glue-warehouse="GLUE_OR_S3_TABLE_BUCKET_WAREHOUSE" \
    --glue-aws-region="AWS_REGION" \
    --glue-aws-role-arn="arn:aws:iam::AWS_ACCOUNT_ID:role/AWS_ROLE_NAME"

De propriedade do cliente (CCI)

Se você configurou uma interconexão privada (como CCI dedicada ou CCI de parceiro), forneça a referência do serviço do Diretório de serviços para garantir que o Lakehouse roteie o tráfego de forma privada.

gcloud alpha biglake iceberg catalogs create FEDERATED_CATALOG_NAME \
    --project="PROJECT_ID" \
    --primary-location="REGION" \
    --catalog-type="federated" \
    --federated-catalog-type="glue" \
    --glue-warehouse="GLUE_OR_S3_TABLE_BUCKET_WAREHOUSE" \
    --glue-aws-region="AWS_REGION" \
    --glue-aws-role-arn="arn:aws:iam::AWS_ACCOUNT_ID:role/AWS_ROLE_NAME" \
    --service-directory-name="projects/PROJECT_ID/locations/REGION/namespaces/NAMESPACE/services/SERVICE_NAME"

REST

curl -s -X POST \
  -H "x-goog-user-project: PROJECT_ID" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  "https://biglake.googleapis.com/iceberg/v1/restcatalog/extensions/projects/PROJECT_ID/catalogs?iceberg_catalog_id=FEDERATED_CATALOG_NAME&primary_location=REGION" \
  -d '{
    "catalog_type": "CATALOG_TYPE_FEDERATED",
    "storage_regions": ["'"REGION"'"],
    "federated_catalog_options": {
      "glue_catalog_info": {
        "warehouse": "'"GLUE_OR_S3_TABLE_BUCKET_WAREHOUSE"'",
        "aws_region": "'"AWS_REGION"'",
        "aws_role_arn": "arn:aws:iam::'"AWS_ACCOUNT_ID"':role/'"AWS_ROLE_NAME"'"
      }
    }
  }'

Substitua:

  • FEDERATED_CATALOG_NAME: um nome para o catálogo federado.
  • PROJECT_ID: o ID do projeto Google Cloud .
  • REGION: a região do Lakehouse em que o catálogo federado é criado. Por exemplo, us-east4.
  • GLUE_OR_S3_TABLE_BUCKET_WAREHOUSE: o identificador do catálogo do data warehouse de destino. Para um Data Catalog do Glue de uma região da AWS, insira a string de ID da conta da AWS de 12 dígitos. Por exemplo, 123456789012. Para usar um bucket de tabela do S3 na região, insira AWS_ACCOUNT_ID:s3tablescatalog/S3_TABLE_BUCKET. Por exemplo, 123456789012:s3tablescatalog/my-table-bucket.
  • AWS_ACCOUNT_ID: sua string de ID da conta da AWS com 12 dígitos. Por exemplo, 123456789012.
  • AWS_REGION: a região da AWS em que o catálogo do Glue ou o bucket da tabela do S3 está localizado. Por exemplo, us-east-1.
  • AWS_ROLE_NAME: o nome do papel do IAM da AWS. Por exemplo, lakehouse_glue_federation_role.
  • NAMESPACE: (opcional) o namespace do Diretório de serviços que você criou durante a configuração da interconexão privada.
  • SERVICE_NAME: (opcional) o nome do serviço do Diretório de serviços que você criou durante a configuração do interconexão particular.

Atualizar a política de confiança

Quando o catálogo é criado, o Lakehouse provisiona uma conta de serviço exclusiva para ele, que é retornada como o campo biglake-service-account-id na resposta de criação do catálogo. Você usa essa conta de serviço para estabelecer a relação de confiança.

  1. Execute o comando a seguir para extrair o valor biglake-service-account-id em uma variável bash ativa:

    LAKEHOUSE_SA_ID=$(gcloud alpha biglake iceberg catalogs describe FEDERATED_CATALOG_NAME \
      --project="PROJECT_ID" \
      --format="value(biglake-service-account-id)")
  2. Atualize a política de confiança do papel do IAM da AWS para substituir o marcador de posição pelo ID do agente de serviço do Google verificado. O bloco de condição valida a correspondência de sub e aud. Grave a política em um arquivo chamado trust_policy_comprehensive.json:

    cat > trust_policy_comprehensive.json << EOF
    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": {
            "Federated": "accounts.google.com"
          },
          "Action": "sts:AssumeRoleWithWebIdentity",
          "Condition": {
            "StringEquals": {
              "accounts.google.com:aud": [
                "$LAKEHOUSE_SA_ID"
              ],
              "accounts.google.com:sub": [
                "$LAKEHOUSE_SA_ID"
              ]
            }
          }
        }
      ]
    }
    EOF
  3. Aplique a política finalizada ao seu papel da AWS:

    aws iam update-assume-role-policy \
      --role-name AWS_ROLE_NAME \
      --policy-document file://trust_policy_comprehensive.json

Ativar a atualização de metadados em segundo plano

Agora que as relações de confiança seguras foram estabelecidas nas duas plataformas, atualize seu catálogo para ativar a atualização de metadados em segundo plano (a cada 5 minutos ou 300s ou mais).

CLI da gcloud

gcloud alpha biglake iceberg catalogs update FEDERATED_CATALOG_NAME \
  --project="PROJECT_ID" \
  --refresh-interval="300s"

REST

curl -s -X PATCH \
-H "x-goog-user-project: PROJECT_ID" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://biglake.googleapis.com/iceberg/v1/restcatalog/extensions/projects/PROJECT_ID/catalogs/FEDERATED_CATALOG_NAME?updateMask=federated_catalog_options.refresh_options.refresh_schedule" \
-d '{
  "federated_catalog_options": {
    "refresh_options": {
      "refresh_schedule": {
        "refresh_interval": "300s"
      }
    }
  }
}'

Concluir a configuração da interconexão particular (somente Interconexão entre nuvens)

Se você estiver roteando o tráfego por uma interconexão privada (Dedicated ou Partner CCI), conceda à conta de serviço do catálogo do Lakehouse permissões para descobrir e autorizar conexões pelo Diretório de serviços.

Console

  1. No console do Google Cloud , acesse a página IAM.

    Acessar IAM

  2. Clique em Conceder acesso ou Adicionar.

  3. No campo Novos principais, insira o e-mail da conta de serviço do catálogo do Lakehouse. Para recuperar esse e-mail, descreva o catálogo (consulte a guia gcloud).

  4. No menu suspenso Papel, selecione Leitor do Service Directory (roles/servicedirectory.viewer).

  5. Clique em Adicionar outro papel e selecione Serviço autorizado do PSC do Service Directory (roles/servicedirectory.pscAuthorizedService).

  6. Clique em Salvar.

CLI da gcloud

Conceda os papéis necessários à conta de serviço do catálogo:

# Grant Service Directory Viewer
gcloud projects add-iam-policy-binding PROJECT_ID \
--member="serviceAccount:$(gcloud alpha biglake iceberg catalogs describe FEDERATED_CATALOG_NAME \
    --project="PROJECT_ID" \
    --format='value(biglake-service-account)')" \
--role="roles/servicedirectory.viewer"

# Grant Service Directory PSC Authorized Service
gcloud projects add-iam-policy-binding PROJECT_ID \
--member="serviceAccount:$(gcloud alpha biglake iceberg catalogs describe FEDERATED_CATALOG_NAME \
    --project="PROJECT_ID" \
    --format='value(biglake-service-account)')" \
--role="roles/servicedirectory.pscAuthorizedService"

Verifique a conexão

Verifique se o ciclo de atualização dos metadados em segundo plano do catálogo foi concluído e se os namespaces estão sincronizados.

  1. Verifique se o status da atualização indica sucesso:

    gcloud alpha biglake iceberg catalogs describe FEDERATED_CATALOG_NAME \
      --project="PROJECT_ID"
  2. Confirme se os bancos de dados remotos aparecem como namespaces sincronizados:

    gcloud alpha biglake iceberg namespaces list \
      --project="PROJECT_ID" \
      --catalog="FEDERATED_CATALOG_NAME"

A seguir