External OAuth in Snowflake Open Catalog konfigurieren¶
Unter diesem Thema wird beschrieben, wie Sie externe Server konfigurieren, die OAuth für den Zugriff auf Snowflake Open Catalog verwenden.
Bemerkung
Unter diesem Thema wird gezeigt, wie Sie Auth0 zum Konfigurieren von External OAuth für Open Catalog verwenden. Die Schritte zur Konfiguration in Okta oder Microsoft Entra ID sind ähnlich.
Voraussetzungen¶
Erstellen Sie einen oder mehrere Kataloge in Ihrem Open Catalog-Konto.
Stellen Sie sicher, dass Sie über ein Konto bei einem Identitätsanbieter (IdP) verfügen. Zu Demonstrationszwecken wird hier „Auth0“ als IdP verwendet. Weitere Informationen zum Erstellen eines Auth0-Kontos für Ihr Unternehmen oder Ihre Organisation finden Sie unter https://auth0.com/. Der Prozess ist jedoch für Okta und Microsoft Entra ID ähnlich.
Auf Ihrem Computer muss Snowflake CLI installiert sein.
Um External OAuth konfigurieren zu können, müssen Sie die Rolle des Service- Administrators in Open Catalog besitzen. Weitere Informationen finden Sie unter Benutzerrollen. In Snowflake CLI wird diese Rolle als POLARIS_ACCOUNT_ADMIN ausgegeben.
Bevor Sie beginnen¶
Um External OAuth zu konfigurieren, müssen Sie eine Snowflake-CLI-Verbindung für Open Catalog erstellen.
Um diese Verbindung zu erstellen, benötigen Sie Ihren vollständigen Open Catalog-Kontobezeichner, der den Namen Ihrer Snowflake-Organisation und den Namen Ihres Open Catalog-Kontos enthält, z. B. <orgname>.<my-snowflake-open-catalog-account-name>.
Informationen dazu, wie Sie den Namen Ihrer Snowflake-Organisation (
<orgname>) finden, erhalten Sie unter :ref:label-account_name_find.Informationen dazu, wie Sie den Namen Ihres Snowflake Open Catalog-Kontos (
<my-snowflake-open-catalog-account-name>) finden, erhalten Sie unter :doc:/user-guide/opencatalog/find-account-name.
Eine Snowflake CLI-Verbindung erstellen¶
Erstellen Sie eine Snowflake-CLI-Verbindung für Ihr Open Catalog-Konto, sodass Sie darüber External OAuth für das Konto konfigurieren können.
Schritt 1: Eine Snowflake-CLI-Verbindung für Snowflake Open Catalog hinzufügen¶
Add a connection with the following values. For all other parameters, press Enter to skip specifying a value for the parameter.
Konfigurationsparameter für die Verbindung
Wert
Name for this connection
Geben Sie einen Namen für die Verbindung an, z. B.
myopencatalogconnection.Account name
Geben Sie den Namen Ihrer Snowflake-Organisation, gefolgt vom Namen Ihres Open Catalog-Kontos, in folgendem Format an:
<orgname>-<my-snowflake-open-catalog-account-name>.Beispiel:
ABCDEFG-MYACCOUNT1.Informationen dazu, wie Sie diese Namen finden, erhalten Sie unter
Bevor Sie beginnen_.Username
Geben Sie Ihren Benutzernamen für Open Catalog an, z. B.
jsmith.Password [optional]
Dieser Parameter ist nicht optional, wenn Sie eine Verbindung für Open Catalog erstellen.
Geben Sie Ihr Kennwort für Open Catalog ein, z. B.
MyPassword123456789.Role for the connection [optional]
Dieser Parameter ist nicht optional, wenn Sie eine Verbindung für Open Catalog erstellen.
Sie müssen
POLARIS_ACCOUNT_ADMINeingeben.
Schritt 2: Snowflake-CLI-Verbindung testen¶
Um Ihre CLI-Verbindung zu testen, folgen Sie diesem Beispiel, bei dem die Verbindung für
myopencatalogconnectiongetestet wird:snow connection test -c myopencatalogconnection
Die Antwort sollte wie folgt aussehen:
+------------------------------------------------------------------------------+ | 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 | +------------------------------------------------------------------------------+
Schritt 3: Eine Standard-Snowflake-CLI-Verbindung einrichten¶
Um sicherzustellen, dass die von Ihnen verwendete Verbindung immer über die erforderliche POLARIS_ACCOUNT_ADMIN-Rolle verfügt, können Sie die Snowflake-CLI-Verbindung, die Sie für Open Catalog erstellt haben, als Standardverbindung festlegen. Weitere Informationen zur Standardverbindung finden Sie unter :ref:label-cli_set_default_connection.
Folgen Sie diesem Beispiel, bei dem die
myopencatalogconnection-Verbindung als Standard festgelegt ist:snow connection set-default myopencatalogconnection
Um zu überprüfen, ob Sie den richtigen Benutzer und die richtige Rolle verwenden, führen Sie Folgendes aus:
snow sql -q "Select current_user(); select current_role();"
Die Antwort sollte Ihren Open Catalog-Benutzernamen zurückgeben und CURRENT ROLE sollte POLARIS_ACCOUNT_ADMIN sein.
+----------------+ | CURRENT_USER() | |----------------| | JSMITH | +----------------+ select current_role(); +-----------------------+ | CURRENT_ROLE() | |-----------------------| | POLARIS_ACCOUNT_ADMIN | +-----------------------+
Schritt 2: Organisations- und Kontonamen abrufen¶
Sie benötigen Ihren Organisationsnamen und den Namen Ihres Snowflake Open Catalog-Kontos, getrennt durch einen Bindestrich, für Aufgaben wie das Erstellen einer Sicherheitsintegration.
Um den Organisationsnamen und den Namen Ihres Snowflake Open Catalog-Kontos in diesem Format abzurufen, führen Sie in der Snowflake-CLI folgenden Befehl aus:
snow sql -q "SELECT CURRENT_ORGANIZATION_NAME() || '-' || CURRENT_ACCOUNT_NAME();"
Kopieren Sie in der Antwort die zurückgegebenen Werte, und fügen Sie sie zur späteren Verwendung in einen Texteditor ein. Beispiel:
ABCDEFG-MYACCOUNT1.
Schritt 3: Sicherheitsintegration erstellen¶
Um eine Sicherheitsintegration zu erstellen, führen Sie den Befehl CREATE SECURITY INTEGRATION unter Verwendung einer Snowflake-CLI-Verbindung aus.
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';"
Wobei:
<Auth0_domain>ist Ihre Auth0-Domäne. Um diesen Wert zu finden, navigieren Sie in Auth0 zu Applications > Applications > [Name Ihrer Anwendung] > Settings > Feld Domain.<your_org_name>-<your_open_catalog_account_name>ist der Name Ihrer Organisation und der Name Ihres Snowflake Open Catalog-Kontos, getrennt durch einen Bindestrich.Beispiel:
ABCDEFG-MYACCOUNT1.Informationen dazu, wie Sie diese Werte in diesem Format abrufen, finden Sie unter Organisations- und Kontonamen abrufen.
Schritt 4: Service-Administrator-Zugriffstoken generieren¶
Um External OAuth programmgesteuert zu konfigurieren, benötigen Sie ein Service-Administrator-Zugriffstoken. Sie haben jedoch die Möglichkeit, die Open Catalog-UI zu verwenden, um einige Aufgaben zur Konfiguration von External OAuth auszuführen.
Wenn Sie bereits ein Service-Administrator-Zugriffstoken für sich selbst erstellt haben und dieses noch aktiv ist, können Sie diesen Schritt überspringen.
Um den Service-Administrator-Zugriffstoken zu generieren, führen Sie in der Snowflake-CLI den folgenden Befehl aus, und kopieren Sie den Wert in einen Texteditor:
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')
Wobei:
<Auth0_domain>ist Ihre Auth0-Domäne. Um diesen Wert zu finden, navigieren Sie in Auth0 zu Applications > Applications > [Name Ihrer Anwendung] > Settings > Feld Domain.<client_id>ist die Client-ID für Ihre Anwendung in Auth0, der Sie Zugriff auf die Berechtigung POLARIS_ACCOUNT_ADMIN gewähren. Um diesen Wert zu finden, navigieren in Auth0 zu Applications > Applications > [Name Ihrer Anwendung] > Settings > Feld Client ID<client_secret>ist das Clientgeheimnis für Ihre Anwendung in Auth0, der Sie Zugriff auf die Berechtigung POLARIS_ACCOUNT_ADMIN gewähren. Um diesen Wert zu finden, navigieren in Auth0 zu Applications > Applications > [Name Ihrer Anwendung] > Settings > Feld Client Secret<audience>ist der Bezeichner Ihrer API. Um diesen Wert zu finden, navigieren in Auth0 zu Applications > APIs, und wählen Sie Ihre API > Settings > Feld Identifier.<your_org_name>-<your_open_catalog_account_name>ist der Name Ihrer Organisation und der Name Ihres Snowflake Open Catalog-Kontos, getrennt durch einen Bindestrich.Beispiel:
ABCDEFG-MYACCOUNT1.Informationen dazu, wie Sie diese Werte in diesem Format abrufen, finden Sie unter Organisations- und Kontonamen abrufen.
POLARIS_ACCOUNT_ADMINist der Name der in Open Catalog integrierten Rolle, die es Ihnen ermöglicht, administrative Aufgaben in Open Catalog durchzuführen, einschließlich der Konfiguration von External OAuth. Auf der Open Catalog-UI wird diese Rolle als Service-Administrator-Rolle bezeichnet.
Schritt 5: Kundenspezifische Rolle erstellen¶
In diesem Schritt verwenden Sie Ihre Snowflake-CLI-Verbindung, um eine kundenspezifische Rolle zu erstellen.
Erstellen Sie eine kundenspezifische Rolle, damit Sie ihr später Katalogrollen zuweisen und die kundenspezifische Rolle einem Dienstprinzipal zuweisen können, wodurch dieser Dienstprinzipal mit Berechtigungen ausgestattet wird. Weitere Informationen zu kundenspezifischen Rollen finden Sie unter Kundenspezifische Rolle. Weitere Informationen zum RBAC-Modell in Open Catalog finden Sie unter RBAC-Modell.
Bemerkung
Wenn der standardmäßigen Snowflake-CLI-Verbindung, die Sie eingerichtet haben, nicht die Rolle POLARIS_ACCOUNT_ADMIN zugewiesen ist, müssen Sie in Ihren Befehl die folgende Anweisung aufnehmen: USE ROLE POLARIS_ACCOUNT_ADMIN.
Im folgenden Beispiel wird eine kundenspezifische OPEN_CATALOG_ADMIN-Rolle erstellt:
snow sql -q "create role OPEN_CATALOG_ADMIN;"
Schritt 6: Kundenspezifische Rolle zu einem Katalog zuweisen¶
In diesem Abschnitt weisen Sie der von Ihnen erstellten kundenspezifischen Rolle eine Katalogrolle zu.
Nachdem Sie der kundenspezifischen Rolle eine Katalogrolle zugewiesen haben, weisen Sie die kundenspezifische Rolle einem Dienstprinzipal zu, um dem Dienstprinzipal alle Berechtigungen zu erteilen, die Katalogrollen gewährt werden, die der Prinzipalrolle zugewiesen werden. Weitere Informationen zum RBAC-Modell in Open Catalog finden Sie unter RBAC-Modell.
Sie können der kundenspezifischen Rolle eine Katalogrolle zuweisen, die über Katalogadministratorberechtigungen für den Katalog oder über eine Reihe von Berechtigungen für den Katalog verfügt, die Sie angeben:
Wenn Sie einem Dienstprinzipal Katalogadministratorberechtigungen für einen Katalog erteilen möchten, gewähren Sie der kundenspezifischen Rolle eine Katalogrolle mit Katalogadministratorberechtigungen. Informationen darüber, welche Berechtigungen ein Katalogadministrator hat, finden Sie unter Katalogadministratorrolle.
Wenn Sie dem Dienstprinzipal eine Reihe von Berechtigungen erteilen möchten, die Sie angeben, gewähren Sie der kundenspezifischen Rolle eine Katalogrolle mit einer Reihe definierter Berechtigungen. Wählen Sie z. B. diese Option, wenn Sie der kundenspezifischen Rolle die Katalogrolle „catalog_reader“, „catalog_writer“ oder „catalog_metadata_reader“ zuweisen möchten.
Der kundenspezifischen Rolle eine Katalogrolle mit Katalogadministratorberechtigungen zuweisen¶
In diesem Abschnitt weisen Sie der kundenspezifischen Rolle eine Katalogrolle mit Katalogadministratorberechtigungen zu. Der Workflow ist wie folgt:
Eine Katalogrolle erstellen¶
Führen Sie den folgenden Befehl aus, um eine Katalogrolle in dem von Ihnen angegebenen Katalog zu erstellen:
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>" }'
- Wobei:
<your_org_name>-<your_open_catalogaccount_name>ist der Name Ihrer Organisation und der Name Ihres Snowflake Open Catalog-Kontos, getrennt durch einen Bindestrich.Beispiel:
ABCDEFG-MYACCOUNT1.Informationen zum Abrufen dieser Werte in diesem Format finden Sie unter :ref:
label-retrieve_org_account_name_external_oauth.
{Catalogname}ist der Name des Katalogs in Open Catalog, in dem Sie eine Katalogrolle erstellen möchten.
<service_admin_access_token>ist der :ref:Service-Administrator-Zugriffstoken, den Sie generiert haben <label-generate_service_admin_access_token_external_oauth>.Geben Sie für
<catalog_role_name>einen Namen für die Katalogrolle an. Beispiel: CatalogAdmin.
Siehe Katalog <https://github.com/Snowflake-Labs/polaris-cli-opencatalog-demo?tab=readme-ov-file#catalog-1>_ in Snowflake Labs.
Siehe :doc:/user-guide/opencatalog/create-catalog-role.
Der Katalogrolle Katalogadministratorberechtigungen erteilen¶
Führen Sie den folgenden Befehl aus:
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"}}'
- Wobei:
<your_org_name>-<your_open_catalogaccount_name>ist der Name Ihrer Organisation und der Name Ihres Snowflake Open Catalog-Kontos, getrennt durch einen Bindestrich.Beispiel:
ABCDEFG-MYACCOUNT1.Informationen zum Abrufen dieser Werte in diesem Format finden Sie unter :ref:
label-retrieve_org_account_name_external_oauth.
{Catalogname}ist der Name eines Katalog in Open Catalog, für den Sie Berechtigungen erteilen möchten.
{catalogRoleName}ist der Name der Katalogrolle, der Sie Berechtigungen erteilen möchten. Beispiel: TableReader.
<service_admin_access_token>ist der :ref:Service-Administrator-Zugriffstoken, den Sie generiert haben <label-generate_service_admin_access_token_external_oauth>.
CATALOG_MANAGE_CONTENTist der Name der Berechtigung in Open Catalog mit Katalogadministratorberechtigungen.
Siehe Berechtigungen <https://github.com/Snowflake-Labs/polaris-cli-opencatalog-demo?tab=readme-ov-file#privileges>_ in Snowflake Labs. Stellen Sie sicher, dass Sie entsprechend der Anleitung der Katalogrolle die Berechtigung CATALOG_MANAGE_CONTENT erteilen.
Siehe :ref:Katalogberechtigungen für eine Katalogrolle gewähren <label-grant_catalog_privileges_catalog_role>. Wählen Sie die Berechtigung CATALOG_MANAGE_CONTENT aus.
Katalogrolle einer kundenspezifischen Rolle zuweisen¶
Wichtig
Bei kundenspezifischen Rollen wird zwischen Groß- und Kleinschreibung unterschieden. Sie sollten eine kundenspezifische Rolle nur mit Großbuchstaben angeben, auch wenn Sie sie mit Kleinbuchstaben oder mit Klein- und Großbuchstaben erstellen.
Führen Sie den folgenden Befehl aus:
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}}'
- Wobei:
<your_org_name>-<your_open_catalogaccount_name>ist der Name Ihrer Organisation und der Name Ihres Snowflake Open Catalog-Kontos, getrennt durch einen Bindestrich.Beispiel:
ABCDEFG-MYACCOUNT1.Informationen zum Abrufen dieser Werte in diesem Format finden Sie unter :ref:
label-retrieve_org_account_name_external_oauth.
{customRoleName}ist der Name der kundenspezifischen Rolle, die Sie mit der Katalogrolle zuweisen möchten, die über Katalogadministratorberechtigungen verfügt. Beispiel: OPEN_CATALOG_ADMIN.
{catalogName}ist der Name eines Katalogs in Open Catalog, für den Sie Katalogadministratorberechtigungen erteilen möchten.
<catalog_role_name>ist der Name der Katalogrolle für einen Katalog, der über Katalogadministratorberechtigungen verfügt. Beispiel: CatalogAdmin.
<service_admin_access_token>ist der :ref:Service-Administrator-Zugriffstoken, den Sie generiert haben <label-generate_service_admin_access_token_external_oauth>.
Siehe Zuweisungen <https://github.com/Snowflake-Labs/polaris-cli-opencatalog-demo?tab=readme-ov-file#grants>_ in Snowflake Labs.
Siehe :doc:/user-guide/opencatalog/secure-catalogs. In dieser Anleitung wird beschrieben, wie Sie einer Prinzipalrolle eine Katalogrolle zuweisen. Der Prozess ist aber derselbe. Anstatt eine Prinzipalrolle aus der Liste auszuwählen, wählen Sie Ihre kundenspezifische Rolle aus, der Sie die Katalogrolle zuweisen möchten, die über die Berechtigung CATALOG_MANAGE_CONTENT verfügt.
Wiederholen Sie diesen Schritt bei Bedarf, um der kundenspezifischen Rolle Katalogadministratorberechtigungen für andere Kataloge zuzuweisen.
Weisen Sie der kundenspezifischen Rolle eine Katalogrolle mit einem Satz von Berechtigungen zu, die Sie festlegen.¶
Der Workflow ist wie folgt:
Der Katalogrolle Berechtigungen erteilen. Diese Berechtigungen ermöglichen es dem Dienstprinzipal, Aktionen in Open Catalog durchzuführen.
Eine Katalogrolle erstellen¶
In diesem Abschnitt erstellen Sie eine Katalogrolle. Weitere Informationen über Katalogrollen finden Sie unter Katalogrolle.
Führen Sie den folgenden Befehl aus, um eine Katalogrolle in dem von Ihnen angegebenen Katalog zu erstellen:
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>" }'
- Wobei:
<your_org_name>-<your_open_catalogaccount_name>ist der Name Ihrer Organisation und der Name Ihres Snowflake Open Catalog-Kontos, getrennt durch einen Bindestrich.Beispiel:
ABCDEFG-MYACCOUNT1.Informationen zum Abrufen dieser Werte in diesem Format finden Sie unter :ref:
label-retrieve_org_account_name_external_oauth.
{Catalogname}ist der Name des Katalogs in Open Catalog, in dem Sie eine Katalogrolle erstellen möchten.
<service_admin_access_token>ist der :ref:Service-Administrator-Zugriffstoken, den Sie generiert haben <label-generate_service_admin_access_token_external_oauth>.Geben Sie für
<catalog_role_name>einen Namen für die Katalogrolle an. Beispiel: TableReader.
Siehe Katalog <https://github.com/Snowflake-Labs/polaris-cli-opencatalog-demo?tab=readme-ov-file#catalog-1>_ in Snowflake Labs.
Siehe :doc:/user-guide/opencatalog/create-catalog-role.
Der Katalogrolle Berechtigungen erteilen¶
Sie können dem gesamten Katalog oder einem Namespace oder einer Tabelle im Katalog Berechtigungen erteilen:
Katalogberechtigungen für die Katalogrolle erteilen¶
Führen Sie den folgenden Befehl aus:
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>"}}'
- Wobei:
<your_org_name>-<your_open_catalogaccount_name>ist der Name Ihrer Organisation und der Name Ihres Snowflake Open Catalog-Kontos, getrennt durch einen Bindestrich.Beispiel:
ABCDEFG-MYACCOUNT1.Informationen zum Abrufen dieser Werte in diesem Format finden Sie unter :ref:
label-retrieve_org_account_name_external_oauth.
{Catalogname}ist der Name eines Katalog in Open Catalog, für den Sie Berechtigungen erteilen möchten.
{catalogRoleName}ist der Name der Katalogrolle, der Sie Berechtigungen erteilen möchten. Beispiel: TableReader.
<service_admin_access_token>ist der :ref:Service-Administrator-Zugriffstoken, den Sie generiert haben <label-generate_service_admin_access_token_external_oauth>.
<privilege_name>ist der Name der Berechtigung, die Sie der Katalogrolle erteilen möchten. Eine Liste der verfügbaren Berechtigungen finden Sie unterZugriffssteuerungsrechte <https://other-docs.snowflake.com/en/opencatalog/access-control#access-control-privileges>_.
Siehe Berechtigungen <https://github.com/Snowflake-Labs/polaris-cli-opencatalog-demo?tab=readme-ov-file#privileges>_ in Snowflake Labs.
Bemerkung
Das Beispiel in Snowflake Labs gewährt die Berechtigung CATALOG_MANAGE_CONTENT , die Katalogadministratorberechtigungen für den Katalog gewährt. Eine Liste der anderen verfügbaren Berechtigungen finden Sie unter Zugriffssteuerungsrechte <https://other-docs.snowflake.com/en/opencatalog/access-control#access-control-privileges>_ in der Open Catalog-Dokumentation.
Siehe :ref:Katalogberechtigungen für eine Katalogrolle erteilen <label-grant_catalog_privileges_catalog_role>.
Namespace-Berechtigungen für die Katalogrolle erteilen¶
Führen Sie den folgenden Befehl aus:
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>"}}'
- Wobei:
<your_org_name>-<your_open_catalogaccount_name>ist der Name Ihrer Organisation und der Name Ihres Snowflake Open Catalog-Kontos, getrennt durch einen Bindestrich.Beispiel:
ABCDEFG-MYACCOUNT1.Informationen zum Abrufen dieser Werte in diesem Format finden Sie unter :ref:
label-retrieve_org_account_name_external_oauth.
{Catalogname}ist der Name eines Katalog in Open Catalog, für den Sie Berechtigungen erteilen möchten.
{catalogRoleName}ist der Name der Katalogrolle, der Sie Berechtigungen erteilen möchten. Beispiel: TableReader.
<service_admin_access_token>ist der :ref:Service-Administrator-Zugriffstoken, den Sie generiert haben <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>ist der Name der Namespace-Berechtigung, die Sie der Katalogrolle erteilen möchten. Eine Liste der verfügbaren Berechtigungen finden Sie unterZugriffssteuerungsrechte <https://other-docs.snowflake.com/en/opencatalog/access-control#access-control-privileges>_.
Siehe Berechtigungen <https://github.com/Snowflake-Labs/polaris-cli-opencatalog-demo?tab=readme-ov-file#privileges>_ in Snowflake Labs.
Bemerkung
Das Beispiel in Snowflake Labs gewährt die Berechtigung CATALOG_MANAGE_CONTENT , die Katalogadministratorberechtigungen für den Katalog gewährt. Eine Liste der anderen verfügbaren Berechtigungen finden Sie unter Zugriffssteuerungsrechte <https://other-docs.snowflake.com/en/opencatalog/access-control#access-control-privileges>_ in der Open Catalog-Dokumentation.
Siehe :ref:Namespace-Berechtigungen für eine Katalogrolle erteilen <label-grant_namespace_privileges_catalog_role>.
Tabellenberechtigungen für die Katalogrolle erteilen¶
Führen Sie den folgenden Befehl aus:
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>"}}'
- Wobei:
<your_org_name>-<your_open_catalogaccount_name>ist der Name Ihrer Organisation und der Name Ihres Snowflake Open Catalog-Kontos, getrennt durch einen Bindestrich.Beispiel:
ABCDEFG-MYACCOUNT1.Informationen zum Abrufen dieser Werte in diesem Format finden Sie unter :ref:
label-retrieve_org_account_name_external_oauth.
{Catalogname}ist der Name eines Katalog in Open Catalog, für den Sie Berechtigungen erteilen möchten.
{catalogRoleName}ist der Name der Katalogrolle, der Sie Berechtigungen erteilen möchten. Beispiel: TableReader.
<service_admin_access_token>ist der :ref:Service-Administrator-Zugriffstoken, den Sie generiert haben <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>ist der Name der Tabelle, für die Sie Berechtigungen erteilen möchten.
<privilege_name>ist der Name der Berechtigung, die Sie der Katalogrolle erteilen möchten. Eine Liste der verfügbaren Berechtigungen finden Sie unterZugriffssteuerungsrechte <https://other-docs.snowflake.com/en/opencatalog/access-control#access-control-privileges>_.
Siehe Berechtigungen <https://github.com/Snowflake-Labs/polaris-cli-opencatalog-demo?tab=readme-ov-file#privileges>_ in Snowflake Labs.
Bemerkung
Das Beispiel in Snowflake Labs gewährt die Berechtigung CATALOG_MANAGE_CONTENT , die Katalogadministratorberechtigungen für den Katalog gewährt. Eine Liste der anderen verfügbaren Berechtigungen finden Sie unter Zugriffssteuerungsrechte <https://other-docs.snowflake.com/en/opencatalog/access-control#access-control-privileges>_ in der Open Catalog-Dokumentation.
Siehe :ref:Tabellenberechtigungen für eine Katalogrolle erteilen <label-grant_table_privileges_catalog_role>.
Katalogrolle einer kundenspezifischen Rolle zuweisen¶
Wichtig
Bei kundenspezifischen Rollen wird zwischen Groß- und Kleinschreibung unterschieden. Sie sollten eine kundenspezifische Rolle nur mit Großbuchstaben angeben, auch wenn Sie sie mit Kleinbuchstaben oder mit Klein- und Großbuchstaben erstellen.
Führen Sie den folgenden Befehl aus:
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}}'
- Wobei:
<your_org_name>-<your_open_catalogaccount_name>ist der Name Ihrer Organisation und der Name Ihres Snowflake Open Catalog-Kontos, getrennt durch einen Bindestrich.Beispiel:
ABCDEFG-MYACCOUNT1.Informationen zum Abrufen dieser Werte in diesem Format finden Sie unter :ref:
label-retrieve_org_account_name_external_oauth.
{customRoleName}ist der Name der kundenspezifischen Rolle, der Sie die Katalogrolle zuweisen möchten.
{catalogName}ist der Name eines Katalog in Open Catalog, in dem Sie die Katalogrolle erstellt haben, für die Sie Berechtigungen erteilen möchten.
<service_admin_access_token>ist der :ref:Service-Administrator-Zugriffstoken, den Sie generiert haben <label-generate_service_admin_access_token_external_oauth>.
<catalog_role_name>ist der Name der Katalogrolle, die Sie der kundenspezifischen Rolle zuweisen möchten.
Siehe Zuweisungen <https://github.com/Snowflake-Labs/polaris-cli-opencatalog-demo?tab=readme-ov-file#grants>_ in Snowflake Labs.
Siehe :doc:/user-guide/opencatalog/secure-catalogs. In dieser Anleitung wird beschrieben, wie Sie einer Prinzipalrolle eine Katalogrolle zuweisen. Der Prozess ist aber derselbe. Anstatt eine Prinzipalrolle aus der Liste auszuwählen, wählen Sie Ihre kundenspezifische Rolle aus.
Wiederholen Sie diesen Workflow bei Bedarf, um der kundenspezifischen Rolle weitere Katalogrollen zuzuweisen, die Sie erstellen.
Schritt 7: Einen Dienstprinzipal erstellen¶
In diesem Schritt verwenden Sie Ihre Snowflake-CLI-Verbindung, um einen Dienstprinzipal zu erstellen.
Bemerkung
Wenn der standardmäßigen Snowflake-CLI-Verbindung, die Sie eingerichtet haben, nicht die Rolle POLARIS_ACCOUNT_ADMIN zugewiesen ist, müssen Sie in Ihren Befehl die folgende Anweisung aufnehmen: USE ROLE POLARIS_ACCOUNT_ADMIN.
Um eine Verbindung zu Open Catalog über External OAuth herzustellen, benötigen wir einen Dienstprinzipal. In Open Catalog sind Dienstprinzipale Benutzer, für die der Parameter TYPE auf service festgelegt ist. Wir werden also den Befehl CREATE USER verwenden, um einen Benutzer vom TYPE=service zu erstellen.
Um einen Dienstprinzipal zu erstellen, führen Sie den folgenden Befehl aus:
snow sql -q "CREATE USER <user_name> LOGIN_NAME='<client_id>@clients' TYPE='service';"
Wobei:
Geben Sie unter
<user_name>einen Namen für den Dienstprinzipal an.Geben Sie unter
<client_id>die Client-ID für Ihre Anwendung an. Um diesen Wert zu finden, navigieren in Auth0 zu Applications > Applications > [Name Ihrer Anwendung] > Settings > Feld Client ID
Schritt 8: Dem Dienstprinzipal eine kundenspezifische Rolle zuweisen¶
In diesem Abschnitt verwenden Sie Ihre Snowflake-CLI-Verbindung, um die kundenspezifisch Rolle einem oder mehreren Dienstprinzipalen zuzuweisen. Damit geben Sie dem Dienstprinzipal die Berechtigungen, die für alle Katalogrollen gewährt werden, die der kundenspezifischen Rolle zugewiesen sind. Weitere Informationen zum RBAC-Modell in Open Catalog finden Sie unter RBAC-Modell.
Bemerkung
Wenn der standardmäßigen Snowflake-CLI-Verbindung, die Sie eingerichtet haben, nicht die Rolle POLARIS_ACCOUNT_ADMIN zugewiesen ist, müssen Sie in Ihren Befehl die folgende Anweisung aufnehmen: USE ROLE POLARIS_ACCOUNT_ADMIN.
Wichtig
Bei kundenspezifischen Rollen wird zwischen Groß- und Kleinschreibung unterschieden. Sie sollten eine kundenspezifische Rolle nur mit Großbuchstaben angeben, auch wenn Sie sie mit Kleinbuchstaben oder mit Klein- und Großbuchstaben erstellen.
Im folgenden Beispiel wird die kundenspezifische Rolle ENGINEER dem Dienstprinzipalservice_principal1 zugewiesen.
snow sql -q "GRANT ROLE ENGINEER to user service_principal1;"
Um zu validieren, ob die Rolle dem Dienstprinzipal zugewiesen wurde, gehen Sie wie folgt vor:
snow sql -q "show grants to user service_principal1;"
Überprüfen Sie in der Antwort, ob die von Ihnen erstellte kundenspezifische Rolle (Spalte role) dem von Ihnen erstellten Dienstprinzipal (Spalte grantee_name) zugewiesen ist.
(Optional) Schritt 9: Zugriffstoken generieren¶
In diesem Abschnitt können Sie ein Zugriffstoken generieren, das Sie verwenden können, um eine Verbindung zu Open Catalog mit External OAuth herzustellen. Wenn Sie eine Verbindung mit dieser Methode herstellen, müssen Sie das Zugriffstoken allerdings manuell aktualisieren.
Alternativ können Sie diesen Schritt überspringen und sich später mit Open Catalog mithilfe eines automatischen Aktualisierungstokens verbinden, was die bevorzugte Methode ist.
Verwenden Sie den folgenden curl-Befehl, um ein Zugriffstoken zu generieren:
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')
Wobei:
<Auth0_domain>ist Ihre Auth0-Domäne. Um diesen Wert zu finden, navigieren Sie in Auth0 zu Applications > Applications > [Name Ihrer Anwendung] > Settings > Feld Domain.<client_id>ist die Client-ID für Ihre Anwendung in Auth0. Um diesen Wert zu finden, navigieren in Auth0 zu Applications > Applications > [Name Ihrer Anwendung] > Settings > Feld Client ID<client_secret>ist das Clientgeheimnis für Ihre Anwendung in Auth0. Um diesen Wert zu finden, navigieren Sie in Auth0 zu Applications > Applications > [Name Ihrer Anwendung] > Settings > Feld Client Secret.<audience>ist der Bezeichner Ihrer API. Um diesen Wert zu finden, navigieren Sie in Auth0 zu Applications > APIs > wählen Sie Ihre API aus > SettingsFeld Identifier.
<your_org_name>-<your_open_catalog_account_name>ist der Name Ihrer Organisation und der Name Ihres Snowflake Open Catalog-Kontos, getrennt durch einen Bindestrich.Beispiel:
ABCDEFG-MYACCOUNT1.Informationen dazu, wie Sie diese Werte in diesem Format abrufen, finden Sie unter Organisations- und Kontonamen abrufen.
<custom_role_name>is the name of a custom role you granted with catalog roles, such asENGINEER.
Schritt 10: Verbindung zu Open Catalog mit External OAuth herstellen¶
In diesem Abschnitt verbinden Sie den Dienstprinzipal über External OAuth mit Open Catalog. Anleitungen finden Sie unter Verbindung zu Snowflake Open Catalog mit External OAuth herstellen. Diese beinhalten auch Anweisungen für die Verbindung mithilfe eines Zugriffstokens oder einer automatischen Tokenaktualisierung.