Configurar uma integração de catálogo para catálogos Apache Iceberg™ REST¶
Uma integração de catálogo |iceberg-tm| REST permite que o Snowflake acesse Tabelas Apache Iceberg™ gerenciado em um catálogo remoto que esteja em conformidade com a especificação Apache Iceberg REST OpenAPI de código aberto.
Conectando-se a catálogos REST¶
Você pode se conectar a uma Iceberg REST API que usa um ponto de extremidade público ou uma rede privada.
Ponto de extremidade público¶
Para se conectar a uma Iceberg REST API usando um ponto de extremidade público, você pode criar uma integração de catálogo que usa os seguintes métodos de autenticação:
OAuth
Token de portador ou Token de acesso pessoal (PAT)
SigV4
Rede privada¶
Para se conectar a uma Iceberg REST API hospedada em uma rede privada, você pode criar uma integração de catálogo que usa a autenticação Signature Versão 4 (SigV4).
Criação de uma integração de catálogo¶
Crie uma integração de catálogo para o método de autenticação escolhido usando o comando CREATE CATALOG INTEGRATION (Apache Iceberg™ REST). Os valores especificados para os argumentos REST_CONFIG e REST_AUTHENTICATION diferem de acordo com o método de autenticação escolhido.
OAuth¶
O exemplo a seguir cria uma integração de catálogo REST que usa OAuth para se conectar ao tabular.
CREATE OR REPLACE CATALOG INTEGRATION tabular_catalog_int
CATALOG_SOURCE = ICEBERG_REST
TABLE_FORMAT = ICEBERG
CATALOG_NAMESPACE = 'default'
REST_CONFIG = (
CATALOG_URI = 'https://api.tabular.io/ws'
WAREHOUSE = '<tabular_warehouse_name>'
)
REST_AUTHENTICATION = (
TYPE = OAUTH
OAUTH_TOKEN_URI = 'https://api.tabular.io/ws/v1/oauth/tokens'
OAUTH_CLIENT_ID = '<oauth_client_id>'
OAUTH_CLIENT_SECRET = '<oauth_secret>'
OAUTH_ALLOWED_SCOPES = ('catalog')
)
ENABLED = TRUE;
O exemplo a seguir cria uma integração de catálogo REST que usa OAuth para se conectar ao Databricks Unity Catalog.
CREATE OR REPLACE CATALOG INTEGRATION unity_catalog_int_oauth
CATALOG_SOURCE = ICEBERG_REST
TABLE_FORMAT = ICEBERG
CATALOG_NAMESPACE = 'default'
REST_CONFIG = (
CATALOG_URI = 'https://my-api/api/2.1/unity-catalog/iceberg'
)
REST_AUTHENTICATION = (
TYPE = OAUTH
OAUTH_TOKEN_URI = 'https://my-api/oidc/v1/token'
OAUTH_CLIENT_ID = '123AbC ...'
OAUTH_CLIENT_SECRET = '1365910ab ...'
OAUTH_ALLOWED_SCOPES = ('all-apis', 'sql')
)
ENABLED = TRUE;
Token de portador ou PAT¶
O exemplo a seguir cria uma integração de catálogo REST que usa um token PAT para se conectar ao Databricks Unity Catalog.
CREATE OR REPLACE CATALOG INTEGRATION unity_catalog_int_pat
CATALOG_SOURCE = ICEBERG_REST
TABLE_FORMAT = ICEBERG
CATALOG_NAMESPACE = 'my_namespace'
REST_CONFIG = (
CATALOG_URI = 'https://my-api/api/2.1/unity-catalog/iceberg'
)
REST_AUTHENTICATION = (
TYPE = BEARER
BEARER_TOKEN = 'eyAbCD...eyDeF...'
)
ENABLED = TRUE;
SigV4¶
O diagrama a seguir mostra como o Snowflake interage com seu servidor de catálogo REST usando uma autenticação API Gateway e SigV4.
Siga as etapas nesta seção para usar uma REST API em uma autenticação Amazon API Gateway e Signature versão 4 (SigV4) para conectar com segurança o Snowflake a um catálogo Iceberg REST que não seja acessível publicamente.
Criar uma REST API no Amazon API Gateway¶
Para conectar o Snowflake ao seu catálogo Iceberg REST, você precisa de um recurso REST API no Amazon API Gateway.
Se você ainda não tiver um recurso REST API no Amazon API Gateway para seu catálogo Iceberg, poderá criar uma REST API simples importando um arquivo de definição de catálogo Iceberg OpenAPI ou adicionando pontos de extremidade manualmente.
No Console de gerenciamento da AWS, procure e selecione API Gateway.
Selecione Create API.
Selecione Build em REST API. Para criar uma REST API privada, selecione Build em REST API Private.
Selecione uma das seguintes opções:
Para criar uma API adicionando pontos de extremidade manualmente, selecione New API.
Para criar uma API usando um arquivo de definição OpenAPI, selecione Import API e carregue o arquivo ou cole a definição no editor de código.
Insira um API name e Description opcional.
Nota
Você não precisa inserir um ID de ponto de extremidade VPC ao criar uma RESTAPI privada.
Selecione Create API.
Para obter mais informações sobre como criar e desenvolver uma REST API no API Gateway, consulte o Guia do desenvolvedor do Amazon API Gateway.
Criar uma política de IAM e anexá-la a uma função¶
Nessa etapa, você cria uma função AWS IAM que o Snowflake pode usar para se conectar ao API Gateway. Você anexa uma política à função que concede permissão para chamar sua API.
No Console de gerenciamento da AWS, procure e selecione IAM.
Selecione Policies no painel de navegação à esquerda.
Selecione Create policy e depois selecione JSON para o Policy editor.
Substitua a política vazia por uma política que tenha permissão para invocar seus métodos de API. Por exemplo, a seguinte política geral permite a ação de invocação para todos os recursos do API Gateway em uma conta AWS.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "execute-api:Invoke" ], "Resource": "arn:aws:execute-api:*:<aws_account_id>:*" } ] }
Importante
Como prática recomendada, use uma política que conceda os privilégios mínimos necessários para seu caso de uso. Para obter orientações adicionais e exemplos de políticas, consulte Controlar acesso a uma API com permissões IAM.
Selecione Next.
Insira um Policy name (por exemplo,
snowflake_access
) e uma Description opcional.Selecione Create policy.
Na seção de navegação esquerda do painel IAM, selecione Roles.
Selecione uma função para anexar à política. Ao criar uma integração de catálogo, você especifica essa função. Se você não tiver uma função, crie uma nova função.
Na página da função Summary, na guia Permissions, selecione Add permissions » Attach policies.
Procure e marque a caixa ao lado da política que você criou para o API Gateway e selecione Add permissions.
Na página da função Summary, copie a função ARN. Você especifica esse ARN ao criar uma integração de catálogo.
Anexar uma política de recursos do API Gateway (somente APIs privadas)¶
Se a sua REST API for privada, você deverá anexar uma política de recursos do Amazon API Gateway à sua API. A política de recursos permite que o Snowflake chame sua API da Amazon Virtual Private Cloud (VPC) na qual sua conta Snowflake está localizada.
No Snowflake, chame a função SYSTEM$GET_SNOWFLAKE_PLATFORM_INFO para obter o ID para a VPC em que sua conta Snowflake está localizada. Copie o ID da VPC da saída da função.
SELECT SYSTEM$GET_SNOWFLAKE_PLATFORM_INFO();
Saída:
{"snowflake-vpc-id":["vpc-c1c234a5"]}
Siga as instruções em Anexando políticas de recursos do API Gateway para anexar uma política de recursos à sua REST API.
Cole e modifique o seguinte exemplo de política.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Principal": "*", "Action": "execute-api:Invoke", "Resource": "<api_gateway_arn>", "Condition": { "StringNotEquals": { "aws:sourceVpc": "<snowflake_vpc_id>" } } }, { "Effect": "Allow", "Principal": { "AWS": "arn:aws:sts::123456789012:assumed-role/<my_api_permissions_role_name>/snowflake" }, "Action": "execute-api:Invoke", "Resource": "<api_gateway_arn>/*/*/*", "Condition": { "StringEquals": { "aws:sourceVpc": "<snowflake_vpc_id>" } } } ] }
A primeira instrução na política nega todas as solicitações que não se originam da Snowflake VPC. A segunda instrução permite a ação de invocação (para todos os métodos) de solicitações originadas da Snowflake VPC que usam o principal de sessão com função assumida.
Para saber mais sobre as políticas de recursos do API Gateway, consulte:
Obter o URL do ponto de extremidade¶
Obtenha seu URL do ponto de extremidade da REST API (ou URL de invocação). Sua API deve ser implantada em um estágio antes de você obter o URL do ponto de extremidade.
No console do Amazon API Gateway, selecione sua REST API.
No painel de navegação esquerdo, selecione Stages.
Em Stage details, copie o Invoke URL.
Você especifica o URL do ponto de extremidade ao criar uma integração de catálogo.
Criar uma integração de catálogo para SigV4¶
Depois de ter uma REST API no Amazon API Gateway e ter concluído as etapas iniciais para controlar o acesso à sua API usando permissões de IAM, você pode criar uma integração de catálogo no Snowflake.
Para exibir a sintaxe do comando e as descrições dos parâmetros, consulte CREATE CATALOG INTEGRATION (Apache Iceberg™ REST).
REST API pública
Para criar uma integração de catálogo para uma REST API pública, especifique ICEBERG_REST
como CATALOG_SOURCE
e use a autenticação SIGV4
.
Inclua detalhes como URL do ponto de extremidade da API e ARN da função IAM.
CREATE OR REPLACE CATALOG INTEGRATION my_rest_catalog_integration
CATALOG_SOURCE = ICEBERG_REST
TABLE_FORMAT = ICEBERG
CATALOG_NAMESPACE = 'my_namespace'
REST_CONFIG = (
CATALOG_URI = 'https://asdlkfjwoalk-execute-api.us-west-2-amazonaws.com/MyApiStage'
)
REST_AUTHENTICATION = (
TYPE = SIGV4
SIGV4_IAM_ROLE = 'arn:aws:iam::123456789012:role/my_api_permissions_role'
)
ENABLED = TRUE;
REST API privada
Para criar uma integração de catálogo para uma REST API privada, você deve definir o parâmetro CATALOG_API_TYPE
como AWS_PRIVATE_API_GATEWAY
.
CREATE OR REPLACE CATALOG INTEGRATION my_rest_catalog_integration
CATALOG_SOURCE = ICEBERG_REST
TABLE_FORMAT = ICEBERG
CATALOG_NAMESPACE = 'my_namespace'
REST_CONFIG = (
CATALOG_URI = 'https://asdlkfjwoalk-execute-api.us-west-2-amazonaws.com/MyApiStage'
)
REST_AUTHENTICATION = (
TYPE = SIGV4
CATALOG_API_TYPE = AWS_PRIVATE_API_GATEWAY
SIGV4_IAM_ROLE = 'arn:aws:iam::123456789012:role/my_api_permissions_role'
)
ENABLED = TRUE;
Configurar a relação de confiança no IAM¶
Em seguida, você deve obter informações sobre o usuário AWS IAM e o ID externo que foram criados para sua conta Snowflake quando você criou a integração de catálogo e deve configurar o relação de confiança para sua função IAM.
No Snowflake, chame o comando DESCRIBE CATALOG INTEGRATION:
DESCRIBE CATALOG INTEGRATION my_rest_catalog_integration;
Registre os seguintes valores:
Valor
Descrição
API_AWS_IAM_USER_ARN
O usuário AWS IAM criado para sua conta Snowflake, por exemplo,
arn:aws:iam::123456789001:user/abc1-b-self1234
. O Snowflake fornece um único usuário IAM para toda a sua conta Snowflake.API_AWS_EXTERNAL_ID
O ID externo necessário para estabelecer uma relação de confiança.
No Console de gerenciamento da AWS, procure e selecione IAM.
Selecione Roles no painel de navegação à esquerda.
Selecione a função IAM que você criou para sua integração de catálogo.
Selecione a guia Trust relationships.
Selecione Edit trust policy.
Modifique o documento da política com os valores que você registrou.
{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "AWS": "<api_aws_iam_user_arn>" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "sts:ExternalId": "<api_aws_external_id>" } } } ] }
Selecione Update policy para salvar suas alterações.