Autenticación con Snowflake
Es posible configurar el conector de Snowflake de Amazon Athena para que use el método de autenticación mediante par de claves o el método de autenticación OAuth para conectarse al almacén de datos de Snowflake. Ambos métodos ofrecen un acceso seguro a Snowflake y evitan la necesidad de almacenar contraseñas en las cadenas de conexión.
-
Autenticación mediante par de claves: este método utiliza pares de claves públicas o privadas RSA para autenticarse en Snowflake. La clave privada firma digitalmente las solicitudes de autenticación, mientras que la clave pública correspondiente se registra en Snowflake para su verificación. Con este método no es necesario almacenar contraseñas.
-
Autenticación OAuth: este método utiliza un token de autorización y un token de actualización para la autenticación con Snowflake. Admite la actualización automática de tokens, lo que lo hace adecuado para aplicaciones de larga duración.
Para obtener más información, consulte Autenticación mediante par de claves
Requisitos previos
Antes de comenzar, complete los siguientes requisitos previos:
-
Acceso a la cuenta de Snowflake con privilegios administrativos.
-
Cuenta de usuario de Snowflake dedicada al conector de Athena.
-
OpenSSL u otras herramientas equivalentes de generación de claves para la autenticación mediante par de claves.
-
Acceso a AWS Secrets Manager para crear y administrar secretos.
-
Navegador web para completar el flujo de OAuth para la autenticación de OAuth.
Cómo configurar la autenticación mediante par de claves
Este proceso implica generar un par de claves RSA, configurar la cuenta de Snowflake con la clave pública y almacenar la clave privada de forma segura en AWS Secrets Manager. Los siguientes pasos lo guiarán en la creación de las claves criptográficas, la configuración de los permisos necesarios en Snowflake y la configuración de las credenciales de AWS para una autenticación sin inconvenientes.
Generación de par de claves de RSA
Genere un par de claves privada y pública con OpenSSL.
-
Para generar una versión sin cifrar, utilice el siguiente comando en la aplicación de línea de comandos local.
openssl genrsa 2048 | openssl pkcs8 -topk8 -inform PEM -out rsa_key.p8 -nocrypt
-
Para generar una versión cifrada, utilice el siguiente comando, que omite
-nocrypt
.openssl genrsa 2048 | openssl pkcs8 -topk8 -v2 des3 -inform PEM -out rsa_key.p8
-
Para generar una clave pública a partir de una clave 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
No comparta la clave privada. La clave privada debe estar accesible únicamente para la aplicación que necesita autenticarse en Snowflake.
-
Extraiga el contenido de la clave pública sin delimitadores para Snowflake
# Extract public key content (remove BEGIN/END lines and newlines) cat rsa_key.pub | grep -v "BEGIN\|END" | tr -d '\n'
Guarde esta salida, ya que la necesitará más adelante en el siguiente paso.
-
Configure el usuario de Snowflake
Siga estos pasos para configurar un usuario de Snowflake.
-
Cree un usuario dedicado para el conector de Athena si aún no existe.
-- Create user for Athena connector CREATE USER
athena_connector_user
; -- Grant necessary privileges GRANT USAGE ON WAREHOUSEyour_warehouse
TO ROLEathena_connector_role
; GRANT USAGE ON DATABASEyour_database
TO ROLEathena_connector_role
; GRANT SELECT ON ALL TABLES IN DATABASEyour_database
TO ROLEathena_connector_role
; Conceda privilegios de autenticación. Para asignar una clave pública a un usuario, debe contar con uno de los siguientes roles o privilegios.
-
El privilegio
MODIFY PROGRAMMATIC AUTHENTICATION METHODS
o el privilegioOWNERSHIP
sobre el usuario. -
El rol de
SECURITYADMIN
o superior.
Conceda los privilegios necesarios para asignar claves públicas con el siguiente comando.
GRANT MODIFY PROGRAMMATIC AUTHENTICATION METHODS ON USER
athena_connector_user
TO ROLEyour_admin_role
;-
-
Asigne la clave pública al usuario de Snowflake con el siguiente comando.
ALTER USER
athena_connector_user
SET RSA_PUBLIC_KEY='RSAkey
';Verifique que la clave pública se haya asignado correctamente al usuario con el siguiente comando.
DESC USER
athena_connector_user
;
-
Almacene la clave privada en AWS Secrets Manager
Convierta la clave privada al formato requerido por el conector.
# Read private key content cat rsa_key.p8
-
Cree un secreto en AWS Secrets Manager con la siguiente estructura.
{ "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
El encabezado y el pie de página son opcionales.
La clave privada debe estar separada por
\n
.
Configuración de la autenticación OAuth
Este método de autenticación permite un acceso seguro a Snowflake basado en tokens, con capacidades de actualización automática de credenciales. El proceso de configuración implica crear una integración de seguridad en Snowflake, recuperar las credenciales de cliente de OAuth, completar el flujo de autorización para obtener un código de acceso y almacenar las credenciales de OAuth en AWS Secrets Manager para que las utilice el conector.
Cree una integración de seguridad en Snowflake
Ejecute el siguiente comando SQL en Snowflake para crear una integración de seguridad OAuth de 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 configuración
-
TYPE = OAUTH
: especifica el tipo de autenticación de OAuth. -
ENABLED = TRUE
: habilita la integración de seguridad. -
OAUTH_CLIENT = CUSTOM
: utiliza una configuración de cliente OAuth personalizada. -
OAUTH_CLIENT_TYPE = 'CONFIDENTIAL'
: establece el tipo de cliente para aplicaciones seguras. -
OAUTH_REDIRECT_URI
: la URL de devolución de llamada para el flujo de OAuth. Puede ser localhost para pruebas. -
OAUTH_ISSUE_REFRESH_TOKENS = TRUE
: permite la generación de tokens de actualización. -
OAUTH_REFRESH_TOKEN_VALIDITY = 7776000
: establece la validez del token de actualización (90 días en segundos).
-
Recupera los secretos de los clientes de OAuth
-
Ejecute el siguiente comando SQL para obtener las credenciales de cliente.
DESC SECURITY INTEGRATION '
MY_SNOWFLAKE_OAUTH_INTEGRATION_A
'; Recupere los secretos de cliente de OAuth.
SELECT SYSTEM$SHOW_OAUTH_CLIENT_SECRETS('
MY_SNOWFLAKE_OAUTH_INTEGRATION_A
');Ejemplo de respuesta
{ "OAUTH_CLIENT_SECRET_2": "
wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
", "OAUTH_CLIENT_SECRET": "je7MtGbClwBF/2Zp9Utk/h3yCo8nvbEXAMPLEKEY
, "OAUTH_CLIENT_ID": "AIDACKCEVSQ6C2EXAMPLE
" }
nota
Mantenga estas credenciales seguras y no las comparta. Se usarán para configurar el cliente de OAuth.
-
Autorice al usuario y recupere el código de autorización
Abra la siguiente URL en un navegador.
https://
<your_account>
.snowflakecomputing.com/oauth/authorize?client_id=<OAUTH_CLIENT_ID>
&response_type=code&redirect_uri=https://localhost:8080/oauth/callbackComplete el flujo de autorización.
-
Inicie sesión con las credenciales de Snowflake.
-
Conceda los permisos solicitados. Será redirigido al URI de retorno con un código de autorización.
-
Extraiga el código de autorización. Para ello, copie el parámetro código de la URL de redirección.
https://localhost:8080/oauth/callback?code=
<authorizationcode>
nota
El código de autorización es válido por un tiempo limitado y solo se puede usar una vez.
Almacene las credenciales de OAuth en AWS Secrets Manager
Cree un secreto en AWS Secrets Manager con la siguiente estructura.
{ "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 obligatorios
-
redirect_uri
: URI de redirección de OAuth que obtuvo en el paso 1. -
client_secret
: secreto de cliente de OAuth que obtuvo en el paso 2. -
token_url
: punto de conexión de token OAuth de Snowflake. -
client_id
: ID de cliente de OAuth del paso 2. -
username
: el nombre de usuario de Snowflake para el conector. -
auth_code
: código de autorización que obtuvo en el paso 3.
-
Después de crear un secreto, obtiene un ARN de secreto que puede usar en la conexión de Glue al crear una conexión de origen de datos.