Apache Iceberg™ REST カタログのカタログ統合を構成する¶
Apache Iceberg™ REST カタログ統合 により、Snowflakeはオープンソース Apache Iceberg REST OpenAPI 仕様 に準拠した Apache Iceberg™ テーブル で管理されているリモートカタログにアクセスできます。
REST カタログへの接続¶
パブリックエンドポイントまたはプライベートネットワークを使用するIceberg REST API に接続できます。
パブリックエンドポイント¶
パブリックエンドポイントを使用してIceberg REST API に接続するには、次の認証方法を使用するカタログ統合を作成します。
OAuth
ベアラートークンまたはパーソナルアクセストークン(PAT)
SigV4
プライベートネットワーク¶
プライベートネットワークでホストされているIceberg REST API に接続するには、署名バージョン4(SigV4)認証を使用するカタログ統合を作成できます。
カタログ統合を使用する¶
CREATE CATALOG INTEGRATION (Apache Iceberg™ REST) コマンドを使用して、選択した認証方法のカタログ統合を作成します。REST_CONFIG と REST_AUTHENTICATION の引数に指定する値は、選択した認証方法によって異なります。
OAuth¶
以下の例では、 OAuth を使用して Tabular に接続する REST カタログ統合を作成しています。
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;
次の例では、 OAuth を使用してDatabricks Unity Catalogに接続する REST カタログ統合を作成します。
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;
ベアラートークンまたは PAT¶
次の例では、 PAT トークンを使用してDatabricks Unity Catalogに接続する REST カタログ統合を作成します。
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¶
次の図は、 API Gatewayおよび SigV4 認証を使用して、Snowflakeが REST カタログサーバーとどのようにやり取りするかを示しています。
このセクションの手順に従って、 Amazon API Gateway および 署名バージョン4(SigV4) 認証の REST API を使用して、Snowflakeを一般にアクセスできないIceberg REST カタログに安全に接続します。
Amazon API Gatewayで REST API を作成¶
SnowflakeをIceberg REST カタログに接続するには、Amazon API Gatewayの REST API リソース が必要です。
Amazon API GatewayにIcebergカタログ用の REST API リソースがまだない場合は、Icebergカタログ OpenAPI 定義ファイルをインポートするか、手動でエンドポイントを追加することで、シンプルな REST API を作成できます。
AWS 管理コンソールで、 API Gateway を検索し、選択します。
Create API を選択します。
REST API の下にある Build を選択します。 プライベート の REST API を作成するには、 REST API Private の下にある Build を選択します。
以下のオプションのいずれかを選択します。
手動でエンドポイントを追加して API を作成するには、 New API を選択します。
OpenAPI 定義ファイルを使用して API を作成するには、 Import API を選択し、ファイルをアップロードするか、コードエディターに定義を貼り付けます。
API name とオプションで Description を入力します。
注釈
プライベート REST API を作成する際、 VPC エンドポイント ID を入力する必要はありません。
Create API を選択します。
API Gatewayでの REST API の作成と開発の詳細については、 Amazon API Gateway開発者ガイド を参照してください。
IAM ポリシーを作成し、ロールに添付する¶
このステップでは、Snowflakeが API Gatewayに接続するために使用できる AWS IAM ロールを作成します。API を呼び出す許可を与えるポリシーをロールに添付します。
AWS 管理コンソールで、 IAM を検索し、選択します。
左側のナビゲーションペインから Policies を選択します。
Create policy を選択し、 Policy editor に JSON を選択します。
空のポリシーを、 API メソッドを呼び出す許可を持つポリシーに置き換えます。たとえば、次の一般ポリシーは、 AWS アカウントのすべての API Gatewayリソースに対して起動アクションを許可します。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "execute-api:Invoke" ], "Resource": "arn:aws:execute-api:*:<aws_account_id>:*" } ] }
重要
ベストプラクティスとして、ユースケースに最低限必要な権限を付与するポリシーを使用してください。その他のガイダンスおよびポリシー例については、 IAM 権限で API へのアクセスを制御 を参照してください。
Next を選択します。
Policy name (例:
snowflake_access
)とオプションの Description を入力します。Create policy を選択します。
IAM ダッシュボードの左側のナビゲーションペインから、 Roles を選択します。
ポリシーを添付するロールを選択します。カタログ統合を作成するときに、このロールを指定します。ロールを持っていない場合は、 新しいロールを作成します。
Permissions タブのロール Summary ページで、 Add permissions » Attach policies を選択します。
API Gateway用に作成したポリシーを検索し、その横にあるボックスにチェックを入れ、 Add permissions を選択します。
ロール Summary のページで、ロール ARN をコピーします。この ARN は、カタログ統合を作成するときに指定します。
API Gatewayリソースポリシーを添付(プライベート APIs のみ)¶
REST API がプライベートの場合、Amazon API Gatewayリソースポリシーを API に添付する必要があります。リソースポリシーにより、SnowflakeはSnowflakeアカウントが配置されているAmazon Virtual Private Cloud(VPC)から API を呼び出すことができます。
Snowflakeでは、 SYSTEM$GET_SNOWFLAKE_PLATFORM_INFO 関数を呼び出して、Snowflakeアカウントがある VPC の ID を取得します。関数出力から VPC ID をコピーします。
SELECT SYSTEM$GET_SNOWFLAKE_PLATFORM_INFO();
出力:
{"snowflake-vpc-id":["vpc-c1c234a5"]}
API Gatewayリソースポリシーの添付 の指示に従って、リソースポリシーを REST API に添付します。
以下のポリシー例を貼り付け、修正します。
{ "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>" } } } ] }
ポリシーの最初のステートメントは、Snowflake VPC から発信されていないすべてのリクエストを拒否します。2番目のステートメントは、 想定ロールセッションプリンシパル を使用するSnowflake VPC から発信されるリクエストからの(すべてのメソッドに対する)呼び出しアクションを許可します。
API Gatewayリソースポリシーについては、こちらをご覧ください。
エンドポイント URL の取得¶
REST API エンドポイント URL を取得します(または URL を 呼び出します)。エンドポイント URL を取得する前に、 API をステージにデプロイする必要があります。
Amazon API Gatewayコンソールで、 REST API を選択します。
左側のナビゲーションペインで、 Stages を選択します。
Stage details の下で、 Invoke URL をコピーします。
カタログ統合を作成するときに、エンドポイント URL を指定します。
SigV4 のカタログ統合を作成する¶
Amazon API Gatewayで REST API を用意し、 IAM 権限を使用して API へのアクセスを制御する初期手順を完了したら、Snowflakeでカタログ統合を作成できます。
コマンドの構文とパラメーターの説明を表示するには、 CREATE CATALOG INTEGRATION (Apache Iceberg™ REST) を参照してください。
パブリック REST API
パブリック REST API のカタログ統合を作成するには、 CATALOG_SOURCE
として ICEBERG_REST
を指定し、 SIGV4
認証を使用します。
API エンドポイント URL や IAM ロール ARN などの詳細を含めてください。
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;
プライベート REST API
プライベート REST API のカタログ統合を作成するには、 CATALOG_API_TYPE
パラメーターを AWS_PRIVATE_API_GATEWAY
に設定する必要があります。
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;
IAM の信頼関係を設定する¶
次に、カタログ統合を作成したときにSnowflakeアカウントに作成された AWS IAM ユーザーと外部 ID に関する情報を取得し、 IAM ロールの信頼関係を構成する必要があります。
Snowflakeで、 DESCRIBE CATALOG INTEGRATION コマンドを呼び出します。
DESCRIBE CATALOG INTEGRATION my_rest_catalog_integration;
次の値を記録します。
値
説明
API_AWS_IAM_USER_ARN
Snowflakeアカウント用に作成された AWS IAM ユーザー。例えば、
arn:aws:iam::123456789001:user/abc1-b-self1234
。Snowflakeは、Snowflakeアカウント全体用に単一の IAM ユーザーをプロビジョニングします。API_AWS_EXTERNAL_ID
信頼関係を確立するために必要な外部 ID。
AWS 管理コンソールで、 IAM を検索し、選択します。
左側のナビゲーションペインから Roles を選択します。
カタログ統合用に作成した IAM ロールを選択します。
Trust relationships タブを選択します。
Edit trust policy を選択します。
記録した値でポリシードキュメントを修正します。
{ "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>" } } } ] }
Update policy を選択して変更を保存します。