Snowflake Open Catalogでのキーペア認証の構成¶
このトピックでは、Snowflake Open Catalogでキーペア認証を構成する方法について説明します。この構成により、キーペア認証ユーザーは、アクセストークンを介してプログラムでOpen Catalogに接続できます。簡単にするために、特に指定がない限り、このトピックの残りの部分では、ユーザーという用語を使用してキーペア認証ユーザーを参照します。
キーペア認証を使用すると、ユーザーは適切なカタログの権限を持つさまざまなカスタムロールのOpen Catalogに、プログラムによってアクセスできます。 例:
ANALYST カスタムロール:catalogAにのみアクセスできます。
ENGINEER カスタムロール:catalogBにのみアクセスできます。
前提条件¶
Open Catalogアカウントでカタログを作成します。
マシンにSnowflake CLIがインストールされている必要があります。さらに、Open Catalog用のSnowflake CLI 接続を作成する必要があります。この接続を作成するには、以下のOpen Catalog用のSnowflake CLI 接続の作成をご参照ください。
キーペア認証を構成するには、Open Catalogのサービス管理者ロールが必要です。詳細については、ユーザーロールをご参照ください。Snowflake CLI では、このロールは POLARIS_ACCOUNT_ADMIN として出力されます。
マシンにSnowSQLがインストールされている必要があります。
サービス管理者のアクセストークンが必要です。このトークンは、プログラムでキーペア認証を構成するために必要であり、ユーザーにカタログ管理者権限を付与する必要があります。このトークンを生成するには、以下のサービス管理者アクセストークンを生成するをご参照ください。
始める前に¶
キーペア認証を構成するには、Open Catalog用のSnowflake CLI 接続が必要です。
この接続を作成するには、Snowflake組織名とOpen Catalogアカウント名を含む完全なOpen Catalogアカウント識別子が必要です。例: <orgname>。<my-snowflake-open-catalog-account-name>。
Snowflake 組織名(
<orgname>)を見つけるには、 :ref:label-account_name_findをご参照ください。Snowflake Open Catalog アカウント名(
<my-snowflake-open-catalog-account-name>)を見つけるには、:doc:/user-guide/opencatalog/find-account-nameをご参照ください。
Open Catalog用の Snowflake CLI 接続を作成します。¶
Open Catalogアカウント用のSnowflake CLI 接続をを作成し、それを使用してアカウントのキーペア認証を構成できるようにします。
ステップ1:Snowflake Open Catalog用のSnowflake CLI 接続を追加します。¶
キーペア認証を構成するSnowflake Open Catalogアカウントの接続を追加します。
次の値で :ref:
<label-snowcli_snow_connection_command_add>の接続を追加してください。他のすべてのパラメーターについては、Enterを押して、パラメーターの値の指定をスキップします。接続構成パラメーター
値
この接続の名前
接続の名前を指定します。例:
myopencatalogconnection.アカウント名
Snowflake 組織名の後にOpen Catalogアカウント名を、次の形式で指定してください。
<orgname>-<my-snowflake-open-catalog-account-name>。例:
ABCDEFG-MYACCOUNT1。これらの名前を見つけるには、
始める前に_ をご参照ください。ユーザー名
Open Catalogのユーザー名を指定します。例:
jsmith。パスワード[オプション]
Open Catalogの接続を作成する場合、このパラメーターはオプションではありません。
Open Catalogのパスワードを入力します。例:
MyPassword123456789。接続のロール[オプション]
Open Catalogの接続を作成する場合、このパラメーターはオプションではありません。
POLARIS_ACCOUNT_ADMINを入力する必要があります
ステップ2:Snowflake CLI 接続をテストします¶
CLI 接続をテストするには、
myopencatalogconnectionの接続をテストするこの例に従ってください。snow connection test -c myopencatalogconnection
応答は次のようになります。
+------------------------------------------------------------------------------+ | 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 | +------------------------------------------------------------------------------+
ステップ3:デフォルトのSnowflake CLI 接続のセットアップ¶
使用している接続に常に必要な POLARIS_ACCOUNT_ADMIN ロールが付与されているようにするには、Open Catalog用に作成したSnowflakeの CLI 接続をデフォルト接続として設定できます。デフォルト接続の詳細については、 :ref:label-cli_set_default_connection をご参照ください。
myopencatalogconnection接続をデフォルトとして設定する次の例に従ってください。snow connection set-default myopencatalogconnection
正しいユーザーとロールを使用していることを確認するには、以下を実行します。
snow sql -q "Select current_user(); select current_role();"
応答としてOpen Catalog ユーザー名が返され、CURRENT ROLE は POLARIS_ACCOUNT_ADMIN になります。
+----------------+ | CURRENT_USER() | |----------------| | JSMITH | +----------------+ select current_role(); +-----------------------+ | CURRENT_ROLE() | |-----------------------| | POLARIS_ACCOUNT_ADMIN | +-----------------------+
サービス管理者のアクセストークンの生成¶
プログラムでキーペア認証を構成するには、サービス管理者のアクセストークンが必要です。ただし、Open Catalogを使用して UI キーペア認証を構成するため、いくつかのタスクを実行するオプションがあります。
自分のサービス管理者アクセストークンを生成済みで、まだ有効な場合は、このステップをスキップできます。
サービス管理者アクセストークンを生成するステップは以下のとおりです。
秘密キーとパブリックキーを生成する¶
このセクションでは、秘密キーとパブリックキーを生成する方法について説明します。
秘密キーを生成するには、次のコマンドを使用します。
openssl genrsa 2048 | openssl pkcs8 -topk8 -inform PEM -out rsa_key.p8 -nocrypt
パブリックキーを生成するには、次のコマンドを使用します。
openssl rsa -in rsa_key.p8 -pubout -out rsa_key.pub
ユーザーにパブリックキーを割り当てます。¶
Snowflake CLI 接続を使用して、パブリックキーを自分に割り当てます。
注釈
設定したデフォルトの Snowflake CLI 接続に POLARIS_ACCOUNT_ADMIN ロールが付与されていない場合は、コマンドに次のステートメントを含める必要があります: USE ROLE POLARIS_ACCOUNT_ADMIN。
パブリックキーを自分に割り当てるには、以下を実行します。
snow sql -q "alter user <your_username> set RSA_PUBLIC_KEY='<your_public_key>';"
条件:
<your_username>は、Open Catalogにサインインするために使用するOpen Catalog UI のユーザー名です。
注釈
パブリックキーを取得する必要がある場合は、以下を実行します。
cat rsa_key.pub。ユーザーのパブリックキー(
RSA_PUBLIC_KEY)が設定され、ユーザーの RSA パブリックキー(RSA_PUBLIC_KEY_FP)のフィンガープリントが設定されていることを検証します。snow sql -q "desc user <your_username>;"
条件:
<your_username>は、Open Catalogにサインインするために使用するOpen Catalog UI のユーザー名です。
JSON ウェブトークンを生成する¶
このセクションでは、アクセストークンを生成するために必要な JSON ウェブトークン(JWT)を生成します。
SnowSQL を使用して JWT を生成するには、以下を実行します。
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>
条件:
<your_org_name>-<your_open_catalogaccount_name>は、ハイフンで区切られた組織名とSnowflake Open Catalogアカウント名です。例:
ABCDEFG-MYACCOUNT1。この形式でこれらの値を取得するには、組織名とアカウント名を取得するをご参照ください。
<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>は、Open Catalogのユーザー名です。
暗号化した場合は、パスキーを入力するか、Enterを選択して続行してください。JWT を受け取るまでに数秒かかる場合があります。
サービス管理者のアクセストークンを生成する¶
このセクションでは、プログラムでキーペア認証を構成するために使用するサービス管理者のアクセストークンを生成します。
サービス管理者のアクセストークンを生成するには、以下のコマンドを実行し、値をテキストエディターにコピーします。
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"
条件:
POLARIS_ACCOUNT_ADMINは、Open Catalogの組み込みロールの名前であり、Open Catalogでキーペア認証の構成を含む管理タスクを実行できます。Open Catalog UI では、このロールはサービス管理者ロールと呼ばれます。<your_JWT>は、前のステップで生成した JWT です。<your_org_name>-<your_open_catalogaccount_name>は、ハイフンで区切られた組織名とSnowflake Open Catalogアカウント名です。例:
ABCDEFG-MYACCOUNT1。この形式でこれらの値を取得するには、組織名とアカウント名を取得するをご参照ください。
ステップ1:カスタムロールを作成する¶
このステップでは、Snowflake CLI 接続を使用してカスタムロールを作成します。
カスタムロールを作成すると、後でカタログロールを付与し、そのカスタムロールをユーザーに付与して、ユーザーに権限を付与できます。カスタムロールの詳細情報については、カスタムロールをご参照ください。Open Catalogの RBAC モデルの詳細については、RBAC モデルをご参照ください。
注釈
設定したデフォルトの Snowflake CLI 接続に POLARIS_ACCOUNT_ADMIN ロールが付与されていない場合は、コマンドに次のステートメントを含める必要があります: USE ROLE POLARIS_ACCOUNT_ADMIN。
次の例では、 OPEN_CATALOG_ADMIN カスタムロールを作成します。
snow sql -q "create role OPEN_CATALOG_ADMIN;"
ステップ2:組織とアカウント名を取得する¶
JWT またはアクセストークンの生成などのタスクには、ハイフンで区切られた組織名とSnowflake Open Catalogアカウント名が必要です。
この形式で組織名とSnowflake Open Catalogアカウント名を取得するには、次のコマンドを実行します。
snow sql -q "SELECT CURRENT_ORGANIZATION_NAME() || '-' || CURRENT_ACCOUNT_NAME();"
応答で返された値をコピーし、後で使用するためにテキストエディターに貼り付けます。例:
ABCDEFG-MYACCOUNT1。
ステップ3:カスタムロールにカタログロールを付与する¶
このセクションでは、作成したカスタムロールにカタログロールを付与します。
カスタムロールにカタログロールを付与した後は、そのカスタムロールをユーザーに付与し、プリンシパルロールに付与されたカタログロールに付与されている権限をユーザーに付与します。Open Catalogの RBAC モデルの詳細については、RBAC モデルをご参照ください。。
カタログに対するカタログ管理者権限を持つカタログロール、または指定したカタログに対する一連の権限を持つカタログロールをカスタムロールに付与できます。
カタログに対するカタログ管理者権限をユーザーに付する場合は、カタログ管理者権限を持つカタログロールをカスタムロールに付与するをご参照ください。。カタログ管理者が持つ権限については、カタログ管理者ロールをご参照ください。
指定した権限セットをユーザーに付与したい場合は、指定した権限セットを持つカタログロールをカスタムロールに付与するをご参照ください。。 たとえば、カスタムロールにcatalog_reader、catalog_writer、またはcatalog_metadata_readerカタログロールを付与する場合は、このオプションを選択します。
カタログ管理者権限を持つカタログロールをカスタムロールに付与する¶
このセクションでは、カタログ管理者権限を持つカタログロールをカスタムロールに付与します。ワークフローは次のとおりです。
カタログ・ロールの作成¶
以下のコマンドを実行して、指定したカタログにカタログロールを作成します。
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>" }'
- 条件:
<your_org_name>-<your_open_catalogaccount_name>は、ハイフンで区切られた組織名とSnowflake Open Catalogアカウント名です。例:
ABCDEFG-MYACCOUNT1。この形式でこれらの値を取得するには、 :ref:
label-retrieve_org_account_name_key_pair_authをご参照ください。
{Catalogname}は、カタログロールを作成するOpen Catalogのカタログ名です。
<service_admin_access_token>は、 :ref:自分で生成したサービス管理者アクセストークン <label-generate_service_admin_access_token_key_pair_auth>です。
<catalog_role_name>で、カタログロールの名前を指定します。例: CatalogAdmin。
Snowflakeラボで、 カタログ <https://github.com/Snowflake-Labs/polaris-cli-opencatalog-demo?tab=readme-ov-file#catalog-1>_ をご参照ください。
See See カタログ・ロールの作成.
カタログロールにカタログ管理者権限を付与する¶
次のコマンドを実行します。
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"}}'
- 条件:
<your_org_name>-<your_open_catalogaccount_name>は、ハイフンで区切られた組織名とSnowflake Open Catalogアカウント名です。例:
ABCDEFG-MYACCOUNT1。この形式でこれらの値を取得するには、 :ref:
label-retrieve_org_account_name_key_pair_authをご参照ください。
{Catalogname}は、権限を付与するOpen Catalogのカタログ名です。
{catalogRoleName}は、権限を付与するカタログロールの名前です。例: TableReader。
<service_admin_access_token>は、 :ref:自分で生成したサービス管理者アクセストークン <label-generate_service_admin_access_token_key_pair_auth>です。
CATALOG_MANAGE_CONTENTは、カタログ管理者権限を持つOpen Catalogの権限の名前です。
Snowflakeラボで、権限 <https://github.com/Snowflake-Labs/polaris-cli-opencatalog-demo?tab=readme-ov-file#privileges>_ をご参照ください。手順で説明されているように、必ず CATALOG_MANAGE_CONTENT カタログロールに権限を付与してください。
See Grant catalog privileges on a catalog role and select the
CATALOG_MANAGE_CONTENT privilege.
カタログロールをカスタムロールに付与する¶
重要
カスタムロールは大文字と小文字を区別します。小文字または小文字と大文字で作成する場合でも、カスタムロールは すべて 大文字で指定する必要があります。
次のコマンドを実行します。
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}}'
- 条件:
<your_org_name>-<your_open_catalogaccount_name>は、ハイフンで区切られた組織名とSnowflake Open Catalogアカウント名です。例:
ABCDEFG-MYACCOUNT1。この形式でこれらの値を取得するには、 :ref:
label-retrieve_org_account_name_key_pair_authをご参照ください。
{customRoleName}は、カタログ管理者権限を持つカタログロールを付与するカスタムロールの名前です。例: OPEN_CATALOG_ADMIN。
{catalogName}は、カタログ管理者権限を付与するOpen Catalogのカタログの名前です。
<catalog_role_name>は、カタログ管理者権限が付与されているカタログのカタログロールの名前です。例: CatalogAdmin.
<service_admin_access_token>は、 :ref:自分で生成したサービス管理者アクセストークン <label-generate_service_admin_access_token_key_pair_auth>です。
Snowflakeラボで、 付与する <https://github.com/Snowflake-Labs/polaris-cli-opencatalog-demo?tab=readme-ov-file#grants>_ をご参照ください。
See カタログを保護する. These
instructions describe how to grant a catalog role to a principal role but the process is the same. Instead of selecting a principal
role from the list, select your custom role that you want to grant with the catalog role that has the CATALOG_MANAGE_CONTENT privilege.
必要に応じて、この手順を繰り返し、他のカタログのカタログ管理者権限をカスタムロールに付与します。
指定した権限セットを持つカタログロールをカスタムロールに付与する¶
ワークフローは次のとおりです。
カタログロールに権限を付与する。これらの権限により、ユーザーはOpen Catalogでアクションを実行できます。
カタログ・ロールの作成¶
このセクションでは、カタログロールを作成します。カタログロールの詳細情報については、カタログロールを参照してください。
以下のコマンドを実行して、指定したカタログにカタログロールを作成します。
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>" }'
- 条件:
<your_org_name>-<your_open_catalogaccount_name>は、ハイフンで区切られた組織名とSnowflake Open Catalogアカウント名です。例:
ABCDEFG-MYACCOUNT1。この形式でこれらの値を取得するには、 :ref:
label-retrieve_org_account_name_key_pair_authをご参照ください。
{Catalogname}は、カタログロールを作成するOpen Catalogのカタログ名です。
<service_admin_access_token>は、 :ref:自分で生成したサービス管理者アクセストークン <label-generate_service_admin_access_token_key_pair_auth>です。
<catalog_role_name>で、カタログロールの名前を指定します。例: TableReader。
Snowflakeラボで、 カタログ <https://github.com/Snowflake-Labs/polaris-cli-opencatalog-demo?tab=readme-ov-file#catalog-1>_ をご参照ください。
See See カタログ・ロールの作成.
カタログロールに権限を付与する¶
カタログ全体、またはカタログ内の名前空間やテーブルに権限を付与できます。
カタログロールにカタログ権限を付与する¶
次のコマンドを実行します。
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>"}}'
- 条件:
<your_org_name>-<your_open_catalogaccount_name>は、ハイフンで区切られた組織名とSnowflake Open Catalogアカウント名です。例:
ABCDEFG-MYACCOUNT1。この形式でこれらの値を取得するには、 :ref:
label-retrieve_org_account_name_key_pair_authをご参照ください。
{Catalogname}は、権限を付与するOpen Catalogのカタログ名です。
{catalogRoleName}は、権限を付与するカタログロールの名前です。例: TableReader。
<service_admin_access_token>は、 :ref:自分で生成したサービス管理者アクセストークン <label-generate_service_admin_access_token_key_pair_auth>です。
<privilege_name>は、カタログロールに付与する権限の名前です。使用可能な権限のリストについては、アクセス制御権限 <https://other-docs.snowflake.com/en/opencatalog/access-control#access-control-privileges>_ をご参照ください。
Snowflakeラボで、 権限 <https://github.com/Snowflake-Labs/polaris-cli-opencatalog-demo?tab=readme-ov-file#privileges>_ をご参照ください。
注釈
Snowflakeラボの例では、 CATALOG_MANAGE_CONTENT カタログに対するカタログ管理者権限を付与する権限が付与されています。ただし、その他の利用可能な権限のリストについては、Open Catalogドキュメントの アクセス制御権限 <https://other-docs.snowflake.com/en/opencatalog/access-control#access-control-privileges>_ をご参照ください。
カタログロールで名前空間の権限を付与する¶
次のコマンドを実行します。
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>"}}'
- 条件:
<your_org_name>-<your_open_catalogaccount_name>は、ハイフンで区切られた組織名とSnowflake Open Catalogアカウント名です。例:
ABCDEFG-MYACCOUNT1。この形式でこれらの値を取得するには、 :ref:
label-retrieve_org_account_name_key_pair_authをご参照ください。
{Catalogname}は、権限を付与するOpen Catalogのカタログ名です。
{catalogRoleName}は、権限を付与するカタログロールの名前です。例: TableReader。
<service_admin_access_token>は、 :ref:自分で生成したサービス管理者アクセストークン <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>は、カタログロールに付与する名前空間の権限の名前です。使用可能な権限のリストについては、アクセス制御権限 <https://other-docs.snowflake.com/en/opencatalog/access-control#access-control-privileges>_ をご参照ください。
Snowflakeラボで、 権限 <https://github.com/Snowflake-Labs/polaris-cli-opencatalog-demo?tab=readme-ov-file#privileges>_ をご参照ください。
注釈
Snowflakeラボの例では、 CATALOG_MANAGE_CONTENT カタログに対するカタログ管理者権限を付与する権限が付与されています。ただし、その他の利用可能な権限のリストについては、Open Catalogドキュメントの アクセス制御権限 <https://other-docs.snowflake.com/en/opencatalog/access-control#access-control-privileges>_ をご参照ください。
カタログロールにテーブル権限を付与する¶
次のコマンドを実行します。
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>"}}'
- 条件:
<your_org_name>-<your_open_catalogaccount_name>は、ハイフンで区切られた組織名とSnowflake Open Catalogアカウント名です。例:
ABCDEFG-MYACCOUNT1。この形式でこれらの値を取得するには、 :ref:
label-retrieve_org_account_name_key_pair_authをご参照ください。
{Catalogname}は、権限を付与するOpen Catalogのカタログ名です。
{catalogRoleName}は、権限を付与するカタログロールの名前です。例: TableReader。
<service_admin_access_token>は、 :ref:自分で生成したサービス管理者アクセストークン <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>は、権限を付与するテーブルの名前です。
<privilege_name>は、カタログロールに付与する権限の名前です。使用可能な権限のリストについては、アクセス制御権限 <https://other-docs.snowflake.com/en/opencatalog/access-control#access-control-privileges>_ をご参照ください。
Snowflakeラボで、 権限 <https://github.com/Snowflake-Labs/polaris-cli-opencatalog-demo?tab=readme-ov-file#privileges>_ をご参照ください。
注釈
Snowflakeラボの例では、 CATALOG_MANAGE_CONTENT カタログに対するカタログ管理者権限を付与する権限が付与されています。ただし、その他の利用可能な権限のリストについては、Open Catalogドキュメントの アクセス制御権限 <https://other-docs.snowflake.com/en/opencatalog/access-control#access-control-privileges>_ をご参照ください。
カタログロールをカスタムロールに付与する¶
重要
カスタムロールは大文字と小文字を区別します。小文字または小文字と大文字で作成する場合でも、カスタムロールは すべて 大文字で指定する必要があります。
次のコマンドを実行します。
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}}'
- 条件:
<your_org_name>-<your_open_catalogaccount_name>は、ハイフンで区切られた組織名とSnowflake Open Catalogアカウント名です。例:
ABCDEFG-MYACCOUNT1。この形式でこれらの値を取得するには、 :ref:
label-retrieve_org_account_name_key_pair_authをご参照ください。
{customRoleName}は、カタログロールを付与するカスタムロールの名前です。
{catalogName}は、権限を付与するカタログロールを作成したOpen Catalogのカタログの名前です。
<service_admin_access_token>は、 :ref:自分で生成したサービス管理者アクセストークン <label-generate_service_admin_access_token_key_pair_auth>です。
<catalog_role_name>は、カスタムロールに付与するカタログロールの名前です。
Snowflakeラボで、 付与する <https://github.com/Snowflake-Labs/polaris-cli-opencatalog-demo?tab=readme-ov-file#grants>_ をご参照ください。
See カタログを保護する. These instructions describe how to grant a catalog role to a principal role but the process is the same. Instead of selecting a principal role from the list, you select your custom role.
必要であれば、このワークフローを繰り返して、作成した追加のカタログロールをカスタムロールに付与します。
ステップ4:ユーザーを作成する¶
Snowflake CLI を接続を使用して、Open Catalogでキーペア認証ユーザーを作成します。人間がこのユーザーの認証情報を使用してOpen Catalog UI にサインインすることはできません。
注釈
設定したデフォルトの Snowflake CLI 接続に POLARIS_ACCOUNT_ADMIN ロールが付与されていない場合は、コマンドに次のステートメントを含める必要があります: USE ROLE POLARIS_ACCOUNT_ADMIN。
ユーザーを作成するには、次のコマンドを実行します。
snow sql -q "create user <username> login_name='<username>';"
条件:
<username>は、キーペア認証ユーザーに割り当てるユーザー名です。
ステップ5:ユーザーにカスタムロールを付与する¶
このセクションでは、Snowflake CLI 接続を使用して、1人以上のユーザーにカスタムロールを付与します。その結果、カスタムロールに付与されたカタログロールに付与されている権限をユーザーに付与します。Open Catalogの RBAC モデルの詳細については、RBAC モデルをご参照ください。
注釈
設定したデフォルトの Snowflake CLI 接続に POLARIS_ACCOUNT_ADMIN ロールが付与されていない場合は、コマンドに次のステートメントを含める必要があります: USE ROLE POLARIS_ACCOUNT_ADMIN。
重要
カスタムロールは大文字と小文字を区別します。小文字または小文字と大文字で作成する場合でも、カスタムロールは すべて 大文字で指定する必要があります。
次の例では、 keypairuser1 ユーザーに ENGINEER カスタムロールを付与します。
snow sql -q "GRANT ROLE ENGINEER to user keypairuser1;"
ロールがユーザーに付与されていることを検証するには、以下を実行します。
snow sql -q "show grants to user keypairuser1;"
応答で、作成したカスタムロール(ロール 列)が、作成したユーザー(権限名 列)に割り当てられていることを確認します。
ステップ6:ユーザーのアクセストークンを生成する¶
このセクションでは、ユーザーのアクセストークンを生成します。これは、後でキーペア認証を通じてユーザーをOpen Catalogに接続するために使用します。
手順は以下の通り。
秘密キーとパブリックキーを生成する¶
このセクションでは、秘密キーとパブリックキーを生成する方法について説明します。
秘密キーを生成するには、次のコマンドを使用します。
openssl genrsa 2048 | openssl pkcs8 -topk8 -inform PEM -out rsa_key.p8 -nocrypt
パブリックキーを生成するには、次のコマンドを使用します。
openssl rsa -in rsa_key.p8 -pubout -out rsa_key.pub
ユーザーに公開キーを割り当てる¶
Snowflake CLI 接続を使用して、作成したユーザーにパブリックキーを割り当てます。
注釈
設定したデフォルトの Snowflake CLI 接続に POLARIS_ACCOUNT_ADMIN ロールが付与されていない場合は、コマンドに次のステートメントを含める必要があります: USE ROLE POLARIS_ACCOUNT_ADMIN。
作成したユーザーにパブリックキーを割り当てるには、以下を実行します。
snow sql -q "alter user <username> set RSA_PUBLIC_KEY='<your_public_key>';"
注釈
パブリックキーを取得する必要がある場合は、以下を実行します。
cat rsa_key.pub。ユーザーのパブリックキー(
RSA_PUBLIC_KEY)が設定され、ユーザーの RSA パブリックキー(RSA_PUBLIC_KEY_FP)のフィンガープリントが設定されていることを検証します。snow sql -q "desc user keypairuser1;"
ユーザーの JWT を生成する¶
このステップでは、アクセストークンを生成するために必要な JWT を生成します。
SnowSQL を使用して JWT を生成するには、以下を実行します。
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>
条件:
<your_org_name>-<your_open_catalogaccount_name>は、ハイフンで区切られた組織名とSnowflake Open Catalogアカウント名です。例:
ABCDEFG-MYACCOUNT1。この形式でこれらの値を取得するには、組織名とアカウント名を取得するをご参照ください。
<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>は、ユーザーにパブリックキーが割り当てられたOpen Catalogユーザーのユーザー名です。
暗号化した場合は、パスキーを入力するか、Enterを選択して続行してください。JWT を受け取るまでに数秒かかる場合があります。
ユーザーのアクセストークンを生成する¶
JWT を使用してカスタムまたは組み込みロールのアクセストークンを取得するには、以下を実行します。
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"
条件
<custom_role_name>is the name of A custom role you created, such asENGINEER。<your_JWT>は、前のステップで生成した JWT です。<your_org_name>-<your_open_catalogaccount_name>は、ハイフンで区切られた組織名とSnowflake Open Catalogアカウント名です。例:
ABCDEFG-MYACCOUNT1。この形式でこれらの値を取得するには、組織名とアカウント名を取得するをご参照ください。
アクセストークンを変数(
$ACCESS_TOKEN)に保存します。
ステップ7:キーペア認証を使用してOpen Catalogに接続する¶
このセクションでは、キーペア認証によってユーザーをOpen Catalogに接続します。手順については、キーペア認証を使用してSnowflake Open Catalogに接続するをご参照ください。
キーペアローテーションを構成する¶
Open Catalogは、連続したローテーションを可能にするため、複数のアクティブキーをサポートしています。Open Catalogでキーペアローテーションを構成する手順は、Snowflakeで構成する手順と同じです。手順については、Snowflakeドキュメントのキーペアローテーションを構成するをご参照ください。
Apache Polaris&trade(インキュベート中)を使用して CLI カタログを管理する¶
キーペア認証を構成したら、サービス管理者のアクセストークンを生成するを実行し、Apache Polaris&trade(インキュベート中)を使用して、CLI Open Catalogでカタログを設定および管理できます。手順については、Snowflake LabsのOpen CatalogとPolarisのガイドをご参照ください。