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
応答は次のようになります。
+------------------------------------------------------------------------------+ | 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 | +-----------------------+
ステップ2:組織とアカウント名を取得する¶
セキュリティ統合の作成などのタスクには、ハイフンで区切られた組織名とSnowflake Open Catalogアカウント名が必要です。
この形式で組織名とSnowflake Open Catalogアカウント名を取得するには、Snowflake CLI で次のコマンドを実行します。
snow sql -q "SELECT CURRENT_ORGANIZATION_NAME() || '-' || CURRENT_ACCOUNT_NAME();"
応答で返された値をコピーし、後で使用するためにテキストエディターに貼り付けます。例:
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';"
条件:
<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')
条件:
<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;"
ステップ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カタログロールを付与する場合は、このオプションを選択します。
カタログ管理者権限を持つカタログロールをカスタムロールに付与する¶
このセクションでは、カタログ管理者権限を持つカタログロールをカスタムロールに付与します。ワークフローは次のとおりです。
[カタログロールを作成する](#create-a-catalog-role)。
[カタログ管理者権限をカタログロールに付与する](#grant-catalog-admin-privileges-to-the-catalog-role)。
[カタログロールをカスタムロールに付与する](#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>" }'
- 条件:
<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。
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_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の権限の名前です。
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_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>です。
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.
必要に応じて、この手順を繰り返し、他のカタログのカタログ管理者権限をカスタムロールに付与します。
指定した権限セットを持つカタログロールをカスタムロールに付与する¶
ワークフローは次のとおりです。
[カタログロールを作成する](#create-a-catalog-role)。
[カタログロールに権限を付与する](#grant-privileges-to-the-catalog-role)。これらの権限により、サービスプリンシパルはOpen Catalogでアクションを実行できます。
[カタログロールをカスタムロールに付与する](#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>" }'
- 条件:
<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。
Snowflakeラボで、 カタログ <https://github.com/Snowflake-Labs/polaris-cli-opencatalog-demo?tab=readme-ov-file#catalog-1>_ をご参照ください。
See カタログ・ロールの作成.
カタログロールに権限を付与する¶
カタログ全体、またはカタログ内の名前空間やテーブルに権限を付与できます。
[カタログロールにカタログ権限を付与する](#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>"}}'
- 条件:
<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>_ をご参照ください。
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_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>_ をご参照ください。
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_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>_ をご参照ください。
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_external_oauthをご参照ください。
{customRoleName}は、カタログロールを付与するカスタムロールの名前です。
{catalogName}は、権限を付与するカタログロールを作成したOpen Catalogのカタログの名前です。
<service_admin_access_token>は、 :ref:自分で生成したサービス管理者アクセストークン <label-generate_service_admin_access_token_external_oauth>です。
<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.
必要であれば、このワークフローを繰り返して、作成した追加のカタログロールをカスタムロールに付与します。
ステップ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';"
条件:
<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;"
ロールがサービスプリンシパルに付与されていることを検証するには、以下を実行します。
snow sql -q "show grants to user service_principal1;"
応答で、作成したカスタムロール(ロール列)が、作成したサービスプリンシパル(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')
条件:
<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 asENGINEER。
ステップ10:外部 OAuth でOpen Catalogに接続する¶
このセクションでは、外部 OAuth を介してサービスプリンシパルをOpen Catalogに接続します。手順については、[外部 OAuth でのSnowflakeOpen Catalogへの接続](./external-oauth-connect.md)をご参照ください。これにはアクセストークンまたはトークンの自動更新を使用して接続するための手順が含まれます。