Autenticar com o Snowflake - Amazon Athena

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 e autenticação OAuth no guia do usuário do Snowflake.

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.

  1. 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.

  2. 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.

  3. Configurar um usuário do Snowflake

    Siga estas etapas para configurar um usuário do Snowflake.

    1. Crie um usuário dedicado para o conector do Athena, caso ele ainda não exista.

      -- Create user for Athena connector CREATE USER athena_connector_user; -- Grant necessary privileges GRANT USAGE ON WAREHOUSE your_warehouse TO ROLE athena_connector_role; GRANT USAGE ON DATABASE your_database TO ROLE athena_connector_role; GRANT SELECT ON ALL TABLES IN DATABASE your_database TO ROLE athena_connector_role;
    2. 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 METHODS ou OWNERSHIP no usuário.

      • O perfil SECURITYADMIN ou superior.

      Conceda os privilégios necessários para atribuir chaves públicas usando o comando a seguir.

      GRANT MODIFY PROGRAMMATIC AUTHENTICATION METHODS ON USER athena_connector_user TO ROLE your_admin_role;
    3. Atribua a chave pública ao usuário do Snowflake usando o comando a seguir.

      ALTER USER athena_connector_user SET RSA_PUBLIC_KEY='RSAkey';

      Verifique se a chave pública foi atribuída com sucesso ao usuário com o comando a seguir.

      DESC USER athena_connector_user;
  4. Armazenar a chave privada em AWS Secrets Manager

    1. Converta a chave privada para o formato exigido pelo conector.

      # Read private key content cat rsa_key.p8
    2. 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.

  1. 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 INTEGRATION my_snowflake_oauth_integration_a TYPE = 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).

  2. Recuperar segredos do cliente OAuth

    1. Execute o comando SQL a seguir para obter as credenciais do cliente.

      DESC SECURITY INTEGRATION 'MY_SNOWFLAKE_OAUTH_INTEGRATION_A';
    2. 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.

  3. Autorizar o usuário e recuperar o código de autorização

    1. 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/callback
    2. Conclua o fluxo de autorização.

      1. Faça login usando suas credenciais do Snowflake.

      2. Conceda as permissões solicitadas. Você será redirecionado para o URI de retorno de chamada com um código de autorização.

    3. 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.

  4. 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.