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'
)
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'
)
REST_AUTHENTICATION = (
TYPE = BEARER
BEARER_TOKEN = 'eyAbCD...eyDeF...'
)
ENABLED = TRUE;
SigV4¶
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 importieren oder Endpunkte manuell hinzufügen.
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::123456789012: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'
)
REST_AUTHENTICATION = (
TYPE = SIGV4
SIGV4_IAM_ROLE = 'arn:aws:iam::123456789012:role/my_api_permissions_role'
)
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'
)
REST_AUTHENTICATION = (
TYPE = SIGV4
CATALOG_API_TYPE = AWS_PRIVATE_API_GATEWAY
SIGV4_IAM_ROLE = 'arn:aws:iam::123456789012:role/my_api_permissions_role'
)
ENABLED = TRUE;
Vertrauensstellung in IAM konfigurieren¶
Als Nächstes müssen Sie Informationen zu dem AWS IAM-Benutzer und die externe ID abrufen, die für Ihr Snowflake Konto erstellt wurden, als Sie die Katalogintegration erstellt haben, und die Vertrauensstellung für Ihre IAM-Rolle konfigurieren.
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.
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.