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
    
    Copy

    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                                                   |
    +------------------------------------------------------------------------------+
    
    Copy

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.

  1. Siga este exemplo, que define a conexão myopencatalogconnection como padrão:

    snow connection set-default myopencatalogconnection
    
    Copy
  2. 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();"
    
    Copy

    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 |
    +-----------------------+
    
    Copy

Etapa 1: Configuração do Auth0 como um servidor de autorização OAuth externo

Nesta seção, você configura o Auth0 como um servidor de autorização OAuth externo. No entanto, as etapas para configurar o do Microsoft Entra ID ou Okta como um servidor de autorização OAuth externo são semelhantes.

Nota

Para criar uma conta do Auth0 para sua empresa ou organização, consulte https://auth0.com/.

Definição de uma API

Defina uma API para que você possa atribuir permissões a ela.

  1. Faça login no console do Auth0.

  2. No painel esquerdo, selecione Aplicativos > APIs.

  3. Selecione + Criar API.

  4. Digite um Nome e Identificador e aceite as configurações padrão.

  5. Selecione Criar.

Adição de permissões à API

Adicione permissões à API para que você possa concedê-las ao cliente.

Esse cliente será o de entidade no Open Catalog e a permissão que você designar a ele será uma função de entidade no Open Catalog.

  1. Faça login no console do Auth0.

  2. No painel esquerdo, selecione Aplicativos > APIs.

  3. Selecione sua API.

  4. Na guia Permissões, adicione as permissões:

    1. Use os campos Permissão e Descrição para adicionar permissões para sua API. Use o formato SESSION:ROLE:<nome_da_função_personalizada>. Por exemplo: SESSION:ROLE:ENGINEER.

      Importante

      Para gerar seu token de acesso de administrador de serviço , você deve adicionar a permissão SESSION:ROLE:POLARIS_ACCOUNT_ADMIN, que permite atribuir a função de administrador de serviço no Open Catalog com permissões para a API.

    2. Selecione + Add.

Criação de um aplicativo

Crie aplicativos para poder conceder a eles as permissões para a API que você criou.

  1. Faça login no console do Auth0.

  2. No painel esquerdo, selecione Aplicativos > Aplicativos.

  3. Selecione + Criar aplicativo e crie um aplicativo. Repita esta etapa para criar cada aplicativo necessário para a configuração do OAuth externo.

    Importante

    Certifique-se de criar um aplicativo para gerar o token de acesso do administrador de serviço. Mais tarde, você concederá a permissão SESSION:ROLE:POLARIS_ACCOUNT_ADMIN para ele.

Atribuição de permissões à API

Siga estes passos para selecionar as permissões que você deseja conceder ao cliente:

  1. Faça login no console do Auth0.

  2. No painel esquerdo, selecione Aplicativos > Aplicativos.

  3. Selecione o aplicativo que você criou.

  4. Selecione a aba APIs.

  5. Se necessário, coloque a opção Authorized de sua API em «On».

  6. Selecione o ícone Expand da sua API.

  7. No campo Permissions, marque a caixa de seleção de cada permissão que você deseja atribuir à API.

  8. Selecione Update.

    Repita essas etapas para cada aplicativo criado.

Importante

Certifique-se de selecionar o aplicativo criado para gerar o token de acesso do administrador de serviço e atribuir a permissão SESSION:ROLE:POLARIS_ACCOUNT_ADMIN à API. Caso contrário, você não poderá gerar o token de acesso do administrador de serviço.

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.

  1. 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();"
    
    Copy
  2. 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';"
Copy

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')
Copy

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;"
Copy

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:

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:

  1. Crie uma função de catálogo.

  2. Conceda privilégios de administrador de catálogo à função de catálogo.

  3. Conceda a função de catálogo a uma função personalizada.

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>"
   }'
Copy
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.

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"}}'
Copy
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.

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}}'
Copy
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>.

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:

  1. Crie uma função de catálogo.

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

  3. Conceda a função de catálogo a uma função personalizada.

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>"
   }'
Copy
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.

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>"}}'
Copy
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, consulte Privilégios de controle de acesso <https://other-docs.snowflake.com/en/opencatalog/access-control#access-control-privileges>_.

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>"}}'
Copy
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, consulte Privilégios de controle de acesso <https://other-docs.snowflake.com/en/opencatalog/access-control#access-control-privileges>_.

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>"}}'
Copy
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, consulte Privilégios de controle de acesso <https://other-docs.snowflake.com/en/opencatalog/access-control#access-control-privileges>_.

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}}'
Copy
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.

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';"
Copy

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;"
Copy

Para validar se a função foi concedida à entidade de serviço, execute:

snow sql -q "show grants to user service_principal1;" 
Copy

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')
Copy

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

  • <custom_role_name> is the name of a custom role you granted with catalog roles, such as ENGINEER.

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.