AWS Glue Iceberg REST のカタログ統合の構成

このトピックの手順に従って、`Signature Version 4(SigV4)<https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html>`_ 認証で AWS Glue Iceberg REST エンドポイント のカタログ統合を作成します。

ステップ1:AWS Glueデータカタログのアクセス許可を構成する

Snowflakeが AWS Glueデータカタログにアクセスするための IAM ポリシーを作成します。カタログ統合を作成するときに指定する IAM ロールにポリシーを添付します。手順については、 AWS IDおよびアクセス管理ユーザーガイドの IAM ポリシーの作成ロール権限ポリシーの変更 をご参照ください。

読み取り専用のポリシー例

SnowflakeがGlue Iceberg REST カタログを使用して情報にアクセスするには、少なくとも、 AWS Glueデータカタログに対する以下の権限が必要です。

  • glue:GetCatalog

  • glue:GetDatabase

  • glue:GetDatabases

  • glue:GetTable

  • glue:GetTables

次のポリシー例(JSON 形式)は、指定したデータベース内のすべてのテーブルにアクセスするために必要な権限を提供します。

{
   "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

注釈

  • このポリシーの Resource 要素を変更して、許可されるリソース(カタログ、データベース、テーブルなど)をさらに制限することができます。詳細については、 AWS Glueで定義されたリソースタイプ をご参照ください。

  • AWS Glueに暗号化を使用する場合、ポリシーを変更して AWS キー管理サービス(AWS KMS)権限を追加する必要があります。詳細については、 AWS Glueでの暗号化の設定 をご参照ください。

読み取りと書き込みのポリシー例

次のポリシー例(JSON 形式)は、すべてのデータベース内のすべてのテーブルへの読み取りおよび書き込みアクセスに必要な権限を提供します。外部管理テーブルへの書き込みアクセス を構成するには、このポリシーを例として使用します。

{
  "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

注釈

  • AWS Glue カタログがテーブルの場所にメタデータを書き込むには、ポリシーでストレージの場所へのアクセスを提供する必要があります。

  • このポリシーの Resource 要素にある "arn:aws:glue:*:<accountid>:database/*" 行は、すべてのデータベースを指定します。これは、CREATE SCHEMA コマンドを使用してSnowflakeからGlueに新しいデータベースを作成する場合に必要です。単一のデータベースへのアクセスを制限するには、データベース名で指定できます。リソースの定義の詳細については、AWS Glue で定義されたリソースタイプ をご参照ください。

  • AWS Glueに暗号化を使用する場合、ポリシーを変更して AWS キー管理サービス(AWS KMS)権限を追加する必要があります。詳細については、 AWS Glueでの暗号化の設定 をご参照ください。

(オプション)Lake ormationのアクセス制御を構成する

きめ細かなアクセス制御に AWS Lake Formation を使用する場合は、Lake Formationの構成でSnowflakeがカタログオブジェクトと基盤となるデータにアクセスできるようにする必要があります。

前の手順で作成した IAM ロール(カタログ統合を作成するときにSnowflakeで指定するロール)には、lakeformation:GetDataAccess IAM 権限が必要です。この権限は、基盤となるデータへの読み取りおよび書き込みアクセス権を付与します。

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

詳細については、Lake Formationドキュメントの 基盤となるデータアクセス制御 をご参照ください。

また、IAM ロールにデータ権限を付与する必要があります。データ権限の付与に使用するメソッドは、Lake Formationの設定によって異なります。たとえば、名前付きリソースメソッドを使用して AWS Glueオブジェクトに権限を付与したり、タグベースのアクセス制御を使用したりできます。詳細と指示については、AWS Lake Formationドキュメント をご参照ください。

ステップ2:Snowflakeでカタログ統合を作成する

` コマンドを使用して、 AWS REST Glue Iceberg <https://docs.aws.amazon.com/glue/latest/dg/connect-glu-iceberg-rest.html> エンドポイント _:doc:/sql-reference/sql/create-catalog-integration-rest` のカタログ統合を作成します。構成した IAM ロールを指定します。CATALOG_NAME の場合は、 AWS アカウント 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

条件:

  • CATALOG_URI は AWS Glue Iceberg REST カタログのサービスエンドポイントです。

  • CATALOG_NAME は AWS アカウントの ID です。

詳細情報については、 CREATE CATALOG INTEGRATION (Apache Iceberg™ REST) を参照してください。AWS Glue 用のカタログ統合の構成手順が記載されています。

ステップ3:Snowflakeアカウントの AWS IAM ユーザーと外部 ID を取得する

Snowflakeアカウントの AWS IAM ユーザーと外部 ID に関する情報を取得するには、DESCRIBE CATALOG INTEGRATION コマンドを実行します。この情報を次のステップで AWS に提供して、信頼関係を確立します。

DESCRIBE CATALOG INTEGRATION glue_rest_catalog_int;
Copy

次の値を記録します。

説明

GLUE_AWS_IAM_USER_ARN

Snowflakeアカウント用に作成された AWS IAM ユーザー。例えば、 arn:aws:iam::123456789001:user/abc1-b-self1234。Snowflakeは、Snowflakeアカウント全体用に単一の IAM ユーザーをプロビジョニングします。アカウント内のすべてのGlueカタログ統合は、その IAM ユーザーを使用します。

GLUE_AWS_EXTERNAL_ID

信頼関係を確立するための外部 ID。

ステップ4:IAM ユーザーに AWS Glue Data Catalogへのアクセス権限を付与します。

カタログ統合の作成時に :emph:` で指定したの 同じIAM ARN ロールの信頼ポリシーを更新します(:code:`GLUE_AWS_ROLE_ARN)。前のステップで記録した値を信頼ポリシーに追加します。

手順については、 信頼ポリシーの変更 をご参照ください。

次のポリシー例は、GLUE_AWS_IAM_USER_ARNGLUE_AWS_EXTERNAL_ID の値を指定する場所を示しています。

{
   "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

条件:

  • glue_iam_user_arn は記録した GLUE_IAM_USER_ARN の値です。

  • glue_aws_external_id は記録した GLUE_AWS_EXTERNAL_ID の値です。

注釈

  • セキュリティ上の理由から、新しいカタログ統合を作成する場合(または CREATE OR REPLACE CATALOG INTEGRATION 構文を使用して既存のカタログ統合を再作成する場合)、新しいカタログ統合には異なる外部 ID があり、新しい外部 ID で信頼ポリシーを変更しない限り、信頼関係を解決できません。

  • 権限が正しく構成されていることを確認するには、このカタログ統合を使用する Icebergテーブルを作成 をします。このカタログ統合を参照するIcebergテーブルを作成するまで、Snowflakeは権限が正しく設定されているかどうかを確認しません。

次のステップ

AWS Glue Iceberg REST のカタログ統合を構成したら、Icebergテーブルを作成 できます。