Konfigurieren Sie eine Katalogintegration für AWS Glue Iceberg REST

Folgen Sie den Schritten in diesem Thema, 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.

Beispiel für eine schreibgeschützte Richtlinie

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:GetCatalog

  • 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:GetCatalog",
           "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>"
         ]
      }
   ]
}
Copy

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 Ressourcentypen

  • Wenn 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.

Beispiel für eine Richtlinie zum Lesen und Schreiben

Die folgende Beispielrichtlinie (im JSON-Format) bietet die erforderlichen Berechtigungen für den Lese- und Schreibzugriff auf alle Tabellen in allen Datenbanken. Für die Konfiguration des Schreibzugriffs für extern verwaltete Tabellen verwenden Sie diese Richtlinie als Beispiel.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowGlueCatalogTableAccess",
      "Effect": "Allow",
      "Action": [
        "s3:GetObject",
        "s3:PutObject",
        "glue:GetCatalog",
        "glue:GetDatabase",
        "glue:GetDatabases",
        "glue:CreateDatabase",
        "glue:DeleteDatabase",
        "glue:GetTable",
        "glue:GetTables",
        "glue:CreateTable",
        "glue:UpdateTable",
        "glue:DeleteTable"
      ],
      "Resource": [
        "arn:aws:glue:*:<accountid>:table/*/*",
        "arn:aws:glue:*:<accountid>:catalog",
        "arn:aws:glue:*:<accountid>:database/*",
        "arn:aws:s3:<external_volume_path>"
      ]
    }
  ]
}
Copy

Bemerkung

  • Die Richtlinie muss den Zugriff auf Ihren Speicherort ermöglichen, damit der AWS Glue Catalog Metadaten in den Tabellenspeicherort schreiben kann.

  • Die Zeile "arn:aws:glue:*:<accountid>:database/*" im Resource-Element dieser Richtlinie gibt alle Datenbanken an. Dies ist erforderlich, wenn Sie aus Snowflake eine neue Datenbank in Glue mit dem Befehl CREATE SCHEMA erstellen möchten. Um den Zugriff auf eine einzelne Datenbank zu beschränken, können Sie den Namen der Datenbank angeben. Weitere Informationen zum Definieren von Ressourcen finden Sie unter Von AWS Glue definierte Ressourcentypen.

  • Wenn 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.

(Optional) Zugriffssteuerung für Lake Formation konfigurieren

Wenn Sie AWS Lake Formation für eine fein abgestufte Zugriffssteuerung verwenden, stellen Sie sicher, dass Ihre Lake Formation-Konfiguration Snowflake den Zugriff auf Ihre Katalogobjekte und die zugrunde liegenden Daten ermöglicht.

Die IAM-Rolle, die Sie im vorherigen Schritt erstellt haben – die Rolle, die Sie in Snowflake angeben, wenn Sie eine Katalogintegration erstellen – muss die lakeformation:GetDataAccess IAM-Berechtigung haben. Diese Berechtigung gewährt Lese- und Schreibzugriff auf die zugrunde liegenden Daten:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "lakeformation:GetDataAccess",
            "Resource": "*"
        }
    ]
}
Copy

Weitere Informationen dazu finden Sie unter Zugrunde liegende Datenzugriffssteuerung in der Dokumentation zu Lake Formation.

Sie müssen der IAM-Rolle auch Datenberechtigungen erteilen. Die Methode, mit der Sie Datenberechtigungen erteilen, hängt von der Einrichtung Ihrer Lake Formation ab. Sie könnten zum Beispiel die Methode der benannten Ressourcen verwenden, um AWS Glue-Objekten Berechtigungen zu erteilen, oder Sie verwenden eine Tag-basierte Zugriffssteuerung. Weitere Informationen und Anweisungen finden Sie in der AWS Lake Formation-Dokumentation.

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 CATALOG_NAME 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
    CATALOG_NAME = '123456789012'
  )
  REST_AUTHENTICATION = (
    TYPE = SIGV4
    SIGV4_IAM_ROLE = 'arn:aws:iam::123456789012:role/my-role'
    SIGV4_SIGNING_REGION = 'us-west-2'
  )
  ENABLED = TRUE;
Copy

Wobei:

  • CATALOG_URI ist der Dienstendpunkt für den Katalog AWS Glue Iceberg REST.

  • CATALOG_NAME ist die ID Ihres AWS-Kontos.

Weitere Informationen finden Sie unter CREATE CATALOG INTEGRATION (Apache Iceberg™ REST). Dort finden Sie auch Anweisungen für die Konfiguration einer Katalogintegration für AWS Glue.

Schritt 3: AWS-IAM-Benutzer und externe ID für Ihr Snowflake-Konto abrufen

Um Informationen über den AWS IAM-Benutzer und die externe ID für Ihr Snowflake-Konto abzurufen, führen Sie den Befehl DESCRIBE CATALOG INTEGRATION aus. Sie geben diese Informationen im nächsten Schritt an AWS weiter, um eine Vertrauensstellung einzurichten.

DESCRIBE CATALOG INTEGRATION glue_rest_catalog_int;
Copy

Notieren Sie die folgenden Werte:

Wert

Beschreibung

GLUE_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. Alle Glue-Katalogintegrationen in Ihrem Konto verwenden diesen IAM-Benutzer.

GLUE_AWS_EXTERNAL_ID

Eine externe ID zum Einrichten einer Vertrauensstellung.

Schritt 4: AWS Glue-Datenkatalog IAM-Benutzerzugriff gewähren

Aktualisieren Sie die Vertrauensrichtlinie für die gleiche IAM-Rolle, die Sie beim Erstellen der Katalogintegration mit dem ARN angegeben haben (GLUE_AWS_ROLE_ARN). Fügen Sie die Werte, die Sie sich im vorherigen Schritt notiert haben, zur Vertrauensrichtlinie hinzu.

Eine Anleitung dazu finden Sie unter Ändern einer Vertrauensrichtlinie.

Das folgende Beispiel für eine Richtlinie zeigt, wo die Werte GLUE_AWS_IAM_USER_ARN und GLUE_AWS_EXTERNAL_ID angegeben werden müssen:

{
   "Version": "2012-10-17",
   "Statement": [
      {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
         "AWS": "<glue_iam_user_arn>"
      },
      "Action": "sts:AssumeRole",
      "Condition": {
         "StringEquals": {
            "sts:ExternalId": "<glue_aws_external_id>"
         }
      }
      }
   ]
}
Copy

Wobei:

  • glue_iam_user_arn ist der Wert GLUE_IAM_USER_ARN, den Sie erfasst haben.

  • glue_aws_external_id ist der Wert GLUE_AWS_EXTERNAL_ID, den Sie erfasst haben.

Bemerkung

  • Wenn Sie aus Sicherheitsgründen eine neue Katalogintegration erstellen (oder eine vorhandene Katalogintegration mit der Syntax CREATE OR REPLACE CATALOG INTEGRATION neu erstellen), hat die neue Katalogintegration eine andere externe ID und kann die Vertrauensstellung nicht auflösen, es sei denn, Sie ändern die Vertrauensrichtlinie mit der neuen externen ID.

  • Um zu überprüfen, ob Ihre Berechtigungen korrekt konfiguriert sind, erstellen Sie eine Iceberg-Tabelle, die diese Katalogintegration verwendet. Snowflake prüft erst dann, ob Ihre Berechtigungen korrekt eingestellt sind, wenn Sie eine Iceberg-Tabelle erstellen, die auf diese Katalogintegration verweist.

Nächste Schritte

Nachdem Sie eine Katalogintegration für AWS Glue Iceberg REST konfiguriert haben, können Sie eine Iceberg-Tabelle erstellen.