Autenticar com o Snowflake
Você pode configurar o conector do Amazon Athena Snowflake para usar a autenticação por par de chaves ou o método de autenticação OAuth para se conectar ao data warehouse do Snowflake. Ambos os métodos fornecem acesso seguro ao Snowflake e eliminam a necessidade de armazenar senhas em cadeias de conexão.
-
Autenticação por par de chaves: esse método usa pares de chaves públicas ou privadas RSA para autenticar com o Snowflake. A chave privada assina digitalmente as solicitações de autenticação enquanto a chave pública correspondente é registrada no Snowflake para verificação. Esse método elimina o armazenamento de senhas.
-
Autenticação OAuth: esse método usa o token de autorização e o token de atualização para autenticar com o Snowflake. Ele oferece suporte à atualização automática de tokens, o que o torna adequado para aplicações de execução longa.
Para obter mais informações, consulte autenticação por par de chaves
Pré-requisitos
Antes de começar, conclua os seguintes pré-requisitos:
-
Acesso à conta do Snowflake com privilégios administrativos.
-
Conta de usuário do Snowflake dedicada para o conector do Athena.
-
OpenSSL ou ferramentas equivalentes de geração de chaves para autenticação de pares de chaves.
-
Acesso ao AWS Secrets Manager para criar e gerenciar segredos.
-
Navegador da Web para concluir o fluxo do OAuth para a autenticação do OAuth.
Configurar a autenticação por par de chaves
Esse processo envolve gerar um par de chaves RSA, configurar sua conta do Snowflake com a chave pública e armazenar com segurança a chave privada no AWS Secrets Manager. As etapas a seguir guiarão você na criação das chaves criptográficas, na configuração das permissões necessárias do Snowflake e na configuração das credenciais da AWS para autenticação direta.
Gerar pares de chaves RSA
Gere um par de chaves pública e privada usando o OpenSSL.
-
Para gerar uma versão não criptografada, use o comando a seguir em sua aplicação de linha de comando local.
openssl genrsa 2048 | openssl pkcs8 -topk8 -inform PEM -out rsa_key.p8 -nocrypt -
Para gerar uma versão criptografada, use o comando a seguir, que omite
-nocrypt.openssl genrsa 2048 | openssl pkcs8 -topk8 -v2 des3 -inform PEM -out rsa_key.p8 -
Para gerar uma chave pública com base em uma chave privada.
openssl rsa -in rsa_key.p8 -pubout -out rsa_key.pub # Set appropriate permissions (Unix/Linux) chmod 600 rsa_key.p8 chmod 644 rsa_key.pub
nota
Não compartilhe sua chave privada. A chave privada só deve estar acessível à aplicação que precisa se autenticar com o Snowflake.
-
Extrair conteúdo da chave pública sem delimitadores para o Snowflake
# Extract public key content (remove BEGIN/END lines and newlines) cat rsa_key.pub | grep -v "BEGIN\|END" | tr -d '\n'Salve essa saída, pois ela será necessária mais tarde na próxima etapa.
-
Configurar um usuário do Snowflake
Siga estas etapas para configurar um usuário do Snowflake.
-
Crie um usuário dedicado para o conector do Athena, caso ele ainda não exista.
-- Create user for Athena connector CREATE USERathena_connector_user; -- Grant necessary privileges GRANT USAGE ON WAREHOUSEyour_warehouseTO ROLEathena_connector_role; GRANT USAGE ON DATABASEyour_databaseTO ROLEathena_connector_role; GRANT SELECT ON ALL TABLES IN DATABASEyour_databaseTO ROLEathena_connector_role; Conceda privilégios de autenticação. Para atribuir uma chave pública a um usuário, é necessário ter um dos seguintes perfis ou privilégios.
-
O privilégio
MODIFY PROGRAMMATIC AUTHENTICATION METHODSouOWNERSHIPno usuário. -
O perfil
SECURITYADMINou superior.
Conceda os privilégios necessários para atribuir chaves públicas usando o comando a seguir.
GRANT MODIFY PROGRAMMATIC AUTHENTICATION METHODS ON USERathena_connector_userTO ROLEyour_admin_role;-
-
Atribua a chave pública ao usuário do Snowflake usando o comando a seguir.
ALTER USERathena_connector_userSET RSA_PUBLIC_KEY='RSAkey';Verifique se a chave pública foi atribuída com sucesso ao usuário com o comando a seguir.
DESC USERathena_connector_user;
-
Armazenar a chave privada em AWS Secrets Manager
Converta a chave privada para o formato exigido pelo conector.
# Read private key content cat rsa_key.p8-
Crie um segredo no AWS Secrets Manager com a estrutura a seguir.
{ "sfUser": "your_snowflake_user", "pem_private_key": "-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----", "pem_private_key_passphrase": "passphrase_in_case_of_encrypted_private_key(optional)" }nota
O cabeçalho e o rodapé são opcionais.
A chave privada deve ser separada por
\n.
Configurar autenticação do OAuth
Esse método de autenticação permite acesso seguro e baseado em tokens ao Snowflake com recursos de atualização automática de credenciais. O processo de configuração envolve a criação de uma integração de segurança no Snowflake, a recuperação das credenciais do cliente OAuth, a conclusão do fluxo de autorização necessário para obter um código de acesso e o armazenamento das credenciais do OAuth no AWS Secrets Manager para uso do conector.
Criar uma integração de segurança no Snowflake
Execute o seguinte comando SQL no Snowflake para criar uma integração de segurança OAuth do Snowflake.
CREATE SECURITY INTEGRATIONmy_snowflake_oauth_integration_aTYPE = OAUTH ENABLED = TRUE OAUTH_CLIENT = CUSTOM OAUTH_CLIENT_TYPE = 'CONFIDENTIAL' OAUTH_REDIRECT_URI = 'https://localhost:8080/oauth/callback' OAUTH_ISSUE_REFRESH_TOKENS = TRUE OAUTH_REFRESH_TOKEN_VALIDITY = 7776000;Parâmetros de configuração
-
TYPE = OAUTH: especifica o tipo de autenticação OAuth. -
ENABLED = TRUE: permite a integração de segurança. -
OAUTH_CLIENT = CUSTOM: usa a configuração personalizada do cliente OAuth. -
OAUTH_CLIENT_TYPE = 'CONFIDENTIAL': define o tipo de cliente para aplicações seguras. -
OAUTH_REDIRECT_URI: o URL de retorno de chamada para o fluxo do OAuth. Para fins de teste, ele pode ser o localhost. -
OAUTH_ISSUE_REFRESH_TOKENS = TRUE: habilita a geração de tokens de atualização. -
OAUTH_REFRESH_TOKEN_VALIDITY = 7776000: define a validade do token de atualização (90 dias em segundos).
-
Recuperar segredos do cliente OAuth
-
Execute o comando SQL a seguir para obter as credenciais do cliente.
DESC SECURITY INTEGRATION 'MY_SNOWFLAKE_OAUTH_INTEGRATION_A'; Recupere os segredos do cliente OAuth.
SELECT SYSTEM$SHOW_OAUTH_CLIENT_SECRETS('MY_SNOWFLAKE_OAUTH_INTEGRATION_A');Exemplo de resposta
{ "OAUTH_CLIENT_SECRET_2": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", "OAUTH_CLIENT_SECRET": "je7MtGbClwBF/2Zp9Utk/h3yCo8nvbEXAMPLEKEY, "OAUTH_CLIENT_ID": "AIDACKCEVSQ6C2EXAMPLE" }
nota
Mantenha essas credenciais em segurança e não as compartilhe. Elas serão usadas para configurar o cliente OAuth.
-
Autorizar o usuário e recuperar o código de autorização
Abra o URL a seguir no seu navegador.
https://<your_account>.snowflakecomputing.com/oauth/authorize?client_id=<OAUTH_CLIENT_ID>&response_type=code&redirect_uri=https://localhost:8080/oauth/callbackConclua o fluxo de autorização.
-
Faça login usando suas credenciais do Snowflake.
-
Conceda as permissões solicitadas. Você será redirecionado para o URI de retorno de chamada com um código de autorização.
-
Extraia o código de autorização copiando o parâmetro de código do URL de redirecionamento.
https://localhost:8080/oauth/callback?code=<authorizationcode>nota
O código de autorização é válido por tempo limitado e só pode ser usado uma vez.
Armazenar credenciais do OAuth no AWS Secrets Manager
Crie um segredo no AWS Secrets Manager com a estrutura a seguir.
{ "redirect_uri": "https://localhost:8080/oauth/callback", "client_secret": "je7MtGbClwBF/2Zp9Utk/h3yCo8nvbEXAMPLEKEY", "token_url": "https://<your_account>.snowflakecomputing.com/oauth/token-request", "client_id": "AIDACKCEVSQ6C2EXAMPLE, "username": "your_snowflake_username", "auth_code": "authorizationcode" }Campos obrigatórios
-
redirect_uri: URI de redirecionamento do OAuth que você obteve na Etapa 1. -
client_secret: segredo do cliente OAuth que você obteve na Etapa 2. -
token_url: Snowflake. O endpoint do token OAuth. -
client_id: o ID do cliente OAuth da Etapa 2. -
username: o nome de usuário do Snowflake para o conector. -
auth_code: o código de autorização que você obteve na Etapa 3.
-
Após criar um segredo, você obtém um ARN de segredo que pode ser usado na sua conexão do Glue ao criar uma conexão de fonte de dados.