Configuração da autenticação de par de chaves no Snowflake Open Catalog¶
Este tópico descreve como configurar a autenticação de par de chaves no Snowflake Open Catalog. Esta configuração permite que um usuário de autenticação de par de chaves se conecte ao Open Catalog programaticamente por meio de um token de acesso. Para simplificar, a menos que especificado de outra forma, o restante deste tópico usa o termo usuário para se referir a um usuário de autenticação de par de chaves.
Com a autenticação de par de chaves, você pode permitir que um usuário tenha acesso programático ao Open Catalog para várias funções personalizadas com permissões nos catálogos apropriados. Por exemplo:
Função personalizada ANALYST: Só pode acessar o catalogA.
Função personalizada ENGINEER: Só pode acessar o catalogB.
Pré-requisitos¶
Crie um catálogo em sua conta do Open Catalog.
Você deve ter a CLI do Snowflake instalada em sua máquina. Além disso, você deve criar uma conexão da CLI do Snowflake para Open Catalog. Para criar esta conexão, consulte Criação de uma conexão da CLI do Snowflake para Open Catalog abaixo.
Para configurar a autenticação de par de chaves, é 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.
Você deve ter o SnowSQL instalado em sua máquina.
Você precisa de um token de acesso de administrador de serviço. Você precisa desse token para configurar a autenticação de par de chaves programaticamente e é necessário para conceder a um usuário privilégios de administrador de catálogo. Para gerar este token, consulte Geração de seu token de acesso de administrador de serviço abaixo.
Antes de começar¶
Para configurar a autenticação por par de chaves, você precisa de uma conexão da CLI do Snowflake para Open Catalog.
Para criar essa conexão, você precisa do seu identificador completo da conta do Open Catalog , que inclui o nome da sua organização do Snowflake e o nome da sua conta do Open Catalog. Por exemplo: <orgname>.<my-snowflake-open-catalog-account-name>.
Para encontrar o nome de sua organização do 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 conexão do Snowflake CLI para Open Catalog¶
Criação de uma conexão da CLI do Snowflake para sua conta do Open Catalog para que você possa usá-la para configurar a autenticação do par de chaves para a conta.
Etapa 1: Adição da conexão do Snowflake CLI para Snowflake Open Catalog¶
Adicione uma conexão para a conta do Snowflake Open Catalog onde você deseja configurar a autenticação do par de chaves.
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 padrão 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 | +-----------------------+
Geração de seu token de acesso ao administrador de serviço¶
Para configurar a autenticação de par de chaves 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 realizar algumas tarefas para configurar a autenticação do par de chaves.
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.
As etapas para gerar um token de acesso de administrador de serviço são as seguintes:
Geração de uma chave privada e pública¶
Esta seção descreve como gerar uma chave privada e pública.
Para gerar uma chave privada, use o seguinte comando:
openssl genrsa 2048 | openssl pkcs8 -topk8 -inform PEM -out rsa_key.p8 -nocrypt
Para gerar uma chave pública, use o seguinte comando:
openssl rsa -in rsa_key.p8 -pubout -out rsa_key.pub
Atribuição da chave público a si mesmo¶
Como usar sua conexão da CLI do Snowflake para atribuir a chave público a si mesmo.
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.
Atribuir a chave pública a si mesmo, execute:
snow sql -q "alter user <your_username> set RSA_PUBLIC_KEY='<your_public_key>';"
Onde:
<your_username>é seu nome de usuário do Open Catalog, que você usa para fazer login na UI do Open Catalog.
Nota
Se você precisar recuperar sua chave pública, execute:
cat rsa_key.pub.Valide se o usuário tem a chave pública (
RSA_PUBLIC_KEY) definida e a impressão digital da chave pública RSA do usuário (RSA_PUBLIC_KEY_FP) definida:snow sql -q "desc user <your_username>;"
Onde:
<your_username>é seu nome de usuário do Open Catalog, que você usa para fazer login na UI do Open Catalog.
Geração de um JSON Web Token¶
Nesta seção, você gera um JSON Web Token (JWT), necessário para gerar um token de acesso.
Para usar SnowSQL para gerar um JWT, execute:
snowsql --private-key-path rsa_key.p8 --generate-jwt -h <your_org_name>-<your_open_catalogaccount_name>.snowflakecomputing.com -a <account-identifier> -u <your_user_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 Recuperação do nome da sua organização e conta.
<account-identifier>is the account identifier for your Snowflake Open Catalog account. To retrieve it, refer to your Open Catalog account URL. For example,abc12345inhttps://app.snowflake.com/us-west-2/abc12345/#/.<your_user_name>é seu nome de usuário do Open Catalog.
Se você o criptografou, digite a senha ou selecione Enter para continuar. Pode levar alguns segundos para você receber seu JWT.
Geração de um token de acesso de administrador de serviço¶
Nesta seção, você gera um token de acesso de administrador de serviço, que é usado para configurar a autenticação de par de chaves de forma programática.
Para gerar seu token de acesso de administrador de serviço, execute o seguinte comando e copie o valor em um editor de texto:
curl -i -X POST \ -H "Content-Type: application/x-www-form-urlencoded" \ -H "Accept: application/json" \ --data-urlencode "scope=session:role:POLARIS_ACCOUNT_ADMIN" \ --data-urlencode "grant_type=client_credentials" \ --data-urlencode "client_secret=<your_JWT>" \ "https://<your_org_name>-<your_open_catalogaccount_name>.snowflakecomputing.com/polaris/api/catalog/v1/oauth/tokens"
Onde:
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 da autenticação de par de chaves. Na UI do Open Catalog, essa função é chamada de função de administrador de serviço.<your_JWT>é o JWT que você gerou na etapa anterior.<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 Recuperação do nome da sua organização e conta.
Etapa 1: 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, posteriormente, você possa conceder funções de catálogo a ela e conceder a função personalizada a um usuário, o que concede privilégios ao usuário. 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 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 gerar um JWT ou um token de acesso.
Para recuperar o nome da sua organização e o nome da conta do Snowflake Open Catalog nesse formato, 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: 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.
Após conceder uma função de catálogo à função personalizada, você concede a função personalizada a um usuário para conceder ao usuário 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 um usuário 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 ao usuário 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_key_pair_auth.
{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_key_pair_auth>.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_key_pair_auth.
{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_key_pair_auth>.
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_key_pair_auth.
{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_key_pair_auth>.
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 o usuário 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_key_pair_auth.
{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_key_pair_auth>.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_key_pair_auth.
{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_key_pair_auth>.
<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_key_pair_auth.
{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_key_pair_auth>.
<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_key_pair_auth.
{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_key_pair_auth>.
<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_key_pair_auth.
{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_key_pair_auth>.
<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 4: Crie um usuário¶
Como usar sua conexão da CLI do Snowflake para criar um usuário de autenticação de par de chaves no Open Catalog. Um humano não pode usar as credenciais deste usuário para fazer login na UI do Open Catalog.
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 criar um usuário, execute o seguinte comando:
snow sql -q "create user <username> login_name='<username>';"
Onde:
<username>é o nome de usuário que você deseja designar ao usuário de autenticação de par de chaves.
Etapa 5: concessão de uma função personalizada ao usuário¶
Nesta seção, você usa sua conexão da CLI do Snowflake para conceder a função personalizada a um ou mais usuários. Como resultado, você concede ao usuário os privilégios concedidos a quaisquer funções de catálogo concedidas à 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 ao usuário keypairuser1.
snow sql -q "GRANT ROLE ENGINEER to user keypairuser1;"
Para validar se a função foi concedida ao usuário, execute:
snow sql -q "show grants to user keypairuser1;"
Na resposta, verifique se a função personalizada que você criou (coluna role) está atribuída ao usuário que você criou (coluna grantee_name).
Etapa 6: geração de um token de acesso para o usuário¶
Nesta seção, você gerar um token de acesso para o usuário, que é usado posteriormente para conectar o usuário ao Open Catalog por meio da autenticação de par de chaves.
As etapas são as seguintes:
Geração de uma chave privada e pública¶
Esta seção descreve como gerar uma chave privada e pública.
Para gerar uma chave privada, use o seguinte comando:
openssl genrsa 2048 | openssl pkcs8 -topk8 -inform PEM -out rsa_key.p8 -nocrypt
Para gerar uma chave pública, use o seguinte comando:
openssl rsa -in rsa_key.p8 -pubout -out rsa_key.pub
Atribuição da chave pública ao usuário¶
Como usar sua conexão da CLI do Snowflake para designar a chave pública ao usuário que você criou.
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 designar a chave pública ao usuário que você criou, execute:
snow sql -q "alter user <username> set RSA_PUBLIC_KEY='<your_public_key>';"
Nota
Se você precisar recuperar sua chave pública, execute:
cat rsa_key.pub.Valide se o usuário tem a chave pública (
RSA_PUBLIC_KEY) definida e a impressão digital da chave pública RSA do usuário (RSA_PUBLIC_KEY_FP) definida:snow sql -q "desc user keypairuser1;"
Geração de um JWT para um usuário¶
Nesta etapa, você gerar um JWT, do qual você precisa para gerar um token de acesso.
Para usar SnowSQL para gerar um JWT, execute:
snowsql --private-key-path rsa_key.p8 --generate-jwt -h <your_org_name>-<your_open_catalogaccount_name>.snowflakecomputing.com -a <account-identifier> -u <user_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 Recuperação do nome da sua organização e conta.
<account-identifier>is the account identifier for your Snowflake Open Catalog account. To retrieve it, refer to your Open Catalog account URL. For example,abc12345inhttps://app.snowflake.com/us-west-2/abc12345/#/.<user_name>é o nome de usuário para um usuário do Open Catalog com a chave pública atribuída ao usuário.
Se você o criptografou, digite a senha ou selecione Enter para continuar. Pode levar alguns segundos para você receber seu JWT.
Geração de um token de acesso para o usuário¶
Use o JWT para recuperar um token de acesso para uma função personalizada ou interna:
curl -i -X POST \ -H "Content-Type: application/x-www-form-urlencoded" \ -H "Accept: application/json" \ --data-urlencode "scope=session:role:<custom_role_name>" \ --data-urlencode "grant_type=client_credentials" \ --data-urlencode "client_secret=<your_JWT>" \ "https://<your_org_name>-<your_open_catalogaccount_name>.snowflakecomputing.com/polaris/api/catalog/v1/oauth/tokens"
Onde
<custom_role_name>is the name of A custom role you created, such asENGINEER.<your_JWT>é o JWT que você gerou na etapa anterior.<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 Recuperação do nome da sua organização e conta.
Armazene o token de acesso em uma variável (
$ACCESS_TOKEN).
Etapa 7: conexão com o Open Catalog com autenticação de par de chaves¶
Nesta seção, você conecta o usuário ao Open Catalog por meio da autenticação de par de chaves. Para obter instruções, consulte Conexão ao Snowflake Open Catalog com autenticação de par de chaves.
Configuração da rotação do par de chaves¶
O Open Catalog oferece suporte a múltiplas chaves ativas para permitir rodízio ininterrupto. As etapas para configurar a rotação de pares de chaves no Open Catalog são as mesmas que configurá-la no Snowflake. Para obter instruções, consulte Configuração da rotação de pares de chaves na documentação do Snowflake.
Uso da CLI do Apache Polaris™ (incubando) para gerenciar catálogos¶
Após configurar a autenticação de par de chaves, você pode gerar um token de acesso de administrador de serviço para usar a CLI do Apache Polaris™ (incubando) para configurar e gerenciar catálogos no Open Catalog. Para obter instruções, consulte o Guia do Open Catalog com Polaris no Snowflake Labs.