Icebergテーブルのカタログ統合を構成する

このトピックでは、Icebergテーブルの カタログ統合 を作成および構成するのに役立つ情報を提供します。外部Icebergカタログを使用する、またはカタログを一切使用しないIcebergテーブルを作成するには、カタログ統合を指定する必要があります。

注釈

カタログ統合が必要なのは、外部Icebergカタログを使用して読み取り専用のIcebergテーブルを作成する場合のみです。SnowflakeをIcebergカタログとして使用するIcebergテーブルを作成するには、カタログ統合は必要ありません。カタログとしてSnowflakeを使用するには、 CREATE ICEBERG TABLE コマンドで CATALOG パラメーターを SNOWFLAKE に設定します。

カタログ統合を使用する

CREATE CATALOG INTEGRATION コマンドを使用すると、Icebergテーブルのカタログ統合を作成できます。

例: オブジェクトストレージ内でIcebergファイルのカタログ統合を作成する

次の例のステートメントは、 OBJECT_STORECATALOG_SOURCE 値として設定することで、外部クラウドストレージの場所にあるIcebergメタデータのカタログ統合を作成します。

CREATE OR REPLACE CATALOG INTEGRATION icebergCatalogInt
  CATALOG_SOURCE=OBJECT_STORE
  TABLE_FORMAT=ICEBERG
  ENABLED=TRUE;
Copy

AWS Glueのカタログ統合を設定する

このセクションでは AWS Glueのカタログ統合を作成し、SnowflakeにAmazon Glueデータカタログへの制限付きアクセス権を付与する方法について説明します。

注釈

このセクションの手順を完了するには、 IAM ポリシーとロールを作成および管理するためにAmazon Web Services(AWS)での権限が必要です。AWS 管理者でない場合は、 AWS 管理者にこれらのタスクを実行するように依頼します。

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

ベストプラクティスとして、SnowflakeがGlueデータカタログにアクセスするための新しい IAM ポリシーを作成します。その後、ポリシーを IAM ロールに添付し、ロールのために AWS が生成するセキュリティ認証情報を使用して、カタログ内のファイルにアクセスできます。手順については、 AWS IDおよびアクセス管理ユーザーガイドの IAM ポリシーの作成ロール権限ポリシーの変更 をご参照ください。

少なくとも、Snowflakeはテーブルに関する情報にアクセスするために、Glueデータカタログに対して次の権限が必要とします。

  • glue:GetTable

  • glue:GetTables

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

{
   "Version": "2012-10-17",
   "Statement": [
      {
         "Sid": "AllowGlueCatalogTableAccess",
         "Effect": "Allow",
         "Action": [
            "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での暗号化の設定 をご参照ください。

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

CREATE CATALOG INTEGRATION コマンドを使用して、Glueデータカタログのカタログ統合を作成します。

次の例は AWS Glueカタログソースを使用するカタログ統合を作成します。この例では、オプションの GLUE_REGION パラメーターの値を指定しています。

CREATE CATALOG INTEGRATION glueCatalogInt
   CATALOG_SOURCE=GLUE
   CATALOG_NAMESPACE='my.catalogdb'
   TABLE_FORMAT=ICEBERG
   GLUE_AWS_ROLE_ARN='arn:aws:iam::123456789012:role/myGlueRole'
   GLUE_CATALOG_ID='123456789012'
   GLUE_REGION='us-east-2'
   ENABLED=TRUE;
Copy

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

カタログ統合を作成したときにSnowflakeアカウントに作成された AWS IAM ユーザーと外部 ID に関する情報を取得するには、 DESCRIBE CATALOG INTEGRATION コマンドを実行します。この情報を次のセクションで AWS に提供して、信頼関係を確立します。

次のコマンド例は、前のステップで作成したカタログ統合について説明します。

DESCRIBE CATALOG INTEGRATION glueCatalogInt;
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 。

これらの値は次のセクションで提供します。

ステップ5: AWS Glueデータカタログにアクセスするために IAM ユーザー権限を付与する

信頼ポリシーの変更 の手順に従って、 ステップ3: Snowflakeアカウントの AWS IAM ユーザーと外部 ID を取得する で記録した値を IAM ロールの信頼ポリシーに追加します。

次の例の信頼ポリシーは、 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は権限が正しく設定されているかどうかを確認しません。