Konfigurieren Sie eine Katalogintegration für Apache Iceberg™ REST-Kataloge¶
Eine Apache Iceberg™ REST Katalogintegration ermöglicht Snowflake den Zugriff auf Apache Iceberg™-Tabellen, die in einem Remote-Katalog verwaltet wird, der mit der Open Source Apache Iceberg REST OpenAPI-Spezifikation übereinstimmt.
Verbindung zu REST-Katalogen¶
Sie können eine Verbindung zu einer Iceberg REST API herstellen, die einen öffentlichen Endpunkt oder ein privates Netzwerk verwendet.
Öffentlicher Endpunkt¶
Um eine Verbindung zu einem Iceberg REST API über einen öffentlichen Endpunkt herzustellen, können Sie eine Katalogintegration erstellen, die die folgenden Authentifizierungsmethoden verwendet:
OAuth
Bearer-Token oder Personal Access Token (PAT)
SigV4
Privates Netzwerk¶
Um eine Verbindung zu einem Iceberg REST API herzustellen, das in einem privaten Netzwerk gehostet wird, können Sie eine Katalogintegration erstellen, die die Authentifizierung mit Signatur Version 4 (SigV4) verwendet.
Katalogintegration erstellen¶
Erstellen Sie mit dem Befehl CREATE CATALOG INTEGRATION (Apache Iceberg™ REST) eine Katalogintegration für die von Ihnen gewählte Authentifizierungsmethode. Die Werte, die Sie für die Argumente REST_CONFIG und REST_AUTHENTICATION angeben, unterscheiden sich je nach der von Ihnen gewählten Authentifizierungsmethode.
OAuth¶
Das folgende Beispiel erstellt eine REST-Katalogintegration, die OAuth zur Verbindung mit Tabular verwendet.
CREATE OR REPLACE CATALOG INTEGRATION tabular_catalog_int
CATALOG_SOURCE = ICEBERG_REST
TABLE_FORMAT = ICEBERG
CATALOG_NAMESPACE = 'default'
REST_CONFIG = (
CATALOG_URI = 'https://api.tabular.io/ws'
WAREHOUSE = '<tabular_warehouse_name>'
)
REST_AUTHENTICATION = (
TYPE = OAUTH
OAUTH_TOKEN_URI = 'https://api.tabular.io/ws/v1/oauth/tokens'
OAUTH_CLIENT_ID = '<oauth_client_id>'
OAUTH_CLIENT_SECRET = '<oauth_secret>'
OAUTH_ALLOWED_SCOPES = ('catalog')
)
ENABLED = TRUE;
Das folgende Beispiel erstellt eine REST-Katalogintegration, die OAuth verwendet, um eine Verbindung zu Databricks Unity Catalog herzustellen.
CREATE OR REPLACE CATALOG INTEGRATION unity_catalog_int_oauth
CATALOG_SOURCE = ICEBERG_REST
TABLE_FORMAT = ICEBERG
CATALOG_NAMESPACE = 'default'
REST_CONFIG = (
CATALOG_URI = 'https://my-api/api/2.1/unity-catalog/iceberg'
WAREHOUSE = '<catalog_name>'
)
REST_AUTHENTICATION = (
TYPE = OAUTH
OAUTH_TOKEN_URI = 'https://my-api/oidc/v1/token'
OAUTH_CLIENT_ID = '123AbC ...'
OAUTH_CLIENT_SECRET = '1365910ab ...'
OAUTH_ALLOWED_SCOPES = ('all-apis', 'sql')
)
ENABLED = TRUE;
Bearer-Token oder PAT¶
Das folgende Beispiel erstellt eine REST-Katalogintegration, die ein PAT-Token verwendet, um eine Verbindung zu Databricks Unity Catalog herzustellen.
CREATE OR REPLACE CATALOG INTEGRATION unity_catalog_int_pat
CATALOG_SOURCE = ICEBERG_REST
TABLE_FORMAT = ICEBERG
CATALOG_NAMESPACE = 'my_namespace'
REST_CONFIG = (
CATALOG_URI = 'https://my-api/api/2.1/unity-catalog/iceberg'
WAREHOUSE = '<catalog_name>'
)
REST_AUTHENTICATION = (
TYPE = BEARER
BEARER_TOKEN = 'eyAbCD...eyDeF...'
)
ENABLED = TRUE;
SigV4 (API-Gateway)¶
Das folgende Diagramm zeigt, wie Snowflake mit Ihrem REST-Katalogserver über API Gateway und SigV4-Authentifizierung interagiert.
Folgen Sie den Schritten in diesem Abschnitt, um eine REST API im Amazon API Gateway und Signature Version 4 (SigV4) Authentifizierung zu verwenden, um Snowflake sicher mit einem Iceberg-REST-Katalog zu verbinden, der nicht öffentlich zugänglich ist.
Eine IAM-Richtlinie erstellen und mit einer Rolle verknüpfen
API-Gateway-Ressourcenrichtlinie hinzufügen (nur private APIs)
Erstellen Sie eine REST API in Amazon API Gateway¶
Um Snowflake mit Ihrem Iceberg REST-Katalog zu verbinden, benötigen Sie eine REST API-Ressource in Amazon API Gateway.
Wenn Sie noch keine REST API-Ressource in Amazon API Gateway für Ihren Iceberg-Katalog haben, können Sie eine einfache REST API erstellen, indem Sie eine OpenAPI-Definitionsdatei des Iceberg-Katalogs modifizieren und importieren oder Endpunkte manuell hinzufügen.
Bemerkung
Um die OpenAPI-Definition des Iceberg-Katalogs zu importieren, müssen Sie die YAML-Datei ändern. Amazon API Gateway unterstützt nicht alle Komponenten der OpenAPI 2.0 oder 3.0 Spezifikationen. Unter Amazon API Gateway finden Sie weitere Informationen und wichtige Hinweise für REST APIs.
Suchen Sie in der AWS Management-Konsole nach API Gateway und wählen Sie es aus.
Wählen Sie Create API aus.
Wählen Sie Build unter REST API. Um eine private REST API zu erstellen, wählen Sie Build unter REST API Private.
Wählen Sie eine der folgenden Optionen aus:
Um eine API durch manuelles Hinzufügen von Endpunkten zu erstellen, wählen Sie New API.
Um eine API unter Verwendung einer OpenAPI-Definitionsdatei zu erstellen, wählen Sie Import API, laden Sie die Datei hoch oder fügen Sie die Definition in den Code-Editor ein.
Geben Sie einen API name und optional eine Description ein.
Bemerkung
Sie müssen keine VPC-Endpunkt-ID eingeben, wenn Sie eine private REST API erstellen.
Wählen Sie Create API aus.
Weitere Informationen zum Erstellen und Entwickeln einer REST API in API Gateway finden Sie im Amazon API Gateway Developer Guide.
Eine IAM-Richtlinie erstellen und mit einer Rolle verknüpfen¶
In diesem Schritt erstellen Sie eine AWS IAM-Rolle, mit der Snowflake eine Verbindung zum API-Gateway herstellen kann. Sie fügen der Rolle eine Richtlinie hinzu, die die Berechtigung zum Aufruf Ihrer API erteilt.
Suchen Sie in der AWS Management-Konsole nach IAM und wählen Sie es aus.
Wählen Sie im linken Navigationsbereich Policies aus.
Wählen Sie Create policy und dann JSON für die Policy editor aus.
Ersetzen Sie die leere Richtlinie durch eine Richtlinie, die die Berechtigung hat, Ihre API-Methoden aufzurufen. Die folgende allgemeine Richtlinie erlaubt beispielsweise die Aktion „Aufrufen“ für alle API Gateway-Ressourcen in einem AWS-Konto.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "execute-api:Invoke" ], "Resource": "arn:aws:execute-api:*:<aws_account_id>:*" } ] }
Wichtig
Verwenden Sie am besten eine Richtlinie, die die für Ihren Anwendungsfall mindestens erforderlichen Berechtigungen gewährt. Weitere Anleitungen und Beispielrichtlinien finden Sie unter Steuerung des Zugriffs auf eine API mit IAM-Berechtigungen.
Wählen Sie Next aus.
Geben Sie unter Policy name den Namen der Richtlinie (z. B.
snowflake_access
) und unter Description eine optionale Beschreibung ein.Wählen Sie Create policy aus.
Wählen Sie im linken Navigationsbereich des IAM-Dashboards die Option Roles.
Wählen Sie eine Rolle aus, der die Richtlinie zugeordnet werden soll. Wenn Sie eine Katalogintegration erstellen, geben Sie diese Rolle an. Wenn Sie keine Rolle haben, erstellen Sie eine neue Rolle.
Wählen Sie auf der Summary Seite „Rolle“ auf der Registerkarte Permissions die Option Add permissions » Attach policies aus.
Suchen Sie nach der Richtlinie, die Sie für API Gateway erstellt haben, und markieren Sie das Kästchen neben der Richtlinie. Wählen Sie dann Add permissions.
Kopieren Sie auf der Seite der Rolle Summary die Rolle ARN. Sie geben diesen ARN an, wenn Sie eine Katalogintegration erstellen.
API-Gateway-Ressourcenrichtlinie hinzufügen (nur private APIs)¶
Wenn Ihre REST API privat ist, müssen Sie eine Amazon API Gateway-Ressourcenrichtlinie mit Ihrer API verknüpfen. Die Ressourcenrichtlinie ermöglicht es Snowflake, Ihr API von der Amazon Virtual Private Cloud (VPC) aus aufzurufen, in der sich Ihr Snowflake-Konto befindet.
Rufen Sie in Snowflake die Funktion SYSTEM$GET_SNOWFLAKE_PLATFORM_INFO auf, um die ID für dieVPC abzurufen, in der sich Ihr Snowflake-Konto befindet. Kopieren Sie die VPC-ID aus der Ausgabe der Funktion.
SELECT SYSTEM$GET_SNOWFLAKE_PLATFORM_INFO();
Ausgabe:
{"snowflake-vpc-id":["vpc-c1c234a5"]}
Folgen Sie den Anweisungen unter Anhängen von API Gateway-Ressourcenrichtlinien, um eine Ressourcenrichtlinie an Ihre REST API anzuhängen.
Fügen Sie die folgende Beispielrichtlinie ein und ändern Sie sie.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Principal": "*", "Action": "execute-api:Invoke", "Resource": "<api_gateway_arn>", "Condition": { "StringNotEquals": { "aws:sourceVpc": "<snowflake_vpc_id>" } } }, { "Effect": "Allow", "Principal": { "AWS": "arn:aws:sts::123456789XXX:assumed-role/<my_api_permissions_role_name>/snowflake" }, "Action": "execute-api:Invoke", "Resource": "<api_gateway_arn>/*/*/*", "Condition": { "StringEquals": { "aws:sourceVpc": "<snowflake_vpc_id>" } } } ] }
Die erste Anweisung in der Richtlinie verweigert alle Anfragen, die nicht von Snowflake VPC stammen. Die zweite Anweisung erlaubt die „invoke“-Aktion (für alle Methoden) von Anfragen, die von Snowflake VPC stammen und die angenommene Rolle „Sessionprinzipal“ verwenden.
Weitere Informationen zur API-Gateway-Ressourcenrichtlinie finden Sie unter:
Abrufen der Endpunkt-URL¶
Rufen Sie Ihren REST API-Endpunkt-URL (oder invoke-URL) ab. Ihre API muss in einem Stagingbereich bereitgestellt werden, bevor Sie die-Endpunkt-URL abrufen können.
Wählen Sie in der Amazon API Gateway-Konsole Ihre REST API.
Wählen Sie im linken Navigationsbereich Stages aus.
Kopieren Sie unter Stage details die Invoke URL.
Sie geben den Endpunkt URL an, wenn Sie eine Katalogintegration erstellen.
Katalogintegration für SigV4 erstellen¶
Nachdem Sie über eine REST API in Amazon API Gateway verfügen und die ersten Schritte zur Steuerung des Zugriffs auf Ihre API mit IAM-Berechtigungen abgeschlossen haben, können Sie eine Katalogintegration in Snowflake erstellen.
Die Syntax des Befehls und die Beschreibung der Parameter finden Sie unter CREATE CATALOG INTEGRATION (Apache Iceberg™ REST).
Öffentliche REST API
Um eine Katalogintegration für eine öffentliche REST API zu erstellen, geben Sie ICEBERG_REST
als CATALOG_SOURCE
an und verwenden Sie die Authentifizierung SIGV4
.
Geben Sie Details wie Ihre API-Endpunkt-URL und die Ihre IAM-Rollen-ARN an.
CREATE OR REPLACE CATALOG INTEGRATION my_rest_catalog_integration
CATALOG_SOURCE = ICEBERG_REST
TABLE_FORMAT = ICEBERG
CATALOG_NAMESPACE = 'my_namespace'
REST_CONFIG = (
CATALOG_URI = 'https://asdlkfjwoalk-execute-api.us-west-2-amazonaws.com/MyApiStage'
CATALOG_API_TYPE = AWS_API_GATEWAY
)
REST_AUTHENTICATION = (
TYPE = SIGV4
SIGV4_IAM_ROLE = 'arn:aws:iam::123456789XXX:role/my_api_permissions_role'
SIGV4_EXTERNAL_ID = 'my_iceberg_external_id'
)
ENABLED = TRUE;
Private REST API
Um eine Katalogintegration für eine private REST API zu erstellen, müssen Sie den Parameter CATALOG_API_TYPE
auf AWS_PRIVATE_API_GATEWAY
setzen.
CREATE OR REPLACE CATALOG INTEGRATION my_rest_catalog_integration
CATALOG_SOURCE = ICEBERG_REST
TABLE_FORMAT = ICEBERG
CATALOG_NAMESPACE = 'my_namespace'
REST_CONFIG = (
CATALOG_URI = 'https://asdlkfjwoalk-execute-api.us-west-2-amazonaws.com/MyApiStage'
CATALOG_API_TYPE = AWS_PRIVATE_API_GATEWAY
)
REST_AUTHENTICATION = (
TYPE = SIGV4
SIGV4_IAM_ROLE = 'arn:aws:iam::123456789XXX:role/my_api_permissions_role'
SIGV4_EXTERNAL_ID = 'my_iceberg_external_id'
)
ENABLED = TRUE;
Bemerkung
In beiden Beispielen wird eine externe ID (SIGV4_EXTERNAL_ID = 'my_iceberg_external_id'
) angegeben, die Sie in der Vertrauensbeziehung für Ihre IAM-Rolle (im nächsten Schritt) verwenden können.
Wenn Sie eine externe ID angeben, können Sie dieselbe IAM-Rolle für mehrere Katalogintegrationen verwenden, ohne die Vertrauensrichtlinie der IAM-Rolle zu aktualisieren. Dies ist besonders in Testszenarien nützlich, wenn Sie eine Katalogintegration mehrmals erstellen oder ersetzen müssen.
Vertrauensstellung in IAM konfigurieren¶
Rufen Sie Informationen über den Benutzer der AWS IAM ab, der für Ihr Snowflake-Konto erstellt wurde, als Sie die Katalogintegration erstellt haben, und konfigurieren Sie die Vertrauensbeziehung für Ihre IAM-Rolle.
Rufen Sie in Snowflake den Befehl DESCRIBE CATALOG INTEGRATION auf:
DESCRIBE CATALOG INTEGRATION my_rest_catalog_integration;
Notieren Sie die folgenden Werte:
Wert
Beschreibung
API_AWS_IAM_USER_ARN
Der AWS-IAM-Benutzer, der für Ihr Snowflake-Konto erstellt wurde, in diesem Beispiel
arn:aws:iam::123456789001:user/abc1-b-self1234
. Snowflake stellt genau einen IAM-Benutzer für Ihr gesamtes Snowflake-Konto bereit.API_AWS_EXTERNAL_ID
Die externe ID, die notwendig ist, um eine Vertrauensbeziehung aufzubauen. Wenn Sie bei der Erstellung der Katalogintegration keine externe ID (
SIGV4_EXTERNAL_ID
) angegeben haben, generiert Snowflake eine ID, das Sie verwenden können. Notieren Sie sich den Wert, damit Sie Ihre IAM-Rollen-Vertrauensrichtlinie mit der generierten externen ID aktualisieren können.Suchen Sie in der AWS Management-Konsole nach IAM und wählen Sie es aus.
Wählen Sie im linken Navigationsbereich Roles aus.
Wählen Sie die IAM-Rolle, die Sie für Ihre Katalogintegration erstellt haben.
Wählen Sie die Registerkarte Trust relationships aus.
Wählen Sie Edit trust policy aus.
Ändern Sie das Richtliniendokument mit den Werten, die Sie aufgezeichnet haben.
{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "AWS": "<api_aws_iam_user_arn>" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "sts:ExternalId": "<api_aws_external_id>" } } } ] }
Wählen Sie Update policy aus, um Ihre Änderungen zu speichern.
SigV4 (Glue)¶
Folgen Sie den Schritten in diesem Abschnitt, um eine Katalogintegration für den AWS Glue Iceberg REST-Endpunkt mit Signatureversion 4 (SigV4)-Authentifizierung zu erstellen.
Schritt 1: Zugriffsberechtigungen für den AWS Glue-Datenkatalog konfigurieren¶
Erstellen Sie eine IAM-Richtlinie für Snowflake für den Zugriff auf den AWS Glue Data Catalog. Verbinden Sie die Richtlinie mit einer IAM-Rolle, die Sie bei der Erstellung einer Katalogintegration angeben. Eine Anleitung dazu finden Sie unter Erstellen von IAM-Richtlinien und Ändern von Rollenberechtigungsrichtlinien im AWS-Benutzerhandbuch für die Identitäts- und Zugriffsverwaltung.
Snowflake benötigt mindestens die folgenden Berechtigungen für den AWS Glue Data Catalog, um auf Informationen über den Glue Iceberg REST-Katalog zuzugreifen.
glue:GetConfig
glue:GetDatabase
glue:GetDatabases
glue:GetTable
glue:GetTables
Die folgende Beispielrichtlinie (im JSON-Format) bietet die erforderlichen Berechtigungen für den Zugriff auf alle Tabellen in einer bestimmten Datenbank.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowGlueCatalogTableAccess",
"Effect": "Allow",
"Action": [
"glue:GetConfig",
"glue:GetDatabase",
"glue:GetDatabases",
"glue:GetTable",
"glue:GetTables"
],
"Resource": [
"arn:aws:glue:*:<accountid>:table/*/*",
"arn:aws:glue:*:<accountid>:catalog",
"arn:aws:glue:*:<accountid>:database/<database-name>"
]
}
]
}
Bemerkung
Sie können das
Resource
-Element dieser Richtlinie ändern, um die zulässigen Ressourcen weiter einzuschränken (z. B. Katalog, Datenbanken oder Tabellen). Weitere Informationen dazu finden Sie unter Von AWS Glue definierte RessourcentypenWenn Sie die Verschlüsselung für AWS Glue verwenden, müssen Sie die Richtlinie ändern, um AWS-KMS-Berechtigungen (AWS Key Management Service) hinzuzufügen. Weitere Informationen dazu finden Sie unter Einrichten der Verschlüsselung in AWS Glue.
Schritt 2: Katalogintegration in Snowflake erstellen¶
Erstellen Sie eine Katalogintegration für den Endpunkt AWS Glue Iceberg REST mit dem Befehl CREATE CATALOG INTEGRATION (Apache Iceberg™ REST). Geben Sie die IAM-Rolle an, die Sie konfiguriert haben. Für WAREHOUSE
verwenden Sie Ihre AWS-Konto-ID.
CREATE CATALOG INTEGRATION glue_rest_catalog_int
CATALOG_SOURCE = ICEBERG_REST
TABLE_FORMAT = ICEBERG
CATALOG_NAMESPACE = 'rest_catalog_integration'
REST_CONFIG = (
CATALOG_URI = 'https://glue.us-west-2.amazonaws.com/iceberg'
CATALOG_API_TYPE = AWS_GLUE
WAREHOUSE = '123456789012'
)
REST_AUTHENTICATION = (
TYPE = SIGV4
SIGV4_IAM_ROLE = 'arn:aws:iam::123456789012:role/my-role'
SIGV4_SIGNING_REGION = 'us-west-2'
)
ENABLED = TRUE;
Überprüfen Sie Ihre REST-Katalogkonfiguration¶
Anhand der folgenden Szenarien können Sie überprüfen, ob Sie die Autorisierung und Zugriffssteuerung für Ihren Iceberg REST-Katalog korrekt konfiguriert haben, sodass Snowflake mit Ihrem Katalogserver interagieren kann.
Verwenden Sie SYSTEM$VERIFY_CATALOG_INTEGRATION¶
Sie können die Funktion SYSTEM$VERIFY_CATALOG_INTEGRATION verwenden, um die Konfiguration Ihrer Katalogintegration zu überprüfen.
Das folgende Beispiel zeigt, wie die Systemfunktion Probleme mit einer nicht ordnungsgemäß konfigurierten Katalogintegration erkennt und meldet.
Die folgende Beispielanweisung erstellt eine REST-Katalogintegration unter Verwendung eines ungültigen OAuth-Client-Geheimnisses (dies läuft ohne Fehler):
CREATE CATALOG INTEGRATION my_rest_cat_int
CATALOG_SOURCE = ICEBERG_REST
TABLE_FORMAT = ICEBERG
CATALOG_NAMESPACE = 'default'
REST_CONFIG = (
CATALOG_URI = 'https://abc123.us-west-2.aws.myapi.com/polaris/api/catalog'
WAREHOUSE = 'my_warehouse'
)
REST_AUTHENTICATION = (
TYPE = OAUTH
OAUTH_CLIENT_ID = '123AbC ...'
OAUTH_CLIENT_SECRET = '1365910abIncorrectSecret ...'
OAUTH_ALLOWED_SCOPES = ('all-apis', 'sql')
)
ENABLED = TRUE;
Verwenden Sie die Systemfunktion, um die Katalogintegration zu überprüfen – der Vorgang sollte fehlschlagen:
SELECT SYSTEM$VERIFY_CATALOG_INTEGRATION('my_rest_cat_int');
Ausgabe:
+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| SYSTEM$VERIFY_CATALOG_INTEGRATION('MY_REST_CAT_INT') |
+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| { |
| "success" : false, | |
| "errorCode" : "004155", |
| "errorMessage" : "SQL Execution Error: Failed to perform OAuth client credential flow for the REST Catalog integration MY_REST_CAT_INT due to error: SQL execution error: OAuth2 Access token request failed with error 'unauthorized_client:The client is not authorized'.." |
| } |
+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
Überprüfen Sie eine Konfiguration für OAuth¶
Führen Sie diese Schritte aus, um Ihre Konfiguration für OAuth mit Ihrem Remote-REST-Katalog zu überprüfen.
Schritt 1: Abrufen eines Zugriffstokens¶
Verwenden Sie einen curl
-Befehl, um ein Zugriffstoken aus Ihrem Katalog abzurufen. Das folgende Beispiel fordert ein Zugriffstoken von Snowflake Open Catalog an:
curl -X POST https://xx123xx.us-west-2.aws.snowflakecomputing.com/polaris/api/catalog/v1/oauth/tokens \
-H "Accepts: application/json" \
-H "Content-Type: application/x-www-form-urlencoded" \
--data-urlencode "grant_type=client_credentials" \
--data-urlencode "scope=PRINCIPAL_ROLE:ALL" \
--data-urlencode "client_id=<my_client_id>" \
--data-urlencode "client_secret=<my_client_secret>" | jq
Wobei:
https://xx123xx.us-west-2.aws.snowflakecomputing.com/polaris/api/catalog/v1/oauth/tokens
ist der Endpunkt für den Abruf eines OAuth-Tokens (getToken).scope
ist derselbe Wert wie der, den Sie für den ParameterOAUTH_ALLOWED_SCOPES
angeben, wenn Sie eine Katalogintegration erstellen. Für mehrere Bereiche verwenden Sie ein Leerzeichen als Trennzeichen.my_client_id
ist dieselbe Client-ID, die Sie für den ParameterOAUTH_CLIENT_ID
angeben, wenn Sie eine Katalogintegration erstellen.my_client_secret
ist das gleiche Client-Geheimnis, das Sie für den ParameterOAUTH_CLIENT_SECRET
angeben, wenn Sie eine Katalogintegration erstellen.
Beispiel Rückgabewert:
{
"access_token": "xxxxxxxxxxxxxxxx",
"token_type": "bearer",
"issued_token_type": "urn:ietf:params:oauth:token-type:access_token",
"expires_in": 3600
}
Schritt 2: Überprüfen Sie die Zugriffsberechtigungen für das Token¶
Vergewissern Sie sich anhand des Zugriffstokens, das Sie im vorherigen Schritt erhalten haben, dass Sie die Berechtigung haben, auf Ihren Katalogserver zuzugreifen.
Sie können einen curl
-Befehl verwenden, um die Konfigurationseinstellungen für Ihren Katalog aufzulisten:
curl -X GET "https://xx123xx.us-west-2.aws.snowflakecomputing.com/polaris/api/catalog/v1/config?warehouse=<warehouse>" \
-H "Accepts: application/json" \
-H "Content-Type: application/x-www-form-urlencoded" \
-H "Authorization: Bearer ${ACCESS_TOKEN}" | jq
Wobei:
?warehouse=warehouse
gibt optional den Namen des Warehouse an, das Sie aus Ihrem Katalog abfragen möchten (falls unterstützt). Bei Snowflake Open Catalog ist der Name des Warehouse der Name Ihres Katalogs.ACCESS_TOKEN
ist eine Variable, die dieaccess_token
enthält, die Sie im vorherigen Schritt abgerufen haben.
Beispiel Rückgabewert:
{
"defaults": {
"default-base-location": "s3://my-bucket/polaris/"
},
"overrides": {
"prefix": "my-catalog"
}
}
Schritt 3: Laden Sie eine Tabelle aus dem Katalog¶
Sie können auch eine GET-Anfrage stellen, um eine Tabelle zu laden. Snowflake verwendet die loadTable-Operation, um Tabellendaten aus Ihrem REST-Katalog zu laden.
curl -X GET "https://xx123xx.us-west-2.aws.snowflakecomputing.com/polaris/api/catalog/v1/<prefix>/namespaces/<namespace>/tables/<table>" \
-H "Accepts: application/json" \
-H "Content-Type: application/x-www-form-urlencoded" \
-H "Authorization: Bearer ${ACCESS_TOKEN}" | jq
Wobei:
prefix
gibt optional das Präfix an, das aus der vorherigengetConfig
Antwort stammt.namespace
ist der Namespace der Tabelle, die Sie abrufen möchten. Wenn der Namespace verschachtelt ist, verwenden Sie das Trennzeichen%1F
, zum BeispielparentNamespace%1FchildNamespace
.table
ist der Name der Tabelle.
Überprüfen einer Konfiguration für ein Bearer-Token¶
Führen Sie die folgenden Schritte aus, um Ihre Konfiguration mit Ihrem remoten REST-Katalog für die Verwendung eines Bearer-Tokens zu überprüfen.
Schritt 1: Überprüfen Sie die Zugriffsberechtigungen für das Token¶
Verwenden Sie den Befehl curl
, um zu überprüfen, ob Sie die Berechtigung haben, auf Ihren Katalogserver zuzugreifen:
curl -X GET "https://xx123xx.us-west-2.aws.snowflakecomputing.com/polaris/api/catalog/v1/config?warehouse=<warehouse>" \
-H "Accepts: application/json" \
-H "Content-Type: application/x-www-form-urlencoded" \
-H "Authorization: Bearer ${BEARER_TOKEN}" | jq
Wobei:
https://xx123xx.us-west-2.aws.snowflakecomputing.com/polaris/api/catalog/v1/oauth/tokens
ist der Endpunkt für den Abruf eines OAuth-Tokens (getToken).?warehouse=warehouse
gibt optional den Namen des Warehouse an, das Sie aus Ihrem Katalog abfragen möchten (falls unterstützt).BEARER_TOKEN
ist eine Variable, die dieaccess_token
enthält, die Sie im vorherigen Schritt abgerufen haben.
Beispiel Rückgabewert:
{
"defaults": {
"default-base-location": "s3://my-bucket/polaris"
},
"overrides": {
"prefix": "my-catalog"
}
}
Schritt 2: Laden Sie eine Tabelle aus dem Katalog¶
Sie können auch eine GET-Anfrage stellen, um eine Tabelle zu laden. Snowflake verwendet die loadTable-Operation, um Tabellendaten aus Ihrem REST-Katalog zu laden.
curl -X GET "https://xx123xx.us-west-2.aws.snowflakecomputing.com/polaris/api/catalog/v1/<prefix>/namespaces/<namespace>/tables/<table>" \
-H "Accepts: application/json" \
-H "Content-Type: application/x-www-form-urlencoded" \
-H "Authorization: Bearer ${BEARER_TOKEN}" | jq
Wobei:
prefix
gibt optional das Präfix an, das aus der vorherigengetConfig
Antwort stammt.namespace
ist der Namespace der Tabelle, die Sie abrufen möchten. Wenn der Namespace verschachtelt ist, verwenden Sie das Trennzeichen%1F
, zum BeispielparentNamespace%1FchildNamespace
.table
ist der Name der Tabelle.
Überprüfen Sie eine Konfiguration für SigV4¶
Gehen Sie folgendermaßen vor, um Ihre Konfiguration auf SigV4 mit AWS zu überprüfen.
Schritt 1: Fügen Sie Ihren Benutzer zur Vertrauensbeziehung der IAM-Rolle hinzu¶
Wenn Sie eine REST-Katalogintegration für SigV4 erstellen, stellt Snowflake einen AWS IAM-Benutzer für Ihr Snowflake-Konto bereit. Sie fügen diesen Snowflake IAM-Benutzer der Vertrauensbeziehung für eine IAM-Rolle mit der Berechtigung zum Zugriff auf Ihre API Gateway-Ressourcen hinzu.
Um Ihre Konfiguration zu testen, können Sie die Rolle als Benutzer in Ihrem AWS-Konto übernehmen, nachdem Sie Ihren AWS-Benutzer zum Vertrauensrichtliniendokument der Rolle hinzugefügt haben. Um Ihren aktuellen IAM-Benutzer-ARN abzurufen, verwenden Sie den Befehl sts get-caller-identity für die AWS Befehlszeilenschnittstelle (CLI) :
aws sts get-caller-identity
Beispielausgabe:
{
"UserId": "ABCDEFG1XXXXXXXXXXX",
"Account": "123456789XXX",
"Arn": "arn:aws:iam::123456789XXX:user/managed/my_user"
}
Das aktualisierte Vertrauensrichtliniendokument sollte sowohl den Snowflake Benutzer-ARN als auch Ihren Benutzer-ARN wie folgt enthalten:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Principal": {
"AWS": [
"<snowflake_iam_user_arn>",
"<my_iam_user_arn>"
]
},
"Action": "sts:AssumeRole",
"Condition": {
"StringEquals": {
"sts:ExternalId": "my_external_id"
}
}
}
]
}
Eine ausführliche Anweisung finden Sie unter Aktualisieren einer Rollenvertrauensrichtlinie in der Dokumentation AWS IAM.
Schritt 2: Nehmen Sie Ihre IAM-Rolle an, um temporäre Anmeldeinformationen zu erhalten¶
Um temporäre Sicherheitsanmeldeinformationen für AWS zu erhalten, verwenden Sie den Befehl sts assume-role für AWS CLI.
aws sts assume-role \
--role-arn <my_role_arn> \
--role-session-name <session_name>
Wobei:
my_role_arn
ist der Amazon Resource Name (ARN) der IAM-Rolle, die Sie für Snowflake konfiguriert haben.session_name
ist die Zeichenfolge eines von Ihnen gewählten Bezeichners für die Sitzung mit der angenommenen Rolle, z. B.my_rest_session
.
Beispielausgabe:
{
"Credentials": {
"AccessKeyId": "XXXXXXXXXXXXXXXXXXXXX",
"SecretAccessKey": "XXXXXXXXXXXXXXXXXXXXX",
"SessionToken": "XXXXXXXXXXXXXXXXXXXXX",
"Expiration": "2024-10-09T08:13:15+00:00"
},
"AssumedRoleUser": {
"AssumedRoleId": "{AccessKeyId}:my_rest_catalog_session",
"Arn": "arn:aws:sts::123456789XXX:assumed-role/my_catalog_role/my_rest_catalog_session"
}
}
Bemerkung
Wenn der Befehl assume-role
fehlschlägt, bedeutet dies, dass Ihr aktueller AWS-Benutzer nicht in der Vertrauensrichtlinie der Rolle als erlaubter Prinzipal enthalten ist.
Wenn der Snowflake IAM-Benutzer-ARN nicht in Ihrer Vertrauensrichtlinie enthalten ist, kann Snowflake auch keine Verbindung zu Ihren API Gateway-Ressourcen herstellen. Weitere Informationen dazu finden Sie unter Vertrauensstellung in IAM konfigurieren.
Schritt 3: Überprüfen Sie, ob Ihre IAM-Rolle die richtigen Berechtigungen hat¶
Vergewissern Sie sich anhand der temporären Anmeldeinformationen, die Sie im vorherigen Schritt abgerufen haben, dass Ihre IAM-Rolle die Berechtigung hat, Ihre API Gateway APIs aufzurufen.
Sie können einen curl
-Befehl verwenden, um die Konfigurationseinstellungen für Ihren Katalog aufzulisten:
curl -v -X GET "https://123xxxxxxx.execute-api.us-west-2.amazonaws.com/test_v2/v1/config?warehouse=<warehouse>" \
--user "$AWS_ACCESS_KEY_ID":"$AWS_SECRET_ACCESS_KEY" \
--aws-sigv4 "aws:amz:us-west-2:execute-api" \
-H "x-amz-security-token: $AWS_SESSION_TOKEN"
Wobei:
123xxxxxxx.execute-api.us-west-2.amazonaws.com
ist Ihr API Gateway-Hostname.test_v2
ist der Name des Stagingbereichs, in dem Ihr API eingesetzt wird.v1/config
spezifiziert die Operation getConfig aus der Definition des Iceberg-Katalogs OpenAPI.?warehouse=warehouse
gibt optional den Namen des Warehouse an, das Sie aus Ihrem Katalog abfragen möchten (falls unterstützt).$AWS_ACCESS_KEY_ID
ist eine Variable, die dieAccessKeyId
enthält, die Sie mit dem Befehlsts assume-role
abgerufen haben.$AWS_SECRET_ACCESS_KEY
ist eine Variable, die dieSecretAccessKey
enthält, die Sie mit dem Befehlsts assume-role
abgerufen haben.aws:amz:us-west-2:execute-api
ist der Signiername des SigV4-Protokolls. Verwenden Sie für AWS Glue stattdessenaws:amz:us-west-2:glue
.$AWS_SESSION_TOKEN
ist eine Variable, die dieSessionToken
enthält, die Sie mit dem Befehlsts assume-role
abgerufen haben.
Beispiel Rückgabewert:
{
"defaults": {},
"overrides": {
"prefix": "my-catalog"
}
}
Sie können auch eine GET-Anfrage stellen, um eine Tabelle zu laden. Snowflake verwendet die loadTable-Operation, um Tabellendaten aus Ihrem REST-Katalog zu laden.
curl -v -X GET "https://123xxxxxxx.execute-api.us-west-2.amazonaws.com/test_v2/v1/<prefix>/namespaces/<namespace>/tables/<table>" \
--user "$AWS_ACCESS_KEY_ID":"$AWS_SECRET_ACCESS_KEY" \
--aws-sigv4 "aws:amz:us-west-2:execute-api" \
-H "x-amz-security-token: $AWS_SESSION_TOKEN"
Wobei:
prefix
gibt optional das Präfix an, das aus der vorherigengetConfig
Antwort stammt.namespace
ist der Namespace der Tabelle, die Sie abrufen möchten. Wenn der Namespace verschachtelt ist, verwenden Sie das Trennzeichen%1F
, zum BeispielparentNamespace%1FchildNamespace
.table
ist der Name der Tabelle.
Private API
Für eine private API können Sie Ihren VPC-Endpunkt und den privaten Amazon API Gateway-Hostnamen in denselben curl
-Befehlen angeben.
Beispiel:
curl -v -X GET "https://vpce-xxxxxxxxxxxxxxxxxxxxxxxxxx.execute-api.us-west-2.vpce.amazonaws.com/test_v2/v1/config?warehouse=<warehouse>" \
--user "$AWS_ACCESS_KEY_ID":"$AWS_SECRET_ACCESS_KEY" \
--aws-sigv4 "aws:amz:us-west-2:execute-api" \
-H "x-amz-security-token: $AWS_SESSION_TOKEN"
-H "Host: abc1defgh2.execute-api.us-west-2.amazonaws.com"
Wobei:
https://vpce-xxxxxxxxxxxxxxxxxxxxxxxxxx.execute-api.us-west-2.vpce.amazonaws.com/...
ist der Hostname Ihres VPC-Endpunkts.abc1defgh2.execute-api.us-west-2.amazonaws.com
ist der Hostname Ihrer privaten API in Amazon API Gateway.