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

  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

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:

  1. Geração de uma chave privada e pública

  2. Atribua a chave público a si mesmo

  3. Gere um JWT para você mesmo

  4. Geração de um token de acesso de administrador de serviço

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
Copy

Para gerar uma chave pública, use o seguinte comando:

openssl rsa -in rsa_key.p8 -pubout -out rsa_key.pub
Copy

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.

  1. Atribuir a chave pública a si mesmo, execute:

    snow sql -q "alter user <your_username> set RSA_PUBLIC_KEY='<your_public_key>';"
    
    Copy

    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.

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

    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.

  1. 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>
    
    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 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, abc12345in https://app.snowflake.com/us-west-2/abc12345/#/.

    • <your_user_name> é seu nome de usuário do Open Catalog.

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

  1. 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"
    
    Copy

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

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.

  1. 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();"
    
    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: 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:

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

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

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

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 o usuário 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_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.

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

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.

  1. Para criar um usuário, execute o seguinte comando:

    snow sql -q "create user <username> login_name='<username>';"
    
    Copy

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

Para validar se a função foi concedida ao usuário, execute:

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

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:

  1. Geração de uma chave privada e pública

  2. Atribuição da chave pública ao usuário

  3. Geração de um JWT

  4. Geração de um token de acesso

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
Copy

Para gerar uma chave pública, use o seguinte comando:

openssl rsa -in rsa_key.p8 -pubout -out rsa_key.pub
Copy

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.

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

    Nota

    Se você precisar recuperar sua chave pública, execute: cat rsa_key.pub.

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

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.

  1. 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>
    
    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 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, abc12345in https://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.

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

  1. 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"
    
    Copy

    Onde

    • <custom_role_name> is the name of A custom role you created, such as ENGINEER.

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

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