Configurer l’OAuth externe dans Snowflake Open Catalog¶
Cette rubrique décrit comment configurer des serveurs externes qui utilisent l’OAuth pour accéder à Snowflake Open Catalog.
Note
Cette rubrique vous montre comment utiliser Auth0 pour configurer l’OAuth externe pour Open Catalog. Cependant, les étapes pour la configurer dans Okta ou Microsoft Entra ID sont similaires.
Conditions préalables¶
Créez un ou plusieurs catalogues dans votre compte Open Catalog.
Assurez-vous de disposer d’un compte auprès d’un fournisseur d’identité (IdP). À des fins de démonstration, cette rubrique utilise Auth0 comme IdP. Pour créer un compte Auth0 pour votre entreprise ou organisation, consultez https://auth0.com/. Cependant, le processus est similaire pour Okta et Microsoft Entra ID.
Vous devez avoir [Snowflake CLI] (https://docs.snowflake.com/en/developer-guide/snowflake-cli/installation/installation) installé sur votre machine.
Pour configurer l’OAuth externe, vous devez disposer du rôle d’administrateur de service dans Open Catalog. Pour plus d’informations, consultez [Rôles utilisateur] (https://other-docs.snowflake.com/en/opencatalog/access-control#user-roles). Dans Snowflake CLI, ce rôle est affiché comme POLARIS_ACCOUNT_ADMIN.
Avant de commencer¶
Pour configurer l’OAuth externe, vous avez besoin de créer une connexion Snowflake CLI pour Open Catalog.
Pour créer cette connexion, vous avez besoin de votre identificateur de compte Open Catalog complet, qui comprend le nom de votre organisation Snowflake et le nom de votre compte Open Catalog ; par exemple : <orgname>.<my-snowflake-open-catalog-account-name>.
Pour trouver le nom de votre organisation Snowflake (
<orgname>), consultez :ref:label-account_name_find.Pour trouver votre nom de compte Snowflake Open Catalog (
<my-snowflake-open-catalog-account-name>), voir :doc:/user-guide/opencatalog/find-account-name.
Créer une connexion Snowflake CLI¶
Créez une connexion Snowflake CLI pour votre compte Open Catalog afin de pouvoir l’utiliser pour configurer l’OAuth externe pour le compte.
Étape 1 : Ajouter une connexion CLI Snowflake pour Snowflake Open Catalog¶
Add a connection with the following values. For all other parameters, press Enter to skip specifying a value for the parameter.
Paramètres de configuration de la connexion
Valeur
Nom de cette connexion
Spécifiez un nom pour la connexion ; par exemple,
myopencatalogconnection.Nom du compte
Indiquez le nom de votre organisation Snowflake, suivi du nom de votre compte Open Catalog, au format :
<orgname>-<my-snowflake-open-catalog-account-name>.Par exemple,
ABCDEFG-MYACCOUNT1.Pour trouver ces noms, voir
Avant de commencer_.Nom d’utilisateur
Indiquez votre nom d’utilisateur pour Open Catalog ; par exemple,
jsmith.Mot de passe [facultatif]
Ce paramètre n’est pas facultatif lorsque vous créez une connexion pour Open Catalog.
Saisissez votre mot de passe pour Open Catalog ; par exemple,
MyPassword123456789.Rôle pour la connexion [facultatif]
Ce paramètre n’est pas facultatif lorsque vous créez une connexion pour Open Catalog.
Vous devez saisir
POLARIS_ACCOUNT_ADMIN.
Étape 2 : Test de la connexion CLI Snowflake¶
Pour tester votre connexion CLI, suivez cet exemple, qui teste la connexion pour
myopencatalogconnection:snow connection test -c myopencatalogconnection
La réponse devrait ressembler à ceci :
+------------------------------------------------------------------------------+ | key | value | |----------------------------+-------------------------------------------------| | Connection name | myopencatalogconnection | | Status | OK | | Host | ABCDEFG-MYACCOUNT1.snowflakecomputing.com | | Account | ABCDEFG-MYACCOUNT1 | | User | jsmith | | Role | POLARIS_ACCOUNT_ADMIN | | Database | not set | | Warehouse | not set | +------------------------------------------------------------------------------+
Étape 3 : Configurer une connexion Snowflake CLI par défaut¶
Pour que la connexion que vous utilisez dispose toujours du bon rôle POLARIS_ACCOUNT_ADMIN qui lui est attribué, vous pouvez définir la connexion CLI Snowflake que vous avez créée pour Open Catalog comme connexion par défaut. Pour plus d’informations sur la connexion par défaut, consultez :ref:label-cli_set_default_connection.
Suivez cet exemple, qui définit la connexion
myopencatalogconnectionpar défaut :snow connection set-default myopencatalogconnection
Pour confirmer que vous utilisez le bon utilisateur et le bon rôle, exécutez la commande suivante :
snow sql -q "Select current_user(); select current_role();"
La réponse doit renvoyer votre nom d’utilisateur Open Catalog et le ROLE CURRENT devrait être POLARIS_ACCOUNT_ADMIN.
+----------------+ | CURRENT_USER() | |----------------| | JSMITH | +----------------+ select current_role(); +-----------------------+ | CURRENT_ROLE() | |-----------------------| | POLARIS_ACCOUNT_ADMIN | +-----------------------+
Étape 2 : Récupérer le nom de votre organisation et de votre compte¶
Vous avez besoin du nom de votre organisation et du nom de votre compte Snowflake Open Catalog, séparés par un trait d’union, pour des tâches comme la création d’une intégration de sécurité.
Pour récupérer le nom de votre organisation et le nom de votre compte Snowflake Open Catalog dans ce format, dans Snowflake CLI, exécutez la commande suivante :
snow sql -q "SELECT CURRENT_ORGANIZATION_NAME() || '-' || CURRENT_ACCOUNT_NAME();"
Dans la réponse, copiez les valeurs renvoyées et collez-les dans un éditeur de texte pour une utilisation ultérieure. Par exemple :
ABCDEFG-MYACCOUNT1.
Étape 3 : Créer une intégration de sécurité¶
Pour créer une intégration de sécurité, exécutez la commande CREATE SECURITY INTEGRATION à l’aide d’une commande de connexion CLI Snowflake.
snow sql -q "create or replace security integration external_oauth_auth0
type = external_oauth
enabled = true
external_oauth_type = custom
external_oauth_issuer = 'https://<Auth0_domain>/'
external_oauth_jws_keys_url = 'https://<Auth0_domain>/.well-known/jwks.json'
external_oauth_audience_list = ('https://<your_org_name>-<your_open_catalog_account_name>.snowflakecomputing.com')
external_oauth_token_user_mapping_claim = 'sub'
external_oauth_snowflake_user_mapping_attribute = 'login_name'
EXTERNAL_OAUTH_SCOPE_DELIMITER = ' '
EXTERNAL_OAUTH_SCOPE_MAPPING_ATTRIBUTE = 'scope';"
Où :
<Auth0_domain>est votre domaine Auth0. Pour trouver cette valeur, dans Auth0, accédez à Applications > Applications > [Nom de votre application] > Paramètres > Champ Domaine.<your_org_name>-<your_open_catalog_account_name>est le nom de votre organisation et le nom de votre compte Snowflake Open Catalog, séparés par un trait d’union.Par exemple :
ABCDEFG-MYACCOUNT1.Pour récupérer ces valeurs dans ce format, consultez [Récupérer le nom de votre organisation et de votre compte] (#step-2-retrieve-your-organization-and-account-name).
Étape 4 : Générer votre jeton d’accès d’administrateur de service¶
Pour configurer l’OAuth externe de manière programmatique, vous avez besoin d’un jeton d’accès d’administrateur de service. Toutefois, vous avez la possibilité d’utiliser l’UI d’Open Catalog pour effectuer certaines tâches pour configurer l’OAuth externe.
Si vous avez déjà généré un jeton d’accès d’administrateur de service pour vous-même et qu’il est toujours actif, vous pouvez ignorer cette étape.
Pour générer votre jeton d’accès d’administrateur de service, dans Snowflake CLI, exécutez la commande suivante et copiez la valeur dans un éditeur de texte :
ACCESS_TOKEN=$(curl -X POST https://<Auth0_domain>/oauth/token --header 'content-type: application/x-www-form-urlencoded' --data grant_type=client_credentials --data client_id=<client_id> --data client_secret=<client_secret> --data-urlencode "audience=https://<your_org_name>-<your_open_catalog_account_name>.snowflakecomputing.com" --data "scope=SESSION:ROLE:POLARIS_ACCOUNT_ADMIN" | jq -r '.access_token')
Où :
<Auth0_domain>est votre domaine Auth0. Pour trouver cette valeur, dans Auth0, accédez à Applications > Applications > [Nom de votre application] > Paramètres > Champ Domaine.<client_id>est l’ID client pour votre application dans Auth0 à laquelle vous accordez l’accès au privilège POLARIS_ACCOUNT_ADMIN. Pour trouver cette valeur, dans Auth0, accédez à Applications > Applications > [Nom de votre application] > Paramètres > Champ ID client.<client_secret>est le secret client pour votre application dans Auth0 à laquelle vous accordez l’accès au privilège POLARIS_ACCOUNT_ADMIN. Pour trouver cette valeur, dans Auth0, accédez à Applications > Applications > [Nom de votre application] > Paramètres > Champ Secret client.<audience>est l’identificateur de votre API. Pour trouver cette valeur, dans Auth0, accédez à Applications > APIs > Sélectionnez votre API > Paramètres > Champ Identificateur.<your_org_name>-<your_open_catalog_account_name>est le nom de votre organisation et le nom de votre compte Snowflake Open Catalog, séparés par un trait d’union.Par exemple :
ABCDEFG-MYACCOUNT1.Pour récupérer ces valeurs dans ce format, consultez [Récupérer le nom de votre organisation et de votre compte] (#step-2-retrieve-your-organization-and-account-name).
POLARIS_ACCOUNT_ADMINest le nom du rôle intégré dans Open Catalog qui vous permet d’effectuer des tâches administratives dans Open Catalog, ce qui inclut la configuration de l’OAuth externe. Dans l’UI d’Open Catalog, ce rôle est appelé rôle d’administrateur de service.
Étape 5 : Créer un rôle personnalisé¶
À cette étape, vous utilisez votre connexion Snowflake CLI pour créer un rôle personnalisé.
Créez un rôle personnalisé pour pouvoir ensuite lui accorder des rôles de catalogue et accorder le rôle personnalisé à un principal de service, ce qui lui confère des privilèges. Pour plus d’informations sur les rôles personnalisés, consultez [Rôle personnalisé] (access-control.md#custom-role). Pour plus d’informations sur le modèle RBAC dans Open Catalog, consultez [Modèle RBAC] (./access-control.md#rbac-model).
Note
Si la connexion CLI Snowflake par défaut que vous avez définie n’a pas le rôlePOLARIS_ACCOUNT_ADMIN attribué, vous devez inclure l’instruction suivante avec votre commande : USE ROLE POLARIS_ACCOUNT_ADMIN.
L’exemple suivant crée un rôle personnalisé OPEN_CATALOG_ADMIN :
snow sql -q "create role OPEN_CATALOG_ADMIN;"
Étape 6 : Accorder un rôle de catalogue à un rôle personnalisé¶
Dans cette section, vous accordez un rôle de catalogue au rôle personnalisé que vous avez créé.
Après avoir accordé un rôle de catalogue au rôle personnalisé, vous accordez le rôle personnalisé à un principal de service pour lui conférer tous les privilèges accordés aux rôles de catalogue qui sont accordés au rôle principal. Pour plus d’informations sur le modèle RBAC dans Open Catalog, consultez [Modèle RBAC] (./access-control.md#rbac-model).
Vous pouvez accorder le rôle personnalisé avec un rôle de catalogue qui dispose de privilèges d’administrateur de catalogue pour le catalogue ou qui dispose d’un ensemble de privilèges pour le catalogue que vous spécifiez :
Si vous souhaitez accorder à un principal de service des privilèges d’administrateur de catalogue pour un catalogue, [accordez un rôle de catalogue avec des privilèges d’administrateur de catalogue au rôle personnalisé] (#grant-a-catalog-role-with-catalog-admin-privileges-to-the-custom-role). Pour obtenir des informations sur les privilèges d’un administrateur de catalogue, consultez [Rôle d’administrateur de catalogue] (access-control.md#catalog-admin-role).
Si vous souhaitez accorder au principal de service un ensemble de privilèges que vous spécifiez, [accordez un rôle de catalogue avec un ensemble de privilèges que vous spécifiez au rôle personnalisé] (#grant-a-catalog-role-with-a-set-of-privileges-you-specify-to-the-custom-role). Par exemple, sélectionnez cette option si vous souhaitez accorder un rôle de catalogue catalog_reader, catalog_writer ou catalog_metadata_reader au rôle personnalisé.
Accorder un rôle de catalogue avec des privilèges d’administrateur de catalogue au rôle personnalisé¶
Dans cette section, vous accordez un rôle de catalogue avec des privilèges d’administrateur de catalogue au rôle personnalisé. Le workflow est le suivant :
[Créer un rôle de catalogue] (#create-a-catalog-role).
[Accorder des privilèges d’administrateur de catalogue au rôle de catalogue] (#grant-catalog-admin-privileges-to-the-catalog-role).
[Accorder le rôle de catalogue à un rôle personnalisé] (#grant-the-catalog-role-to-a-custom-role).
Créer un rôle de catalogue¶
Exécutez la commande suivante pour créer un rôle de catalogue dans le catalogue que vous spécifiez :
curl -X POST \ "https://<your_org_name>-<your_open_catalogaccount_name>.snowflakecomputing.com/polaris/api/management/v1/catalogs/{catalogName}/catalog-roles" \ -H "Authorization: Bearer <service_admin_access_token>" \ -H "Content-Type: application/json" \ -H "Accept: application/json" \ -d '{ "name": "<catalog_role_name>" }'
- Où :
<your_org_name>-<your_open_catalogaccount_name>est le nom de votre organisation et le nom de votre compte Snowflake Open Catalog, séparés par un trait d’union.Par exemple :
ABCDEFG-MYACCOUNT1.Pour récupérer ces valeurs dans ce format, consultez :ref:
label-retrieve_org_account_name_external_oauth.
{Catalogname}est le nom du catalogue dans Open Catalog dans lequel vous souhaitez créer un rôle de catalogue.
<service_admin_access_token>est le :ref:jeton d’accès d’administrateur de service que vous avez généré <label-generate_service_admin_access_token_external_oauth>.Pour
<catalog_role_name>, spécifiez un nom pour le rôle de catalogue. Par exemple : CatalogAdmin.
Consultez Catalogue <https://github.com/Snowflake-Labs/polaris-cli-opencatalog-demo?tab=readme-ov-file#catalog-1>_ dans Snowflake Labs.
Consultez :doc:/user-guide/opencatalog/create-catalog-role.
Accorder des privilèges d’administrateur de catalogue au rôle de catalogue¶
Exécutez la commande suivante :
curl -X PUT \ "https://<your_org_name>-<your_open_catalogaccount_name>.snowflakecomputing.com/polaris/api/management/v1/catalogs/{catalogName}/catalog-roles/{catalogRoleName}/grants" \ -H "Authorization: Bearer <service_admin_access_token>" \ -H "Content-Type: application/json" \ -H "Accept: application/json" \ -d '{"grant": {"type": "catalog", "privilege": "CATALOG_MANAGE_CONTENT"}}'
- Où :
<your_org_name>-<your_open_catalogaccount_name>est le nom de votre organisation et le nom de votre compte Snowflake Open Catalog, séparés par un trait d’union.Par exemple :
ABCDEFG-MYACCOUNT1.Pour récupérer ces valeurs dans ce format, consultez :ref:
label-retrieve_org_account_name_external_oauth.
{Catalogname}est le nom d’un catalogue dans Open Catalog auquel vous souhaitez accorder des privilèges.
{catalogRoleName}est le nom du rôle de catalogue sur lequel vous souhaitez accorder des privilèges. Par exemple, TableReader.
<service_admin_access_token>est le :ref:jeton d’accès d’administrateur de service que vous avez généré <label-generate_service_admin_access_token_external_oauth>.
CATALOG_MANAGE_CONTENTest le nom du privilège dans Open Catalog avec les privilèges d’administrateur de catalogue.
Consultez Privilèges <https://github.com/Snowflake-Labs/polaris-cli-opencatalog-demo?tab=readme-ov-file#privileges>_ dans Snowflake Labs. Comme décrit dans les instructions, assurez-vous d’accorder le privilège CATALOG_MANAGE_CONTENT au rôle de catalogue.
Consultez :ref:Accorder des privilèges de catalogue sur un rôle de catalogue <label-grant_catalog_privileges_catalog_role> et sélectionnez le privilège CATALOG_MANAGE_CONTENT.
Accorder le rôle de catalogue à un rôle personnalisé¶
Important
Les rôles personnalisés sont sensibles à la casse. Vous devez spécifier un rôle personnalisé avec toutes les lettres en majuscules, même si vous le créez avec des lettres minuscules ou des lettres minuscules et majuscules.
Exécutez la commande suivante :
curl -X PUT \ "https://<your_org_name>-<your_open_catalogaccount_name>.snowflakecomputing.com/polaris/api/management/v1/principal-roles/{customRoleName}/catalog-roles/{catalogName}" \ -H "Authorization: Bearer <service_admin_access_token>" \ -H "Content-Type: application/json" \ -H "Accept: application/json" \ -d '{"catalogRole": {"name": "<catalog_role_name>", "properties": {}, "entityVersion": 1}}'
- Où :
<your_org_name>-<your_open_catalogaccount_name>est le nom de votre organisation et le nom de votre compte Snowflake Open Catalog, séparés par un trait d’union.Par exemple :
ABCDEFG-MYACCOUNT1.Pour récupérer ces valeurs dans ce format, consultez :ref:
label-retrieve_org_account_name_external_oauth.
{customRoleName}est le nom du rôle personnalisé que vous souhaitez accorder avec le rôle de catalogue qui dispose des privilèges d’administrateur de catalogue. Par exemple, OPEN_CATALOG_ADMIN.
{catalogName}est le nom d’un catalogue dans Open Catalog auquel vous souhaitez accorder des privilèges d’administrateur de catalogue.
<catalog_role_name>est le nom du rôle de catalogue d’un catalogue, auquel sont accordés des privilèges d’administrateur de catalogue. Par exemple : CatalogAdmin.
<service_admin_access_token>est le :ref:jeton d’accès d’administrateur de service que vous avez généré <label-generate_service_admin_access_token_external_oauth>.
Consultez Attributions <https://github.com/Snowflake-Labs/polaris-cli-opencatalog-demo?tab=readme-ov-file#grants>_ dans Snowflake Labs.
Voir :doc:/user-guide/opencatalog/secure-catalogs. Ces instructions décrivent comment accorder un rôle de catalogue à un rôle principal, mais le processus est le même. Au lieu de sélectionner un rôle principal dans la liste, sélectionnez le rôle personnalisé que vous souhaitez accorder avec le rôle de catalogue qui possède le privilège CATALOG_MANAGE_CONTENT.
Si nécessaire, répétez cette étape pour accorder au rôle personnalisé des privilèges d’administrateur de catalogue pour d’autres catalogues.
Accorder un rôle de catalogue avec un ensemble de privilèges spécifié au rôle personnalisé¶
Le workflow est le suivant :
[Créer un rôle de catalogue] (#create-a-catalog-role).
[Accorder des privilèges au rôle de catalogue] (#grant-privileges-to-the-catalog-role). Ces privilèges permettent au principal de service d’effectuer des actions dans Open Catalog.
[Accorder le rôle de catalogue à un rôle personnalisé] (#grant-the-catalog-role-to-a-custom-role).
Créer un rôle de catalogue¶
Dans cette section, vous créez un rôle de catalogue. Pour plus d’informations sur les rôles de catalogue, voir Rôle de catalogue.
Exécutez la commande suivante pour créer un rôle de catalogue dans le catalogue que vous spécifiez :
curl -X POST \ "https://<your_org_name>-<your_open_catalogaccount_name>.snowflakecomputing.com/polaris/api/management/v1/catalogs/{catalogName}/catalog-roles" \ -H "Authorization: Bearer <service_admin_access_token>" \ -H "Content-Type: application/json" \ -H "Accept: application/json" \ -d '{ "name": "<catalog_role_name>" }'
- Où :
<your_org_name>-<your_open_catalogaccount_name>est le nom de votre organisation et le nom de votre compte Snowflake Open Catalog, séparés par un trait d’union.Par exemple :
ABCDEFG-MYACCOUNT1.Pour récupérer ces valeurs dans ce format, consultez :ref:
label-retrieve_org_account_name_external_oauth.
{Catalogname}est le nom du catalogue dans Open Catalog dans lequel vous souhaitez créer un rôle de catalogue.
<service_admin_access_token>est le :ref:jeton d’accès d’administrateur de service que vous avez généré <label-generate_service_admin_access_token_external_oauth>.Pour
<catalog_role_name>, spécifiez un nom pour le rôle de catalogue. Par exemple : TableReader.
Consultez Catalogue <https://github.com/Snowflake-Labs/polaris-cli-opencatalog-demo?tab=readme-ov-file#catalog-1>_ dans Snowflake Labs.
Voir :doc:/user-guide/opencatalog/create-catalog-role.
Accorder des privilèges au rôle de catalogue¶
Vous pouvez accorder des privilèges à l’ensemble du catalogue ou à un espace de noms ou une table du catalogue :
[Accorder des privilèges de catalogue sur le rôle de catalogue] (#grant-catalog-privileges-on-the-catalog-role)
[Accorder des privilèges d’espace de noms sur le rôle de catalogue] (#grant-namespace-privileges-on-the-catalog-role)
[Accorder des privilèges de table sur le rôle de catalogue] (#grant-table-privileges-on-the-catalog-role)
Accorder des privilèges de catalogue sur le rôle de catalogue¶
Exécutez la commande suivante :
curl -X PUT \ "https://<your_org_name>-<your_open_catalogaccount_name>.snowflakecomputing.com/polaris/api/management/v1/catalogs/{catalogName}/catalog-roles/{catalogRoleName}/grants" \ -H "Authorization: Bearer <service_admin_access_token>" \ -H "Content-Type: application/json" \ -H "Accept: application/json" \ -d '{"grant": {"type": "catalog", "privilege": "<privilege_name>"}}'
- Où :
<your_org_name>-<your_open_catalogaccount_name>est le nom de votre organisation et le nom de votre compte Snowflake Open Catalog, séparés par un trait d’union.Par exemple :
ABCDEFG-MYACCOUNT1.Pour récupérer ces valeurs dans ce format, consultez :ref:
label-retrieve_org_account_name_external_oauth.
{Catalogname}est le nom d’un catalogue dans Open Catalog auquel vous souhaitez accorder des privilèges.
{catalogRoleName}est le nom du rôle de catalogue sur lequel vous souhaitez accorder des privilèges. Par exemple, TableReader.
<service_admin_access_token>est le :ref:jeton d’accès d’administrateur de service que vous avez généré <label-generate_service_admin_access_token_external_oauth>.
<privilege_name>est le nom du privilège que vous souhaitez accorder au rôle de catalogue. Pour voir la liste des privilèges disponibles, consultezPrivilèges de contrôle d’accès <https://other-docs.snowflake.com/en/opencatalog/access-control#access-control-privileges>_.
Consultez Privilèges <https://github.com/Snowflake-Labs/polaris-cli-opencatalog-demo?tab=readme-ov-file#privileges>_ dans Snowflake Labs.
Note
L’exemple dans Snowflake Labs accorde le privilège CATALOG_MANAGE_CONTENT, qui accorde des privilèges d’administrateur de catalogue pour le catalogue. Toutefois, pour obtenir la liste des autres privilèges disponibles, consultez Privilèges de contrôle d’accès <https://other-docs.snowflake.com/en/opencatalog/access-control#access-control-privileges>_ dans la documentation Open Catalog.
Consultez :ref:Accorder des privilèges de catalogue sur un rôle de catalogue <label-grant_catalog_privileges_catalog_role>.
Accorder des privilèges d’espace de noms sur le rôle de catalogue¶
Exécutez la commande suivante :
curl -X PUT \ "https://<your_org_name>-<your_open_catalogaccount_name>.snowflakecomputing.com/polaris/api/management/v1/catalogs/{catalogName}/catalog-roles/{catalogRoleName}/grants" \ -H "Authorization: Bearer <service_admin_access_token>" \ -H "Content-Type: application/json" \ -H "Accept: application/json" \ -d '{"grant": {"type": "namespace", "namespace": ["<namespace_name>"], "privilege": "<privilege_name>"}}'
- Où :
<your_org_name>-<your_open_catalogaccount_name>est le nom de votre organisation et le nom de votre compte Snowflake Open Catalog, séparés par un trait d’union.Par exemple :
ABCDEFG-MYACCOUNT1.Pour récupérer ces valeurs dans ce format, consultez :ref:
label-retrieve_org_account_name_external_oauth.
{Catalogname}est le nom d’un catalogue dans Open Catalog auquel vous souhaitez accorder des privilèges.
{catalogRoleName}est le nom du rôle de catalogue sur lequel vous souhaitez accorder des privilèges. Par exemple, TableReader.
<service_admin_access_token>est le :ref:jeton d’accès d’administrateur de service que vous avez généré <label-generate_service_admin_access_token_external_oauth>.
<namespace_name>is the name of the namespace you want to grant privileges to. To grant privileges to a nested namespace, specify it, along with each parent namespace, separated by a comma. For example:« ns1 », « ns1a ».
<privilege_name>est le nom du privilège d’espace de noms que vous souhaitez accorder au rôle de catalogue. Pour voir la liste des privilèges disponibles, consultezPrivilèges de contrôle d’accès <https://other-docs.snowflake.com/en/opencatalog/access-control#access-control-privileges>_.
Consultez Privilèges <https://github.com/Snowflake-Labs/polaris-cli-opencatalog-demo?tab=readme-ov-file#privileges>_ dans Snowflake Labs.
Note
L’exemple dans Snowflake Labs accorde le privilège CATALOG_MANAGE_CONTENT, qui accorde des privilèges d’administrateur de catalogue pour le catalogue. Toutefois, pour obtenir la liste des autres privilèges disponibles, consultez Privilèges de contrôle d’accès <https://other-docs.snowflake.com/en/opencatalog/access-control#access-control-privileges>_ dans la documentation Open Catalog.
Consultez :ref:Accorder des privilèges d’espace de noms sur un rôle de catalogue <label-grant_namespace_privileges_catalog_role>.
Accorder des privilèges de table sur le rôle de catalogue¶
Exécutez la commande suivante :
curl -X PUT \ "https://<your_org_name>-<your_open_catalogaccount_name>.snowflakecomputing.com/polaris/api/management/v1/catalogs/{catalogName}/catalog-roles/{catalogRoleName}/grants" \ -H "Authorization: Bearer <service_admin_access_token>" \ -H "Content-Type: application/json" \ -H "Accept: application/json" \ -d '{"grant": {"type": "table", "namespace": ["<namespace_name>"], "tableName": "<table_name>", "privilege": "<privilege_name>"}}'
- Où :
<your_org_name>-<your_open_catalogaccount_name>est le nom de votre organisation et le nom de votre compte Snowflake Open Catalog, séparés par un trait d’union.Par exemple :
ABCDEFG-MYACCOUNT1.Pour récupérer ces valeurs dans ce format, consultez :ref:
label-retrieve_org_account_name_external_oauth.
{Catalogname}est le nom d’un catalogue dans Open Catalog auquel vous souhaitez accorder des privilèges.
{catalogRoleName}est le nom du rôle de catalogue sur lequel vous souhaitez accorder des privilèges. Par exemple, TableReader.
<service_admin_access_token>est le :ref:jeton d’accès d’administrateur de service que vous avez généré <label-generate_service_admin_access_token_external_oauth>.
<namespace_name>is the name of the namespace whose table you want to grant privileges to. To grant privileges on a table located under a nested namespace, specify the nested namespace, along with each parent namespace, separated by a comma. For example:« ns1 », « ns1a ».
<table_name>est le nom de la table à laquelle vous souhaitez accorder des privilèges.
<privilege_name>est le nom du privilège que vous souhaitez accorder au rôle de catalogue. Pour voir la liste des privilèges disponibles, consultezPrivilèges de contrôle d’accès <https://other-docs.snowflake.com/en/opencatalog/access-control#access-control-privileges>_.
Consultez Privilèges <https://github.com/Snowflake-Labs/polaris-cli-opencatalog-demo?tab=readme-ov-file#privileges>_ dans Snowflake Labs.
Note
L’exemple dans Snowflake Labs accorde le privilège CATALOG_MANAGE_CONTENT, qui accorde des privilèges d’administrateur de catalogue pour le catalogue. Toutefois, pour obtenir la liste des autres privilèges disponibles, consultez Privilèges de contrôle d’accès <https://other-docs.snowflake.com/en/opencatalog/access-control#access-control-privileges>_ dans la documentation Open Catalog.
Consultez :ref:Accorder des privilèges de table sur un rôle de catalogue <label-grant_table_privileges_catalog_role>.
Accorder le rôle de catalogue à un rôle personnalisé¶
Important
Les rôles personnalisés sont sensibles à la casse. Vous devez spécifier un rôle personnalisé avec toutes les lettres en majuscules, même si vous le créez avec des lettres minuscules ou des lettres minuscules et majuscules.
Exécutez la commande suivante :
curl -X PUT \ "https://<your_org_name>-<your_open_catalogaccount_name>.snowflakecomputing.com/polaris/api/management/v1/principal-roles/{customRoleName}/catalog-roles/{catalogName}" \ -H "Authorization: Bearer <service_admin_access_token>" \ -H "Content-Type: application/json" \ -H "Accept: application/json" \ -d '{"catalogRole": {"name": "<catalog_role_name>", "properties": {}, "entityVersion": 1}}'
- Où :
<your_org_name>-<your_open_catalogaccount_name>est le nom de votre organisation et le nom de votre compte Snowflake Open Catalog, séparés par un trait d’union.Par exemple :
ABCDEFG-MYACCOUNT1.Pour récupérer ces valeurs dans ce format, consultez :ref:
label-retrieve_org_account_name_external_oauth.
{customRoleName}est le nom du rôle personnalisé auquel vous souhaitez accorder le rôle de catalogue.
{catalogName}est le nom d’un catalogue dans Open Catalog où vous avez créé le rôle de catalogue sur lequel vous souhaitez accorder des privilèges.
<service_admin_access_token>est le :ref:jeton d’accès d’administrateur de service que vous avez généré <label-generate_service_admin_access_token_external_oauth>.
<catalog_role_name>est le nom du rôle de catalogue que vous souhaitez accorder au rôle personnalisé.
Consultez Attributions <https://github.com/Snowflake-Labs/polaris-cli-opencatalog-demo?tab=readme-ov-file#grants>_ dans Snowflake Labs.
Voir :doc:/user-guide/opencatalog/secure-catalogs. Ces instructions décrivent comment accorder un rôle de catalogue à un rôle principal, mais le processus est le même. Au lieu de sélectionner un rôle principal dans la liste, vous sélectionnez votre rôle personnalisé.
Si nécessaire, répétez ce workflow pour accorder des rôles de catalogue supplémentaires que vous créez au rôle personnalisé.
Étape 7 : Créer un principal de service¶
À cette étape, vous utilisez votre connexion Snowflake CLI pour créer un principal de service.
Note
Si la connexion CLI Snowflake par défaut que vous avez définie n’a pas le rôlePOLARIS_ACCOUNT_ADMIN attribué, vous devez inclure l’instruction suivante avec votre commande : USE ROLE POLARIS_ACCOUNT_ADMIN.
Pour se connecter à Open Catalog via l’OAuth externe, nous avons besoin d’un principal de service. Dans Open Catalog, les principaux de service sont des utilisateurs dont le paramètre TYPE est défini sur service. Nous utiliserons donc la commande CREATE USER pour créer un utilisateur de TYPE=service.
Pour créer un principal de service, exécutez la commande suivante :
snow sql -q "CREATE USER <user_name> LOGIN_NAME='<client_id>@clients' TYPE='service';"
Où :
Pour
<user_name>, indiquez un nom pour le principal de service.Pour
<client_id>, spécifiez l’ID client pour votre application. Pour trouver cette valeur, dans Auth0, accédez à Applications > Applications > [Nom de votre application] > Paramètres > Champ ID client.
Étape 8 : Accorder un rôle personnalisé au principal de service¶
Dans cette section, vous utilisez votre connexion Snowflake CLI pour accorder le rôle personnalisé à un ou plusieurs principaux de service. Par conséquent, vous conférez au principal de service les privilèges accordés à tout rôle de catalogue qui sont accordés au rôle personnalisé. Pour plus d’informations sur le modèle RBAC dans Open Catalog, consultez [Modèle RBAC] (./access-control.md#rbac-model).
Note
Si la connexion CLI Snowflake par défaut que vous avez définie n’a pas le rôlePOLARIS_ACCOUNT_ADMIN attribué, vous devez inclure l’instruction suivante avec votre commande : USE ROLE POLARIS_ACCOUNT_ADMIN.
Important
Les rôles personnalisés sont sensibles à la casse. Vous devez spécifier un rôle personnalisé avec toutes les lettres en majuscules, même si vous le créez avec des lettres minuscules ou des lettres minuscules et majuscules.
L’exemple suivant accorde le rôle personnalisé ENGINEER au principal de service service_principal1.
snow sql -q "GRANT ROLE ENGINEER to user service_principal1;"
Pour confirmer que le rôle est accordé au principal de service, exécutez :
snow sql -q "show grants to user service_principal1;"
Dans la réponse, vérifiez que le rôle personnalisé que vous avez créé (colonne role) est affecté au principal de service que vous avez créé (colonne grantee_name).
(Facultatif) Étape 9 : Générer le jeton d’accès¶
Dans cette section, vous pouvez générer un jeton d’accès, que vous pouvez utiliser pour vous connecter à Open Catalog avec l’OAuth externe. Toutefois, si vous vous connectez à l’aide de cette méthode, vous devez actualiser manuellement le jeton d’accès.
Vous pouvez également ignorer cette étape et, plus tard, [vous connecter à Open Catalog à l’aide d’un jeton d’actualisation automatique] (./external-oauth-connect.md#connect-with-open-catalog-by-using-automatic-refresh-token-preferred-method), qui est la méthode préférée.
Utilisez la commande curl suivante pour générer un jeton d’accès :
ACCESS_TOKEN=$(curl -X POST https://<Auth0_domain>/oauth/token --header 'content-type: application/x-www-form-urlencoded' --data grant_type=client_credentials --data client_id=<client_id> --data client_secret=<client_secret> --data-urlencode "audience=https://<your_org_name>-<your_open_catalog_account_name>.snowflakecomputing.com" --data "scope=SESSION:ROLE:<custom_role_name>" | jq -r '.access_token')
Où :
<Auth0_domain>est votre domaine Auth0. Pour trouver cette valeur, dans Auth0, accédez à Applications > Applications > [Nom de votre application] > Paramètres > Champ Domaine.<client_id>est l’ID client pour votre application dans Auth0. Pour trouver cette valeur, dans Auth0, accédez à Applications > Applications > [Nom de votre application] > Paramètres > Champ ID client.<client_secret>est le secret client pour votre application dans Auth0. Pour trouver cette valeur, dans Auth0, accédez à Applications > Applications > [Nom de votre application] > Paramètres > Champ Secret client.<audience>est l’identificateur de votre API. Pour trouver cette valeur, dans Auth0, accédez à Applications > APIs > Sélectionnez votre API > Paramètres >Champ Identificateur.
<your_org_name>-<your_open_catalog_account_name>est le nom de votre organisation et le nom de votre compte Snowflake Open Catalog, séparés par un trait d’union.Par exemple :
ABCDEFG-MYACCOUNT1.Pour récupérer ces valeurs dans ce format, consultez [Récupérer le nom de votre organisation et de votre compte] (#step-2-retrieve-your-organization-and-account-name).
<custom_role_name>is the name of a custom role you granted with catalog roles, such asENGINEER.
Étape 10 : Se connecter à Open Catalog avec l’OAuth externe¶
Dans cette section, vous connectez le principal de service à Open Catalog via l’OAuth externe. Pour obtenir des instructions, consultez [Se connecter à Snowflake Open Catalog avec l’OAuth externe] (./external-oauth-connect.md), qui comprend des instructions pour se connecter en utilisant un jeton d’accès ou l’actualisation automatique des jetons.