Snowflake Open Catalogの外部 OAuth を構成する

このトピックでは、Snowflake Open Catalogにアクセスするために OAuth を使用する外部サーバーを構成する方法について説明します。

注釈

このトピックでは、Auth0を使用してOpen Catalog用の外部 OAuth を構成する方法を説明します。ただし、OktaまたはMicrosoft Entra ID で構成する手順は似ています。

前提条件

  • Open Catalogアカウントで1つ以上のカタログを作成します。

  • IDプロバイダー(IdP)を使用したアカウントを持っていることを確認します。デモのため、このトピックでは IdP としてAuth0を使用します。会社または組織のAuth0アカウントを作成するには、[https://auth0.com/](https://auth0.com/)をご参照ください。ただし、OktaとMicrosoft Entra ID のプロセスは同様です。

  • [Snowflake CLI](https://docs.snowflake.com/en/developer-guide/snowflake-cli/installation/installation)がマシンにインストールされている必要があります。

  • 外部 OAuth を構成するには、Open Catalogのサービス管理者ロールが必要です。詳細については、[ユーザーロール](https://other-docs.snowflake.com/en/opencatalog/access-control#user-roles)をご参照ください。Snowflake CLI では、このロールは POLARIS_ACCOUNT_ADMIN として出力されます。

始める前に

外部 OAuth を構成するには、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 をご参照ください。

Snowflake CLI 接続を作成する

Open Catalogアカウント用にSnowflake CLI 接続を作成して、アカウントの外部 OAuth を構成するために使用できるようにします。

ステップ1:Snowflake Open Catalog用のSnowflake CLI 接続を追加します。

  • 次の値で :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

ステップ1:外部 OAuth 認証サーバーとしてAuth0を設定する

このセクションでは、Auth0を外部 OAuth 認証サーバーとして設定します 。ただし、外部の OAuth 認証サーバーとしてのMicrosoft Entra ID またはOktaのセットアップ手順は似ています。

注釈

会社または組織のAuth0アカウントを作成するには、[https://auth0.com/](https://auth0.com/)をご参照ください。

API を定義する

API を定義して権限を割り当てることができます。

  1. Auth0コンソールにサインインします。

  2. 左ペインで、アプリケーション > APIs を選択します。

  3. + API を作成を選択します。

  4. 名前識別子を入力し、デフォルト設定を受け入れます。

  5. 作成 を選択します。

API に権限を追加する

API に権限を追加してライアントに付与できるようにします。

このクライアントはOpen Catalogのプリンシパルになり、それに割り当てる権限はOpen Catalogのプリンシパルロールになります。

  1. Auth0コンソールにサインインします。

  2. 左ペインで、アプリケーション > APIs を選択します。

  3. API 選択します。

  4. 権限タブで、権限を追加します。

    1. 権限説明フィールドを使用して、API に権限を追加します。SESSION:ROLE:<custom_role_name> フォーマットを使用します。例: SESSION:ROLE:ENGINEER

      重要

      [サービス管理者アクセストークンを生成する](#step-4-generate-your-service-admin-access-token)には、SESSION:ROLE:POLARIS_ACCOUNT_ADMIN 権限を追加する必要があります。これにより、Open Catalogのサービス管理者ロールに API に対する権限を割り当てることができます。

    2. + 追加を選択します。

アプリケーションを作成する

アプリケーションを作成して、作成した API に権限を付与できるようにします。

  1. Auth0コンソールにサインインします。

  2. 左ペインで、アプリケーション > アプリケーションを選択します。

  3. + アプリケーションを作成を選択し、アプリケーションを作成します。このステップを繰り返して、外部 OAuth の構成に必要な各アプリケーションを作成します。

    重要

    サービス管理者アクセストークンを生成するアプリケーションを必ず作成してください。後で、SESSION:ROLE:POLARIS_ACCOUNT_ADMIN 権限を付与します。

API に権限を割り当てる

以下の手順に従って、クライアントに付与する権限を選択します。

  1. Auth0コンソールにサインインします。

  2. 左ペインで、アプリケーション > アプリケーションを選択します。

  3. 作成したアプリケーションを選択します。

  4. APIs タブを選択します。

  5. 必要に応じて、 API の承認済みトグルをオンにします。

  6. API の展開アイコンを選択します。

  7. 権限フィールドで、API に割り当てる権限ごとのチェックボックスを選択します。

  8. 更新を選択します。

    作成したアプリケーションごとに、これらのステップを繰り返します。

重要

サービス管理者アクセストークンを生成するために作成したアプリケーションを選択し、必ずSESSION:ROLE:POLARIS_ACCOUNT_ADMIN の権限を API に割り当ててください。そうでない場合は、サービス管理者アクセストークンを生成できません。

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

セキュリティ統合の作成などのタスクには、ハイフンで区切られた組織名とSnowflake Open Catalogアカウント名が必要です。

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

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

ステップ3:セキュリティ統合を作成する

セキュリティ統合を作成するには、Snowflake CLI 接続を使用して CREATE SECURITY INTEGRATION コマンドを実行します。

 snow sql -q "create or replace security integration external_oauth_auth0
    type = external_oauth
    enabled = true
    external_oauth_type = custom
    external_oauth_issuer = 'https://<Auth0_domain>/'
    external_oauth_jws_keys_url = 'https://<Auth0_domain>/.well-known/jwks.json'
    external_oauth_audience_list = ('https://<your_org_name>-<your_open_catalog_account_name>.snowflakecomputing.com')
    external_oauth_token_user_mapping_claim = 'sub'
    external_oauth_snowflake_user_mapping_attribute = 'login_name'
    EXTERNAL_OAUTH_SCOPE_DELIMITER = ' '
    EXTERNAL_OAUTH_SCOPE_MAPPING_ATTRIBUTE = 'scope';"
Copy

条件:

  • <Auth0_domain> は、Auth0ドメインです。この値を見つけるには、Auth0で、アプリケーション > アプリケーション > [アプリケーションの名前] > 設定 > ドメインフィールドにナビゲートします。

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

    例: ABCDEFG-MYACCOUNT1

    この形式でこれらの値を取得するには、[組織名とアカウント名を取得する](#step-2-retrieve-your-organization-and-account-name)をご参照ください。

ステップ4:サービス管理者のアクセストークンの生成

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

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

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

ACCESS_TOKEN=$(curl -X POST https://<Auth0_domain>/oauth/token --header 'content-type: application/x-www-form-urlencoded' --data grant_type=client_credentials --data client_id=<client_id> --data client_secret=<client_secret> --data-urlencode "audience=https://<your_org_name>-<your_open_catalog_account_name>.snowflakecomputing.com" --data "scope=SESSION:ROLE:POLARIS_ACCOUNT_ADMIN" | jq -r '.access_token')
Copy

条件:

  • <Auth0_domain> は、Auth0ドメインです。この値を見つけるには、Auth0で、アプリケーション > アプリケーション > [アプリケーションの名前] > 設定 > ドメインフィールドにナビゲートします。

  • <client_id>は、POLARIS_ACCOUNT_ADMIN 権限へのアクセスを付与するAuth0のアプリケーションに対するクライアント ID です。この値を見つけるには、Auth0で、アプリケーション > アプリケーション > [アプリケーションの名前] > 設定 > クライアント IDフィールドにナビゲートします。

  • <client_secret> は、POLARIS_ACCOUNT_ADMIN 権限へのアクセスを付与するAuth0のアプリケーションに対するクライアントシークレットです。この値を見つけるには、Auth0で、アプリケーション > アプリケーション > [アプリケーションの名前] > 設定 > クライアントシークレットフィールドにナビゲートします。

  • <audience> は API の識別子です。この値を見つけるには、Auth0で、アプリケーション > APIs> API を選択 > 設定 > 識別子フィールドにナビゲートします。

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

    例: ABCDEFG-MYACCOUNT1

    この形式でこれらの値を取得するには、[組織名とアカウント名を取得する](#step-2-retrieve-your-organization-and-account-name)をご参照ください。

  • POLARIS_ACCOUNT_ADMIN は、Open Catalogの組み込みロールの名前で、Open Catalogで管理タスクを実行できます。これには、外部 OAuth の構成が含まれます。Open Catalog UI では、このロールはサービス管理者ロールと呼ばれます。

ステップ5:カスタムロールを作成する

このステップでは、Snowflake CLI 接続を使用してカスタムロールを作成します。

カスタムロールを作成すると、後でカタログロールを付与し、そのカスタムロールをサービスプリンシパルに付与して、サービスプリンシパルに権限を付与できます。カスタムロールの詳細情報については、[カスタムロール](access-control.md#custom-role)をご参照ください。Open Catalogの RBAC モデルの詳細については、[RBAC モデル](./access-control.md#rbac-model)をご参照ください。

注釈

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

次の例では、OPEN_CATALOG_ADMIN カスタムロールを作成します。

snow sql -q "create role OPEN_CATALOG_ADMIN;"
Copy

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

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

カスタムロールにカタログロールを付与した後、カスタムロールをサービスプリンシパルに付与し、プリンシパルロールに付与されたカタログロールに付与された権限をサービスプリンシパルに付与します。Open Catalogの RBAC モデルの詳細については、[RBAC モデル](./access-control.md#rbac-model)をご参照ください。

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

  • カタログにカタログ管理者権限を持つサービスプリンシパルを付与したい場合は、[カタログ管理者権限を持つカタログロールにカスタムロールを付与する](#grant-a-catalog-role-with-catalog-admin-privileges-to-the-custom-role)をご参照ください。カタログ管理者が持つ権限については、[カタログ管理者ロール](access-control.md#catalog-admin-role)をご参照ください。

  • 指定した権限セットをサービスプリンシパルに付与したい場合は、[カスタムロールに指定した権限セットを持つカタログロールを付与する](#grant-a-catalog-role-with-a-set-of-privileges-you-specify-to-the-custom-role)をご参照ください。 たとえば、カスタムロールにcatalog_reader、catalog_writer、またはcatalog_metadata_readerカタログロールを付与する場合は、このオプションを選択します。

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

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

  1. [カタログロールを作成する](#create-a-catalog-role)。

  2. [カタログ管理者権限をカタログロールに付与する](#grant-catalog-admin-privileges-to-the-catalog-role)。

  3. [カタログロールをカスタムロールに付与する](#grant-the-catalog-role-to-a-custom-role)。

カタログ・ロールの作成

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

 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_external_oauth をご参照ください。

  • {Catalogname} は、カタログロールを作成するOpen Catalogのカタログ名です。

  • <service_admin_access_token> は、 :ref: 自分で生成したサービス管理者アクセストークン <label-generate_service_admin_access_token_external_oauth> です。

  • <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_external_oauth をご参照ください。

  • {Catalogname} は、権限を付与するOpen Catalogのカタログ名です。

  • {catalogRoleName} は、権限を付与するカタログロールの名前です。例: TableReader。

  • <service_admin_access_token> は、 :ref: 自分で生成したサービス管理者アクセストークン <label-generate_service_admin_access_token_external_oauth> です。

  • 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_external_oauth をご参照ください。

  • {customRoleName} は、カタログ管理者権限を持つカタログロールを付与するカスタムロールの名前です。例: OPEN_CATALOG_ADMIN。

  • {catalogName} は、カタログ管理者権限を付与するOpen Catalogのカタログの名前です。

  • <catalog_role_name> は、カタログ管理者権限が付与されているカタログのカタログロールの名前です。例:CatalogAdmin。

  • <service_admin_access_token> は、 :ref: 自分で生成したサービス管理者アクセストークン <label-generate_service_admin_access_token_external_oauth> です。

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

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

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

  1. [カタログロールを作成する](#create-a-catalog-role)。

  2. [カタログロールに権限を付与する](#grant-privileges-to-the-catalog-role)。これらの権限により、サービスプリンシパルはOpen Catalogでアクションを実行できます。

  3. [カタログロールをカスタムロールに付与する](#grant-the-catalog-role-to-a-custom-role)。

カタログ・ロールの作成

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

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

 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_external_oauth をご参照ください。

  • {Catalogname} は、カタログロールを作成するOpen Catalogのカタログ名です。

  • <service_admin_access_token> は、 :ref: 自分で生成したサービス管理者アクセストークン <label-generate_service_admin_access_token_external_oauth> です。

  • <catalog_role_name> で、カタログロールの名前を指定します。例: TableReader。

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

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

  • [カタログロールにカタログ権限を付与する](#grant-catalog-privileges-on-the-catalog-role)

  • [カタログロールへの名前空間権限の付与](#grant-namespace-privileges-on-the-catalog-role)

  • [カタログロールにテーブル権限を付与する](#grant-table-privileges-on-the-catalog-role)

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

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

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_external_oauth をご参照ください。

  • {Catalogname} は、権限を付与するOpen Catalogのカタログ名です。

  • {catalogRoleName} は、権限を付与するカタログロールの名前です。例: TableReader。

  • <service_admin_access_token> は、 :ref: 自分で生成したサービス管理者アクセストークン <label-generate_service_admin_access_token_external_oauth> です。

  • <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_external_oauth をご参照ください。

  • {Catalogname} は、権限を付与するOpen Catalogのカタログ名です。

  • {catalogRoleName} は、権限を付与するカタログロールの名前です。例: TableReader。

  • <service_admin_access_token> は、 :ref: 自分で生成したサービス管理者アクセストークン <label-generate_service_admin_access_token_external_oauth> です。

  • <namespace_name> is the name of the namespace you want to grant privileges to. To grant privileges to a nested namespace, specify it, along with each parent namespace, separated by a comma. For example: 「ns1」、「ns1a」.

  • <privilege_name> は、カタログロールに付与する名前空間の権限の名前です。使用可能な権限のリストについては、 アクセス制御権限 <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_external_oauth をご参照ください。

  • {Catalogname} は、権限を付与するOpen Catalogのカタログ名です。

  • {catalogRoleName} は、権限を付与するカタログロールの名前です。例: TableReader。

  • <service_admin_access_token> は、 :ref: 自分で生成したサービス管理者アクセストークン <label-generate_service_admin_access_token_external_oauth> です。

  • <namespace_name> is the name of the namespace whose table you want to grant privileges to. To grant privileges on a table located under a nested namespace, specify the nested namespace, along with each parent namespace, separated by a comma. For example: 「ns1」、「ns1a」.

  • <table_name> は、権限を付与するテーブルの名前です。

  • <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_external_oauth をご参照ください。

  • {customRoleName} は、カタログロールを付与するカスタムロールの名前です。

  • {catalogName} は、権限を付与するカタログロールを作成したOpen Catalogのカタログの名前です。

  • <service_admin_access_token> は、 :ref: 自分で生成したサービス管理者アクセストークン <label-generate_service_admin_access_token_external_oauth> です。

  • <catalog_role_name> は、カスタムロールに付与するカタログロールの名前です。

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

ステップ7:サービスプリンシパルを作成する

ステップでは、Snowflake CLI 接続を使用してサービスプリンシパルを作成します。

注釈

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

外部 OAuth を介してOpen Catalogに接続するには、サービスプリンシパルが必要です。Open Catalogでは、サービスプリンシパルは service に設定された TYPE パラメーターを持つユーザーです。したがって、CREATEUSER コマンドを使用して TYPE=service の使用を作成します。

サービスプリンシパルを作成するには、以下のコマンドを実行します。

snow sql -q "CREATE USER <user_name> LOGIN_NAME='<client_id>@clients' TYPE='service';"
Copy

条件:

  • <user_name> には、サービスプリンシパルの名前を指定します。

  • <client_id> には、アプリケーション用クライアント ID を指定します。この値を見つけるには、Auth0で、アプリケーション > アプリケーション > [アプリケーションの名前] > 設定 > クライアント IDフィールドにナビゲートします。

ステップ8:サービスプリンシパルにカスタムロールを付与する

このセクションでは、Snowflake CLI 接続を使用して、1つ以上のサービスプリンシパルにカスタムロールを付与します。その結果、カスタムロールに付与されたカタログロールに付与された権限をサービスプリンシパルに付与します。Open Catalogの RBAC モデルの詳細については、[RBAC モデル](./access-control.md#rbac-model)をご参照ください。

注釈

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

重要

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

次の例では、service_principal1 サービスプリンシパルに ENGINEER のカスタムロールが付与されます。

snow sql -q "GRANT ROLE ENGINEER to user service_principal1;"
Copy

ロールがサービスプリンシパルに付与されていることを検証するには、以下を実行します。

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

応答で、作成したカスタムロール(ロール列)が、作成したサービスプリンシパル(grantele_name列)に割り当てられていることを確認します。

(任意)ステップ9:アクセストークンを生成する

このセクションでは、外部 OAuth でOpen Catalogに接続するために使用できるアクセストークンを生成できます。ただし、このメソッドで接続した場合は、アクセストークンを手動で更新する必要があります。

または、この手順をスキップして、後で推奨メソッドの[自動更新トークンを使用してOpen Catalogに接続する]((./external-oauth-connect.md#connect-with-open-catalog-by-using-automatic-refresh-token-preferred-method)こともできます。

次のカールコマンドを使用して、アクセストークンを生成します。

ACCESS_TOKEN=$(curl -X POST https://<Auth0_domain>/oauth/token --header 'content-type: application/x-www-form-urlencoded' --data grant_type=client_credentials --data client_id=<client_id> --data client_secret=<client_secret> --data-urlencode "audience=https://<your_org_name>-<your_open_catalog_account_name>.snowflakecomputing.com" --data "scope=SESSION:ROLE:<custom_role_name>" | jq -r '.access_token')
Copy

条件:

  • <Auth0_domain> は、Auth0ドメインです。この値を見つけるには、Auth0で、アプリケーション > アプリケーション > [アプリケーションの名前] > 設定 > ドメインフィールドにナビゲートします。

  • <client_id>はAuth0のアプリケーション用のクライアント ID です。この値を見つけるには、Auth0で、アプリケーション > アプリケーション > [アプリケーションの名前] > 設定 > クライアント IDフィールドにナビゲートします。

  • <client_secret> はAuth0の アプリケーション用のクライアントシークレットです。この値を見つけるには、Auth0で、アプリケーション > アプリケーション > [アプリケーションの名前] > 設定 > クライアントシークレットフィールドにナビゲートします。

  • <audience> は API の識別子です。この値を見つけるには、Auth0で、アプリケーション > APIs > API を選択 > 設定にナビゲートします。

    識別子フィールド。

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

    例: ABCDEFG-MYACCOUNT1

    この形式でこれらの値を取得するには、[組織名とアカウント名を取得する](#step-2-retrieve-your-organization-and-account-name)をご参照ください。

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

ステップ10:外部 OAuth でOpen Catalogに接続する

このセクションでは、外部 OAuth を介してサービスプリンシパルをOpen Catalogに接続します。手順については、[外部 OAuth でのSnowflakeOpen Catalogへの接続](./external-oauth-connect.md)をご参照ください。これにはアクセストークンまたはトークンの自動更新を使用して接続するための手順が含まれます。