Configuração do OAuth externo no Snowflake Open Catalog¶
Este tópico descreve como configurar servidores externos que usam OAuth para acessar o Snowflake Open Catalog.
Nota
Este tópico mostra como usar Auth0 para configurar o OAuth externo para Open Catalog. No entanto, as etapas para configurá-lo no Okta ou no Microsoft Entra ID são semelhantes.
Pré-requisitos¶
Crie um ou mais catálogos em sua conta do Open Catalog.
Certifique-se de ter uma conta com um provedor de identidade (IdP). Para fins de demonstração, este tópico usa Auth0 como o IdP. Para criar uma conta do Auth0 para sua empresa ou organização, consulte https://auth0.com/. No entanto, o processo é semelhante para Okta e Microsoft Entra ID.
Você deve ter a CLI do Snowflake instalada em sua máquina.
Para configurar o OAuth externo, é necessário ter a função de administrador de serviço no Open Catalog. Para obter mais informações, consulte Funções de usuário. Na CLI do Snowflake, essa função é impressa como POLARIS_ACCOUNT_ADMIN.
Antes de começar¶
Para configurar o OAuth externo, você precisa criar uma conexão da CLI do Snowflake para Open Catalog.
Para criar essa conexão, você precisa do identificador completo da conta do Open Catalog, que inclui o nome da organização Snowflake e o nome da conta do Open Catalog. Por exemplo: <orgname><my-snowflake-open-catalog-account-name>.
Para encontrar o nome de sua organização Snowflake (
<orgname>), consulte :ref:label-account_name_find.Para encontrar o nome da sua conta do Snowflake Open Catalog (
<my-snowflake-open-catalog-account-name>), consulte :doc:/user-guide/opencatalog/find-account-name.
Criação de uma conexão da CLI do Snowflake¶
Criação de uma conexão da CLI do Snowflake para sua conta do Open Catalog para que você possa usá-lo para configurar o OAuth externo para a conta.
Etapa 1: Adição da conexão do Snowflake CLI para Snowflake Open Catalog¶
Add a connection with the following values. For all other parameters, press Enter to skip specifying a value for the parameter.
Parâmetros de configuração da conexão
Valor
Nome desta conexão
Especifique um nome para a conexão, por exemplo,
myopencatalogconnection.Nome da conta
Especifique o nome da sua organização Snowflake, seguido do nome da sua conta do Open Catalog, neste formato:
<orgname>-<my-snowflake-open-catalog-account-name>.Por exemplo,
ABCDEFG-MYACCOUNT1.Para encontrar esses nomes, consulte
Antes de começar_.Nome de usuário
Especifique seu nome de usuário do Open Catalog, por exemplo,
jsmith.Senha [opcional]
Esse parâmetro não é opcional quando você cria uma conexão para o Open Catalog.
Digite sua senha do Open Catalog, por exemplo,
MyPassword123456789.Função para a conexão [opcional]
Esse parâmetro não é opcional quando você cria uma conexão para o Open Catalog.
Você deve inserir
POLARIS_ACCOUNT_ADMIN.
Etapa 2: Teste da conexão do Snowflake CLI¶
Para testar a conexão do CLI, siga este exemplo, que testa a conexão para
myopencatalogconnection:snow connection test -c myopencatalogconnection
A resposta deve ser assim:
+------------------------------------------------------------------------------+ | 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 | +------------------------------------------------------------------------------+
Etapa 3: Configuração de uma conexão da CLI do Snowflake¶
Para garantir que a conexão que você sempre usa tenha a função POLARIS_ACCOUNT_ADMIN necessária, defina a conexão do Snowflake CLI que você criou para o Open Catalog como padrão. Para obter mais informações sobre a conexão padrão, consulte :ref:label-cli_set_default_connection.
Siga este exemplo, que define a conexão
myopencatalogconnectioncomo padrão:snow connection set-default myopencatalogconnection
Para confirmar se você está usando o usuário e a função corretos, execute o seguinte:
snow sql -q "Select current_user(); select current_role();"
A resposta deve retornar seu nome de usuário do Open Catalog e a CURRENT ROLE deve ser POLARIS_ACCOUNT_ADMIN.
+----------------+ | CURRENT_USER() | |----------------| | JSMITH | +----------------+ select current_role(); +-----------------------+ | CURRENT_ROLE() | |-----------------------| | POLARIS_ACCOUNT_ADMIN | +-----------------------+
Etapa 2: Recuperação do nome da sua conta e organização¶
Você precisa do nome da sua organização e do nome da conta do Snowflake Open Catalog, separados por um hífen, para tarefas como criar uma integração de segurança.
Para recuperar o nome da sua organização e o nome da conta do Snowflake Open Catalog neste formato, na CLI do Snowflake, execute o seguinte comando:
snow sql -q "SELECT CURRENT_ORGANIZATION_NAME() || '-' || CURRENT_ACCOUNT_NAME();"
Na resposta, copie os valores retornados e cole-os em um editor de texto para uso posterior. Por exemplo:
ABCDEFG-MYACCOUNT1.
Etapa 3: Criação de uma integração de segurança¶
Para criar uma integração de segurança, execute o comando CREATE SECURITY INTEGRATION usando uma conexão do Snowflake CLI.
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';"
Onde:
<Auth0_domain>é seu domínio Auth0. Para encontrar esse valor, em Auth0, navegue até Applications > Applications > [Nome do seu aplicativo] > Settings > campo Domain.<your_org_name>-<your_open_catalog_account_name>é o nome da sua organização e o nome da conta do Snowflake Open Catalog, separados por um hífen.Por exemplo:
ABCDEFG-MYACCOUNT1.Para recuperar esses valores nesse formato, consulte Recuperação do nome da sua organização e conta.
Etapa 4: Geração de seu token de acesso ao administrador de serviço¶
Para configurar o OAuth externo programaticamente, você precisa de um token de acesso de administrador de serviço. No entanto, você tem a opção de usar a UI do Open Catalog para executar algumas tarefas para configurar o OAuth externo.
Se você já gerou um token de acesso de administrador de serviço para si mesmo e ele ainda está ativo, pode pular esta etapa.
Para gerar seu token de acesso ao administrador de serviços, na CLI do Snowflake, execute o seguinte comando e copie o valor em um editor de texto:
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')
Onde:
<Auth0_domain>é seu domínio Auth0. Para encontrar esse valor, em Auth0, navegue até Applications > Applications > [Nome do seu aplicativo] > Settings > campo Domain.<client_id>é o do ID do cliente para seu aplicativo em Auth0 que você concede acesso ao privilégio POLARIS_ACCOUNT_ADMIN. Para encontrar esse valor, no Auth0, navegue até Applications > Applications > [Nome do seu aplicativo] > Settings > campo Client ID.<client_secret>é o segredo do cliente para seu aplicativo no Auth0 que você concede acesso ao privilégio POLARIS_ACCOUNT_ADMIN. Para encontrar esse valor, no Auth0, navegue até Applications > Applications > [Nome do seu aplicativo] > Settings > campo Client Secret.<audience>é o identificador de sua API. Para encontrar esse valor, no Auth0, navegue até Applications > APIs > selecione sua API > Settings > campo Identifier.<your_org_name>-<your_open_catalog_account_name>é o nome da sua organização e o nome da conta do Snowflake Open Catalog, separados por um hífen.Por exemplo:
ABCDEFG-MYACCOUNT1.Para recuperar esses valores nesse formato, consulte Recuperação do nome da sua organização e conta.
POLARIS_ACCOUNT_ADMINé o nome da função interna no Open Catalog que permite executar tarefas administrativas no Open Catalog, o que inclui a configuração do OAuth externo. Na UI do Open Catalog, essa função é chamada de função de administrador de serviço.
Etapa 5: Criação de uma função personalizada¶
Nesta etapa, você usa a conexão da CLI do Snowflake para criar uma função personalizada.
Crie uma função personalizada para que, mais tarde, você possa conceder funções de catálogo a ela e conceder a função personalizada a uma entidade de serviço, que concede privilégios à entidade de serviço. Para obter mais informações sobre funções personalizadas, consulte Função personalizada. Para obter mais informações sobre o modelo RBAC no Open Catalog, consulte Modelo RBAC.
Nota
Se a conexão padrão do Snowflake CLI que você definiu não tem a função POLARIS_ACCOUNT_ADMIN, inclua a seguinte instrução com o comando: USE ROLE POLARIS_ACCOUNT_ADMIN.
O exemplo a seguir cria uma função personalizada OPEN_CATALOG_ADMIN:
snow sql -q "create role OPEN_CATALOG_ADMIN;"
Etapa 6: Concessão de uma função de catálogo a uma função personalizada¶
Nesta seção, o usuário concede uma função de catálogo à função personalizada criada.
Depois de conceder uma função de catálogo à função personalizada, você concede a função personalizada a uma entidade de serviço para conceder à entidade de serviço quaisquer privilégios concedidos às funções de catálogo que são concedidos à função de entidade. Para obter mais informações sobre o modelo RBAC no Open Catalog, consulte Modelo RBAC.
Você pode conceder a função personalizada com uma função de catálogo que tenha privilégios de administrador de catálogo para o catálogo ou tenha um conjunto de privilégios para o catálogo que você especificar:
Se quiser conceder a uma entidade de serviço com privilégios de administrador de catálogo para um catálogo, conceda uma função de catálogo com privilégios de administrador de catálogo à função personalizada. Para obter informações sobre quais privilégios um administrador de catálogo tem, consulte Função de administrador de catálogo.
Se quiser conceder à entidade de serviço um conjunto de privilégios especificado, conceda uma função de catálogo com um conjunto de privilégios especificado por você à função personalizada. Por exemplo, escolha esta opção se quiser conceder uma função de catálogo catalog_reader, catalog_writer ou catalog_metadata_reader à função personalizada.
Conceda uma função de catálogo com privilégios de administrador de catálogo à função personalizada¶
Nesta seção, você concede uma função de catálogo com privilégios de administrador de catálogo à função personalizada. O fluxo de trabalho é o seguinte:
Criação de uma função de catálogo¶
Execute o seguinte comando para criar uma função de catálogo no catálogo especificado:
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>" }'
- Onde:
<your_org_name>-<your_open_catalogaccount_name>é o nome da sua organização e o nome da conta do Snowflake Open Catalog, separados por um hífen.Por exemplo:
ABCDEFG-MYACCOUNT1.Para recuperar esses valores nesse formato, consulte :ref:
label-retrieve_org_account_name_external_oauth.
{Catalogname}é o nome do catálogo no Open Catalog onde você deseja criar uma função de catálogo.
<service_admin_access_token>é o :ref:token de acesso de administrador de serviço que você gerou <label-generate_service_admin_access_token_external_oauth>.Para
<catalog_role_name>, especifique um nome para a função de catálogo. Por exemplo: CatalogAdmin.
Consulte o Catálogo <https://github.com/Snowflake-Labs/polaris-cli-opencatalog-demo?tab=readme-ov-file#catalog-1>_ no Snowflake Labs.
Consulte :doc:/user-guide/opencatalog/create-catalog-role.
Concessão de privilégios de administrador de catálogo à função de catálogo¶
Execute o seguinte comando:
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"}}'
- Onde:
<your_org_name>-<your_open_catalogaccount_name>é o nome da sua organização e o nome da conta do Snowflake Open Catalog, separados por um hífen.Por exemplo:
ABCDEFG-MYACCOUNT1.Para recuperar esses valores nesse formato, consulte :ref:
label-retrieve_org_account_name_external_oauth.
{Catalogname}é o nome de um catálogo no Open Catalog ao qual você deseja conceder privilégios.
{catalogRoleName}é o nome da função de catálogo à qual você deseja conceder privilégios. Por exemplo, TableReader.
<service_admin_access_token>é o :ref:token de acesso de administrador de serviço que você gerou <label-generate_service_admin_access_token_external_oauth>.
CATALOG_MANAGE_CONTENTé o nome do privilégio no Open Catalog com privilégios de administrador de catálogo.
Consulte Privilégios <https://github.com/Snowflake-Labs/polaris-cli-opencatalog-demo?tab=readme-ov-file#privileges>_ no Snowflake Labs. Como descrito nas instruções, certifique-se de conceder o privilégio CATALOG_MANAGE_CONTENT para a função de catálogo.
Consulte :ref:Concessão de privilégios de catálogo em uma função de catálogo <label-grant_catalog_privileges_catalog_role> e selecione o privilégio CATALOG_MANAGE_CONTENT.
Concessão da função de catálogo a uma função personalizada¶
Importante
As funções personalizadas diferenciam maiúsculas de minúsculas. Você deve especificar uma função personalizada com todas as letras maiúsculas, mesmo que você a crie com letras minúsculas ou letras minúsculas e maiúsculas.
Execute o seguinte comando:
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}}'
- Onde:
<your_org_name>-<your_open_catalogaccount_name>é o nome da sua organização e o nome da conta do Snowflake Open Catalog, separados por um hífen.Por exemplo:
ABCDEFG-MYACCOUNT1.Para recuperar esses valores nesse formato, consulte :ref:
label-retrieve_org_account_name_external_oauth.
{customRoleName}é o nome da função personalizada que você deseja conceder com a função de catálogo que tem privilégios de administrador de catálogo. Por exemplo, OPEN_CATALOG_ADMIN.
{catalogName}é o nome de um catálogo no Open Catalog ao qual você deseja conceder privilégios de administrador de catálogo.
<catalog_role_name>é o nome da função de catálogo para um catálogo que tem privilégios de administrador de catálogo concedidos a ele. Por exemplo: CatalogAdmin.
<service_admin_access_token>é o :ref:token de acesso de administrador de serviço que você gerou <label-generate_service_admin_access_token_external_oauth>.
Consulte Concessões <https://github.com/Snowflake-Labs/polaris-cli-opencatalog-demo?tab=readme-ov-file#grants>_ no Snowflake Labs.
Consulte :doc:/user-guide/opencatalog/secure-catalogs. Essas instruções descrevem como conceder uma função de catálogo a uma função principal, mas o processo é o mesmo. Em vez de selecionar uma função de entidade da lista, selecione sua função personalizada que deseja conceder com a função de catálogo que tem o privilégio CATALOG_MANAGE_CONTENT.
Se necessário, repita esta etapa para conceder à função personalizada privilégios de administrador de catálogo para outros catálogos.
Conceda uma função de catálogo com um conjunto de privilégios especificado por você para a função personalizada¶
O fluxo de trabalho é o seguinte:
Concessão de privilégios à função de catálogo. Esses privilégios permitem que a entidade de serviço execute ações no Open Catalog.
Criação de uma função de catálogo¶
Nesta seção, crie uma função de catálogo. Para obter mais informações sobre funções de catálogo, consulte Função de catálogo.
Execute o seguinte comando para criar uma função de catálogo no catálogo especificado:
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>" }'
- Onde:
<your_org_name>-<your_open_catalogaccount_name>é o nome da sua organização e o nome da conta do Snowflake Open Catalog, separados por um hífen.Por exemplo:
ABCDEFG-MYACCOUNT1.Para recuperar esses valores nesse formato, consulte :ref:
label-retrieve_org_account_name_external_oauth.
{Catalogname}é o nome do catálogo no Open Catalog onde você deseja criar uma função de catálogo.
<service_admin_access_token>é o :ref:token de acesso de administrador de serviço que você gerou <label-generate_service_admin_access_token_external_oauth>.Para
<catalog_role_name>, especifique um nome para a função de catálogo. Por exemplo: TableReader.
Consulte o Catálogo <https://github.com/Snowflake-Labs/polaris-cli-opencatalog-demo?tab=readme-ov-file#catalog-1>_ no Snowflake Labs.
Consulte :doc:/user-guide/opencatalog/create-catalog-role.
Concessão de privilégios à função de catálogo¶
Você pode conceder privilégios a todo o catálogo ou a um namespace ou tabela no catálogo:
Concessão de privilégios de catálogo para a função de catálogo¶
Execute o seguinte comando:
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>"}}'
- Onde:
<your_org_name>-<your_open_catalogaccount_name>é o nome da sua organização e o nome da conta do Snowflake Open Catalog, separados por um hífen.Por exemplo:
ABCDEFG-MYACCOUNT1.Para recuperar esses valores nesse formato, consulte :ref:
label-retrieve_org_account_name_external_oauth.
{Catalogname}é o nome de um catálogo no Open Catalog ao qual você deseja conceder privilégios.
{catalogRoleName}é o nome da função de catálogo à qual você deseja conceder privilégios. Por exemplo, TableReader.
<service_admin_access_token>é o :ref:token de acesso de administrador de serviço que você gerou <label-generate_service_admin_access_token_external_oauth>.
<privilege_name>é o nome do privilégio que você deseja conceder à função de catálogo. Para obter a lista de privilégios disponíveis, consultePrivilégios de controle de acesso <https://other-docs.snowflake.com/en/opencatalog/access-control#access-control-privileges>_.
Consulte Privilégios <https://github.com/Snowflake-Labs/polaris-cli-opencatalog-demo?tab=readme-ov-file#privileges>_ no Snowflake Labs.
Nota
O exemplo no Snowflake Labs concede ao privilégio CATALOG_MANAGE_CONTENT, que concede privilégios de administrador de catálogo para o catálogo. Entretanto, para obter a lista de outros privilégios disponíveis, consulte Privilégios de controle de acesso <https://other-docs.snowflake.com/en/opencatalog/access-control#access-control-privileges>_ na documentação do Open Catalog.
Consulte :ref:Concessão de privilégios de catálogo em uma função de catálogo <label-grant_catalog_privileges_catalog_role>.
Concessão de privilégios de namespace na função de catálogo¶
Execute o seguinte comando:
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>"}}'
- Onde:
<your_org_name>-<your_open_catalogaccount_name>é o nome da sua organização e o nome da conta do Snowflake Open Catalog, separados por um hífen.Por exemplo:
ABCDEFG-MYACCOUNT1.Para recuperar esses valores nesse formato, consulte :ref:
label-retrieve_org_account_name_external_oauth.
{Catalogname}é o nome de um catálogo no Open Catalog ao qual você deseja conceder privilégios.
{catalogRoleName}é o nome da função de catálogo à qual você deseja conceder privilégios. Por exemplo, TableReader.
<service_admin_access_token>é o :ref:token de acesso de administrador de serviço que você gerou <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>é o nome do privilégio de namespace que você deseja conceder à função de catálogo. Para obter a lista de privilégios disponíveis, consultePrivilégios de controle de acesso <https://other-docs.snowflake.com/en/opencatalog/access-control#access-control-privileges>_.
Consulte Privilégios <https://github.com/Snowflake-Labs/polaris-cli-opencatalog-demo?tab=readme-ov-file#privileges>_ no Snowflake Labs.
Nota
O exemplo no Snowflake Labs concede ao privilégio CATALOG_MANAGE_CONTENT, que concede privilégios de administrador de catálogo para o catálogo. Entretanto, para obter a lista de outros privilégios disponíveis, consulte Privilégios de controle de acesso <https://other-docs.snowflake.com/en/opencatalog/access-control#access-control-privileges>_ na documentação do Open Catalog.
Consulte :ref:Concessão de privilégios de namespace em uma função de catálogo <label-grant_namespace_privileges_catalog_role>.
Concessão de privilégios de tabela na função de catálogo¶
Execute o seguinte comando:
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>"}}'
- Onde:
<your_org_name>-<your_open_catalogaccount_name>é o nome da sua organização e o nome da conta do Snowflake Open Catalog, separados por um hífen.Por exemplo:
ABCDEFG-MYACCOUNT1.Para recuperar esses valores nesse formato, consulte :ref:
label-retrieve_org_account_name_external_oauth.
{Catalogname}é o nome de um catálogo no Open Catalog ao qual você deseja conceder privilégios.
{catalogRoleName}é o nome da função de catálogo à qual você deseja conceder privilégios. Por exemplo, TableReader.
<service_admin_access_token>é o :ref:token de acesso de administrador de serviço que você gerou <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>é o nome da tabela à qual você deseja conceder privilégios.
<privilege_name>é o nome do privilégio que você deseja conceder à função de catálogo. Para obter a lista de privilégios disponíveis, consultePrivilégios de controle de acesso <https://other-docs.snowflake.com/en/opencatalog/access-control#access-control-privileges>_.
Consulte Privilégios <https://github.com/Snowflake-Labs/polaris-cli-opencatalog-demo?tab=readme-ov-file#privileges>_ no Snowflake Labs.
Nota
O exemplo no Snowflake Labs concede ao privilégio CATALOG_MANAGE_CONTENT, que concede privilégios de administrador de catálogo para o catálogo. Entretanto, para obter a lista de outros privilégios disponíveis, consulte Privilégios de controle de acesso <https://other-docs.snowflake.com/en/opencatalog/access-control#access-control-privileges>_ na documentação do Open Catalog.
Consulte :ref:Concessão de privilégios de tabela em uma função de catálogo <label-grant_table_privileges_catalog_role>.
Concessão da função de catálogo a uma função personalizada¶
Importante
As funções personalizadas diferenciam maiúsculas de minúsculas. Você deve especificar uma função personalizada com todas as letras maiúsculas, mesmo que você a crie com letras minúsculas ou letras minúsculas e maiúsculas.
Execute o seguinte comando:
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}}'
- Onde:
<your_org_name>-<your_open_catalogaccount_name>é o nome da sua organização e o nome da conta do Snowflake Open Catalog, separados por um hífen.Por exemplo:
ABCDEFG-MYACCOUNT1.Para recuperar esses valores nesse formato, consulte :ref:
label-retrieve_org_account_name_external_oauth.
{customRoleName}é o nome da função personalizada a qual você deseja conceder a função de catálogo.
{catalogName}é o nome de um catálogo no Open Catalog em que você criou a função de catálogo à qual deseja conceder privilégios.
<service_admin_access_token>é o :ref:token de acesso de administrador de serviço que você gerou <label-generate_service_admin_access_token_external_oauth>.
<catalog_role_name>é o nome da função de catálogo que você deseja conceder à função personalizada.
Consulte Concessões <https://github.com/Snowflake-Labs/polaris-cli-opencatalog-demo?tab=readme-ov-file#grants>_ no Snowflake Labs.
Consulte :doc:/user-guide/opencatalog/secure-catalogs. Essas instruções descrevem como conceder uma função de catálogo a uma função principal, mas o processo é o mesmo. Em vez de selecionar uma função principal da lista, você seleciona sua função personalizada.
Se necessário, repita este fluxo de trabalho para conceder funções de catálogo adicionais que você criar para a função personalizada.
Etapa 7: Criação de uma entidade de serviço¶
Na etapa, você usa a CLI do Snowflake para criar uma entidade de serviço.
Nota
Se a conexão padrão do Snowflake CLI que você definiu não tem a função POLARIS_ACCOUNT_ADMIN, inclua a seguinte instrução com o comando: USE ROLE POLARIS_ACCOUNT_ADMIN.
Para conectar-se ao Open Catalog por meio do OAuth externo, precisamos de uma entidade de serviço. No Open Catalog, as entidades de serviço são usuários com o parâmetro TYPE definido como service. Então usaremos o comando CREATE USER para criar um usuário de TYPE=service.
Para criar uma entidade de serviço, execute o seguinte comando:
snow sql -q "CREATE USER <user_name> LOGIN_NAME='<client_id>@clients' TYPE='service';"
Onde:
Para
<user_name>, especifique um nome para a entidade de serviço.Para
<client_id>, especifique o do ID de cliente do seu aplicativo. Para encontrar esse valor, no Auth0, navegue até Applications > Applications > [Nome do seu aplicativo] > Settings > campo Client ID.
Etapa 8: Conceda uma função personalizada à entidade de serviço¶
Nesta seção, você usa sua conexão da CLI do Snowflake para conceder a função personalizada a uma ou mais entidades de serviço. Como resultado, você concede à entidade de serviço os privilégios concedidos a toda(s) função(ões) de catálogo concedida(s) à função personalizada. Para obter mais informações sobre o modelo RBAC no Open Catalog, consulte modelo RBAC.
Nota
Se a conexão padrão do Snowflake CLI que você definiu não tem a função POLARIS_ACCOUNT_ADMIN, inclua a seguinte instrução com o comando: USE ROLE POLARIS_ACCOUNT_ADMIN.
Importante
As funções personalizadas diferenciam maiúsculas de minúsculas. Você deve especificar uma função personalizada com todas as letras maiúsculas, mesmo que você a crie com letras minúsculas ou letras minúsculas e maiúsculas.
O exemplo a seguir concede a função personalizada ENGINEER para a entidade de serviço service_principal1.
snow sql -q "GRANT ROLE ENGINEER to user service_principal1;"
Para validar se a função foi concedida à entidade de serviço, execute:
snow sql -q "show grants to user service_principal1;"
Na resposta, verifique se a função personalizada que você criou (colunarole) está atribuída à entidade de serviço que você criou (colunagrantee_name).
(Opcional) Etapa 9: Gere o token de acesso¶
Nesta seção, você pode gerar um token de acesso, que pode ser usado para conectar-se ao Open Catalog com OAuth externo. No entanto, se você se conectar usando esse método, deverá atualizar manualmente o token de acesso.
Como alternativa, você pode pular esta etapa e mais tarde, conectar-se ao Open Catalog usando um token de atualização automática, que é o método preferido.
Use o seguinte comando curl para gerar um token de acesso:
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')
Onde:
<Auth0_domain>é seu domínio Auth0. Para encontrar esse valor, em Auth0, navegue até Applications > Applications > [Nome do seu aplicativo] > Settings > campo Domain.<client_id>é o do ID do cliente do seu aplicativo em Auth0. Para encontrar esse valor, no Auth0, navegue até Applications > Applications > [Nome do seu aplicativo] > Settings > campo Client ID.<client_secret>é o segredo do cliente para seu aplicativo no Auth0. Para encontrar este valor, em Auth0, navegue até Applications > Applications > [Nome do seu aplicativo] > Settings > campo Client Secret.<audience>é o identificador de sua API. Para encontrar este valor, em Auth0, navegue até Applications > APIs > selecione sua API > SettingsCampo Identifier.
<your_org_name>-<your_open_catalog_account_name>é o nome da sua organização e o nome da conta do Snowflake Open Catalog, separados por um hífen.Por exemplo:
ABCDEFG-MYACCOUNT1.Para recuperar esses valores nesse formato, consulte Recuperação do nome da sua organização e conta.
<custom_role_name>is the name of a custom role you granted with catalog roles, such asENGINEER.
Etapa 10: Conecte ao Open Catalog com OAuth externo¶
Nesta seção, você conecta a entidade de serviço ao Open Catalog por meio do OAuth externo. Para obter instruções, consulte Conexão ao Snowflake Open Catalog com OAuth externo, que inclui instruções para conexão usando um token de acesso ou atualização automática do token.