Utilisation des secrets dans les notebooks dans les espaces de travail

Prise en charge des secrets dans les notebooks dans les espaces de travail

Les notebooks Snowflake exécutés dans les espaces de travail peuvent utiliser des objets secrets, ainsi que des intégrations d’accès externes (EAIs), pour que les identifiants de connexion n’apparaissent jamais sous forme de littéraux dans le code des notebooks. Vous configurez les secrets et les EAIs en SQL (par exemple, dans une feuille de calcul) ; vous les joignez ensuite au service des notebooks, au planificateur, ou à l’appel EXECUTE NOTEBOOK PROJECT.

Conditions préalables : configuration des secrets et de l’accès externe

Avant de pouvoir utiliser des secrets dans un notebook Snowflake, configurez les objets de sécurité sous-jacents et les règles réseau. Ces étapes sont effectuées en dehors du notebook (par exemple, dans une feuille de calcul Snowflake).

Configuration de base des secrets

Pour utiliser des secrets existants, exécutez SHOW SECRETS (par exemple, SHOW SECRETS IN ACCOUNT;). Pour créer un nouveau secret, utilisez CREATE SECRET.

Note

Remplacez SNOWPUBLIC et NOTEBOOKS dans les exemples par votre base de données et votre schéma.

-- Example: creating a GENERIC_STRING secret
CREATE OR REPLACE SECRET SNOWPUBLIC.NOTEBOOKS.MY_SECRET_STRING
  TYPE = GENERIC_STRING
  SECRET_STRING = 'your_api_key_here';

Les autres types de secrets courants sont les suivants :

  • PASSWORD, qui nécessite à la fois USERNAME et PASSWORD.

  • OAUTH2, utilisé pour les intégrations avec des fournisseurs externes (par exemple, GitHub).

Intégration d’accès externe (EAI)

Pour permettre à un notebook d’utiliser des secrets lorsqu’il appelle l’Internet public, connectez une règle réseau et une intégration d’accès externe.

-- 1. Create a network rule to allow egress traffic
CREATE OR REPLACE NETWORK RULE my_api_rule
  MODE = EGRESS
  TYPE = HOST_PORT
  VALUE_LIST = ('api.example.com:443');

-- 2. Create the integration that bridges the rule and the secret
CREATE OR REPLACE EXTERNAL ACCESS INTEGRATION my_api_eai
  ALLOWED_NETWORK_RULES = (my_api_rule)
  ALLOWED_AUTHENTICATION_SECRETS = (SNOWPUBLIC.NOTEBOOKS.MY_SECRET_STRING)
  ENABLED = TRUE;

Authentification avancée (OAuth)

Pour les fournisseurs basés sur OAuth, créez une :doc:` intégration de sécurité </sql-reference/sql/create-security-integration>` et complétez le flux OAuth manuel en utilisant:doc:SYSTEM$START_OAUTH_FLOW </sql-reference/functions/system_start_oauth_flow> (et SYSTEM$FINISH_OAUTH_FLOW dans la même session). Ce flux permet à Snowflake d’échanger des jetons avec le fournisseur externe. Pour des exemples de bout en bout, consultez Exemples d’accès au réseau externe et Configurer l’accès externe pour Snowflake Notebooks.

Intégration du service des notebooks avec des secrets

Vous pouvez sélectionner des secrets dans les boîtes de dialogue créer, modifier et planificateur des notebooks.

  1. Dans le menu de navigation, sélectionnez Projects » Workspaces.

  2. Ouvrez Notebooks, puis démarrez Create service (ou modifiez un service existant).

  3. Dans Service settings, joignez une intégration d’accès externe et sélectionnez un ou plusieurs secrets dans le menu déroulant. Vous pouvez joindre plusieurs secrets.

  4. Vérifiez que le service démarre avec succès, puis utilisez des cellules Python pour lire les secrets avec l’API de secrets Snowpark ou à partir des chemins de montage indiqués dans les exemples suivants.

Note

Si le nom du secret pleinement qualifié contient des caractères spéciaux (par exemple, SNOWPUBLIC.NOTEBOOKS."my secret 1"), Snowflake normalise le chemin d’accès utilisé en Python et dans le conteneur. Les traits d’union, les espaces et les caractères similaires dans le segment nom du secret deviennent des traits de soulignement. Les segments de base de données et de schéma sont insensibles à la casse.

Exemple : SNOWPUBLIC.NOTEBOOKS."my secret 1" est exposé aux aides Python en tant que snowpublic/notebooks/my_secret_1 (ajustez la base de données et le schéma pour les faire correspondre à l’emplacement où le secret est stocké).

Les fichiers secrets sont montés sous /secrets/ à l’intérieur du conteneur fourni par Snowflake. Par exemple, un secret de chaîne générique peut apparaître à l’adresse :

/secrets/snowpublic/notebooks/my_secret_1/secret_string

Remplacez snowpublic et notebooks par la base de données et le schéma qui possèdent vos secrets. La correspondance des noms de base de données, de schéma et de secret est insensible à la casse.

La bibliothèque Snowpark expose différentes aides pour chaque type de secret, comme montré ci-dessous.

Appel de secrets GENERIC_STRING depuis une cellule Python

from snowflake.snowpark.secrets import get_generic_secret_string

secret_1 = get_generic_secret_string('snowpublic/notebooks/my_secret_1')
print(secret_1)

print('Reading from the container mount path:')
print(open('/secrets/snowpublic/notebooks/my_secret_1/secret_string').read())

Appel de secrets PASSWORD depuis une cellule Python

from snowflake.snowpark.secrets import get_username_password

creds = get_username_password('snowpublic/notebooks/my_password_secret')
print('Username: ', creds.username)
print('Password: ', creds.password)

print('Container mount path:')
print(open('/secrets/snowpublic/notebooks/my_password_secret/username').read())
print(open('/secrets/snowpublic/notebooks/my_password_secret/password').read())

Appel de secrets OAUTH2 depuis une cellule Python

from snowflake.snowpark.secrets import get_oauth_access_token

token = get_oauth_access_token('_/_/github_secret')
print(token)

print('Reading from the container mount path:')
print(open('/secrets/_/_/github_secret/access_token').read())

Remplacez _/_/github_secret par le chemin d’accès normalisé pour votre OAuth2 (base de données/schéma/nom), en suivant les mêmes règles que ci-dessus.

Planifier des notebooks avec des secrets

Lorsque vous planifiez un notebook à partir de Snowsight, ajoutez les EAIs et les secrets que la tâche planifiée doit utiliser dans la boîte de dialogue de planification, de sorte que l’exécution sans tête hérite du même accès externe et des mêmes identifiants de connexion que le développement interactif.

Exécutions non interactives avec EXECUTE NOTEBOOK PROJECT et secrets

Les exécutions sans tête doivent lister les EAIs et les secrets lorsque le notebook en dépend. Transmettez des intégrations avec EXTERNAL_ACCESS_INTEGRATIONS et transmettez des secrets avec SECRETS. Pour la syntaxe complète, consultez EXECUTE NOTEBOOK PROJECT.

EXECUTE NOTEBOOK PROJECT "<database_name>"."<schema_name>"."<project_name>"
  MAIN_FILE = 'notebook.ipynb'
  COMPUTE_POOL = '<compute_pool_name>'
  RUNTIME = '<runtime_version>'
  QUERY_WAREHOUSE = '<warehouse_name>'
  ARGUMENTS = '<string>'
  REQUIREMENTS_FILE = '<path/to/requirements.txt>'
  EXTERNAL_ACCESS_INTEGRATIONS = ('integration_name')
  SECRETS = ( <database_name>.<schema_name>.<secret_name> [ , ... ] );

Remplacez les espaces réservés par les intégrations et les secrets pleinement qualifiés dont votre notebook a besoin.