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
    
    Copy

    応答は次のようになります。

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

ステップ3:デフォルトのSnowflake CLI 接続のセットアップ

使用している接続に常に必要な POLARIS_ACCOUNT_ADMIN ロールが付与されているようにするには、Open Catalog用に作成したSnowflakeの CLI 接続をデフォルト接続として設定できます。デフォルト接続の詳細については、 :ref:label-cli_set_default_connection をご参照ください。

  1. myopencatalogconnection 接続をデフォルトとして設定する次の例に従ってください。

    snow connection set-default myopencatalogconnection
    
    Copy
  2. 正しいユーザーとロールを使用していることを確認するには、以下を実行します。

    snow sql -q "Select current_user(); select current_role();"
    
    Copy

    応答としてOpen Catalog ユーザー名が返され、CURRENT ROLE は POLARIS_ACCOUNT_ADMIN になります。

    +----------------+
    | CURRENT_USER() |
    |----------------|
    | JSMITH        |
    +----------------+
    select current_role();
    +-----------------------+
    | CURRENT_ROLE()        |
    |-----------------------|
    | POLARIS_ACCOUNT_ADMIN |
    +-----------------------+
    
    Copy

サービス管理者のアクセストークンの生成

プログラムでキーペア認証を構成するには、サービス管理者のアクセストークンが必要です。ただし、Open Catalogを使用して UI キーペア認証を構成するため、いくつかのタスクを実行するオプションがあります。

自分のサービス管理者アクセストークンを生成済みで、まだ有効な場合は、このステップをスキップできます。

サービス管理者アクセストークンを生成するステップは以下のとおりです。

  1. 秘密キーとパブリックキーを生成する

  2. パブリックキーを自分に割り当てる

  3. 自分の JWT を生成する

  4. サービス管理者のアクセストークンを生成する

秘密キーとパブリックキーを生成する

このセクションでは、秘密キーとパブリックキーを生成する方法について説明します。

秘密キーを生成するには、次のコマンドを使用します。

openssl genrsa 2048 | openssl pkcs8 -topk8 -inform PEM -out rsa_key.p8 -nocrypt
Copy

パブリックキーを生成するには、次のコマンドを使用します。

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

ユーザーにパブリックキーを割り当てます。

Snowflake CLI 接続を使用して、パブリックキーを自分に割り当てます。

注釈

設定したデフォルトの Snowflake CLI 接続に POLARIS_ACCOUNT_ADMIN ロールが付与されていない場合は、コマンドに次のステートメントを含める必要があります: USE ROLE POLARIS_ACCOUNT_ADMIN

  1. パブリックキーを自分に割り当てるには、以下を実行します。

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

    条件:

    • <your_username> は、Open Catalogにサインインするために使用するOpen Catalog UI のユーザー名です。

    注釈

    パブリックキーを取得する必要がある場合は、以下を実行します。 cat rsa_key.pub

  2. ユーザーのパブリックキー(RSA_PUBLIC_KEY)が設定され、ユーザーの RSA パブリックキー(RSA_PUBLIC_KEY_FP)のフィンガープリントが設定されていることを検証します。

    snow sql -q "desc user <your_username>;"
    
    Copy

    条件:

    • <your_username> は、Open Catalogにサインインするために使用するOpen Catalog UI のユーザー名です。

JSON ウェブトークンを生成する

このセクションでは、アクセストークンを生成するために必要な JSON ウェブトークン(JWT)を生成します。

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

    条件:

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

    • <your_user_name> は、Open Catalogのユーザー名です。

  2. 暗号化した場合は、パスキーを入力するか、Enterを選択して続行してください。JWT を受け取るまでに数秒かかる場合があります。

サービス管理者のアクセストークンを生成する

このセクションでは、プログラムでキーペア認証を構成するために使用するサービス管理者のアクセストークンを生成します。

  1. サービス管理者のアクセストークンを生成するには、以下のコマンドを実行し、値をテキストエディターにコピーします。

    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

    条件:

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

ステップ2:組織とアカウント名を取得する

JWT またはアクセストークンの生成などのタスクには、ハイフンで区切られた組織名とSnowflake Open Catalogアカウント名が必要です。

  1. この形式で組織名とSnowflake Open Catalogアカウント名を取得するには、次のコマンドを実行します。

    snow sql -q "SELECT CURRENT_ORGANIZATION_NAME() || '-' || CURRENT_ACCOUNT_NAME();"
    
    Copy
  2. 応答で返された値をコピーし、後で使用するためにテキストエディターに貼り付けます。例: ABCDEFG-MYACCOUNT1

ステップ3:カスタムロールにカタログロールを付与する

このセクションでは、作成したカスタムロールにカタログロールを付与します。

カスタムロールにカタログロールを付与した後は、そのカスタムロールをユーザーに付与し、プリンシパルロールに付与されたカタログロールに付与されている権限をユーザーに付与します。Open Catalogの RBAC モデルの詳細については、RBAC モデルをご参照ください。。

カタログに対するカタログ管理者権限を持つカタログロール、または指定したカタログに対する一連の権限を持つカタログロールをカスタムロールに付与できます。

カタログ管理者権限を持つカタログロールをカスタムロールに付与する

このセクションでは、カタログ管理者権限を持つカタログロールをカスタムロールに付与します。ワークフローは次のとおりです。

  1. カタログロールを作成する

  2. カタログ管理者権限をカタログロールに付与する

  3. カタログロールをカスタムロールに付与する

カタログ・ロールの作成

以下のコマンドを実行して、指定したカタログにカタログロールを作成します。

 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
条件:
  • <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。

カタログロールにカタログ管理者権限を付与する

次のコマンドを実行します。

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
条件:
  • <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の権限の名前です。

カタログロールをカスタムロールに付与する

重要

カスタムロールは大文字と小文字を区別します。小文字または小文字と大文字で作成する場合でも、カスタムロールは すべて 大文字で指定する必要があります。

次のコマンドを実行します。

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
条件:
  • <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> です。

必要に応じて、この手順を繰り返し、他のカタログのカタログ管理者権限をカスタムロールに付与します。

指定した権限セットを持つカタログロールをカスタムロールに付与する

ワークフローは次のとおりです。

  1. カタログロールを作成する

  2. カタログロールに権限を付与する。これらの権限により、ユーザーはOpen Catalogでアクションを実行できます。

  3. カタログロールをカスタムロールに付与する

カタログ・ロールの作成

このセクションでは、カタログロールを作成します。カタログロールの詳細情報については、カタログロールを参照してください。

以下のコマンドを実行して、指定したカタログにカタログロールを作成します。

 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
条件:
  • <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。

カタログロールに権限を付与する

カタログ全体、またはカタログ内の名前空間やテーブルに権限を付与できます。

カタログロールにカタログ権限を付与する

次のコマンドを実行します。

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
条件:
  • <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>_ をご参照ください。

カタログロールで名前空間の権限を付与する

次のコマンドを実行します。

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
条件:
  • <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>_ をご参照ください。

カタログロールにテーブル権限を付与する

次のコマンドを実行します。

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
条件:
  • <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>_ をご参照ください。

カタログロールをカスタムロールに付与する

重要

カスタムロールは大文字と小文字を区別します。小文字または小文字と大文字で作成する場合でも、カスタムロールは すべて 大文字で指定する必要があります。

次のコマンドを実行します。

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
条件:
  • <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> は、カスタムロールに付与するカタログロールの名前です。

必要であれば、このワークフローを繰り返して、作成した追加のカタログロールをカスタムロールに付与します。

ステップ4:ユーザーを作成する

Snowflake CLI を接続を使用して、Open Catalogでキーペア認証ユーザーを作成します。人間がこのユーザーの認証情報を使用してOpen Catalog UI にサインインすることはできません。

注釈

設定したデフォルトの Snowflake CLI 接続に POLARIS_ACCOUNT_ADMIN ロールが付与されていない場合は、コマンドに次のステートメントを含める必要があります: USE ROLE POLARIS_ACCOUNT_ADMIN

  1. ユーザーを作成するには、次のコマンドを実行します。

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

    条件:

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

ロールがユーザーに付与されていることを検証するには、以下を実行します。

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

応答で、作成したカスタムロール(ロール 列)が、作成したユーザー(権限名 列)に割り当てられていることを確認します。

ステップ6:ユーザーのアクセストークンを生成する

このセクションでは、ユーザーのアクセストークンを生成します。これは、後でキーペア認証を通じてユーザーをOpen Catalogに接続するために使用します。

手順は以下の通り。

  1. 秘密キーとパブリックキーを生成する

  2. ユーザーにパブリックキーを割り当てる

  3. JWT を生成する

  4. アクセストークンを生成する

秘密キーとパブリックキーを生成する

このセクションでは、秘密キーとパブリックキーを生成する方法について説明します。

秘密キーを生成するには、次のコマンドを使用します。

openssl genrsa 2048 | openssl pkcs8 -topk8 -inform PEM -out rsa_key.p8 -nocrypt
Copy

パブリックキーを生成するには、次のコマンドを使用します。

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

ユーザーに公開キーを割り当てる

Snowflake CLI 接続を使用して、作成したユーザーにパブリックキーを割り当てます。

注釈

設定したデフォルトの Snowflake CLI 接続に POLARIS_ACCOUNT_ADMIN ロールが付与されていない場合は、コマンドに次のステートメントを含める必要があります: USE ROLE POLARIS_ACCOUNT_ADMIN

  1. 作成したユーザーにパブリックキーを割り当てるには、以下を実行します。

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

    注釈

    パブリックキーを取得する必要がある場合は、以下を実行します。 cat rsa_key.pub

  2. ユーザーのパブリックキー(RSA_PUBLIC_KEY)が設定され、ユーザーの RSA パブリックキー(RSA_PUBLIC_KEY_FP)のフィンガープリントが設定されていることを検証します。

    snow sql -q "desc user keypairuser1;"
    
    Copy

ユーザーの JWT を生成する

このステップでは、アクセストークンを生成するために必要な JWT を生成します。

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

    条件:

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

    • <user_name> は、ユーザーにパブリックキーが割り当てられたOpen Catalogユーザーのユーザー名です。

  2. 暗号化した場合は、パスキーを入力するか、Enterを選択して続行してください。JWT を受け取るまでに数秒かかる場合があります。

ユーザーのアクセストークンを生成する

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

    条件

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

    • <your_JWT> は、前のステップで生成した JWT です。

    • <your_org_name>-<your_open_catalogaccount_name> は、ハイフンで区切られた組織名とSnowflake Open Catalogアカウント名です。

      例: ABCDEFG-MYACCOUNT1

      この形式でこれらの値を取得するには、組織名とアカウント名を取得するをご参照ください。

  2. アクセストークンを変数($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のガイドをご参照ください。