データ接続と統合Iceberg tables外部クライアントの接続ネットワークアクセスの設定

注: 以下の翻訳の正確性は検証されていません。AIPを利用して英語版の原文から機械的に翻訳されたものです。

外部クライアントのネットワークアクセスを設定する

このページでは、Foundry の Iceberg カタログに接続する外部 Iceberg クライアントのネットワークアクセスを確立する方法を説明します。クライアントがカタログで認証する方法については、Iceberg クライアントを認証するを参照してください。

外部から Foundry の Iceberg テーブルに接続する場合、次の2つのエンドポイントへのネットワークアクセスを確立する必要があります。

外部クライアントのネットワークから、両方のエンドポイントに到達できる必要があります。どちらか一方に到達できない場合、クライアントはテーブルを読み書きできません。

Iceberg REST カタログのネットワークイングレス

Foundry の Iceberg REST カタログは、Foundry ホスト名の https://<your_foundry_hostname>/iceberg で提供されます。他の Foundry API と同様に、Foundry アプリケーションレイヤー全体へのネットワークイングレスを有効にすると、アクセスできるようになります。

Foundry アプリケーション:ネットワークイングレスを設定するの手順に沿って、Iceberg REST カタログ API を含む Foundry アプリケーションレイヤーへのネットワークアクセスを有効にします。

カタログへのアクセスのみでも、認証済みのクライアントはテーブルの一覧表示とスキーマの読み取りができます。ただし、ストレージバケットへのアクセスも設定するまでは、メタデータファイルやデータファイルを取得できません。

ストレージバケットのネットワークイングレス

外部クライアントから基盤となる Iceberg ストレージバケットへのネットワークイングレスを確立するには、次の手順を実行します。

  1. ストレージバケットの詳細を特定する
  2. ストレージバケットへのアクセスを設定する

ストレージバケットの詳細を特定する

Iceberg の名前空間識別子はドット区切りですが、カタログ URL では階層間にユニット区切り文字(%1F)を使用して表されます。たとえば、名前空間 Namespace.Project.Folder は、URL パスでは Namespace%1FProject%1FFolder としてエンコードされます。

特定の Iceberg テーブルの基盤となるストレージバケットを見つけるには、カタログにテーブルのメタデータをクエリし、location フィールドを読み取ります。

Copied!
1 2 3 4 curl --silent --show-error \ "https://<your_foundry_hostname>/iceberg/v1/namespaces/<namespace>/tables/<table>" \ -H "Authorization: Bearer <your_token>" \ | jq -r '.metadata.location'

レスポンスは、s3://<bucket_name>/iceberg/<table_locator> 形式のストレージ URI、または Azure Blob File System (ABFS) や Google Cloud Storage の同等の URI です。ホスト部分でバケットを特定できます。エンロールメントで複数のストレージバケットを使用している場合は、接続するバケットごとに1個のテーブルを参照して、この操作を繰り返します。

または、データセットの詳細 > メタデータファイルビューに表示されるメタデータ JSON の先頭で、同じ location 値を確認できます。

ストレージバケットへのアクセスを設定する

Foundry 管理ストレージを使用する場合: 基盤となるストレージバケットは Palantir が運用しており、外部クライアントのトラフィックを許可リストに登録する必要があります。Palantir サポートに登録を依頼し、次の詳細情報をお知らせください。

  • Foundry ホスト名
  • 前の手順で特定したストレージバケット名
  • 外部クライアントのエグレス IPv4 アドレス、または Virtual Private Cloud (VPC) エンドポイント識別子

bring-your-own-bucket (BYOB) ストレージを使用する場合: ストレージバケットはご自身のクラウドアカウント内にあります。外部クライアントからのトラフィックを許可するために、クラウドアカウント内でバケットまたはストレージアカウントのネットワークポリシーを直接更新します。

接続を確認する

Foundry の Iceberg カタログとストレージの場所の両方へのネットワークイングレスを設定したら、クライアントに依存しない簡単なチェックで設定を検証できます。次の手順を実行します。

  1. カタログにテーブルのメタデータと資格情報の払い出しをリクエストします。 まずトークンを生成し、X-Iceberg-Access-Delegation: vended-credentials ヘッダーを付けてカタログを呼び出します。

    Copied!
    1 2 3 4 RESPONSE=$(curl --silent --show-error \ "https://<your_foundry_hostname>/iceberg/v1/namespaces/<namespace>/tables/<table>" \ -H "Authorization: Bearer <your_token>" \ -H "X-Iceberg-Access-Delegation: vended-credentials")

    レスポンスはすべてカタログから提供され、完全なテーブルメタデータがインラインで含まれるほか、有効期間の短いストレージ資格情報を含む config マップも含まれます。メタデータを読み取るためにバケットを呼び出す必要はありません。

  2. メタデータからファイルパスを選びます。 現在のスナップショットの manifest-list は、バケット内にあり、メタデータから直接参照されているため、適しています。ストレージ資格情報も抽出します。

    Copied!
    1 2 3 4 5 6 7 CURRENT_SNAPSHOT_ID=$(echo "$RESPONSE" | jq -r '.metadata["current-snapshot-id"]') FILE_PATH=$(echo "$RESPONSE" | jq -r --argjson id "$CURRENT_SNAPSHOT_ID" \ '.metadata.snapshots[] | select(.["snapshot-id"] == $id) | .["manifest-list"]') export AWS_ACCESS_KEY_ID=$(echo "$RESPONSE" | jq -r '.config["s3.access-key-id"]') export AWS_SECRET_ACCESS_KEY=$(echo "$RESPONSE" | jq -r '.config["s3.secret-access-key"]') export AWS_SESSION_TOKEN=$(echo "$RESPONSE" | jq -r '.config["s3.session-token"]')
  3. 払い出された資格情報を使用して、ストレージバケットからファイルを取得します。 S3 を基盤とするテーブルの場合は、次のようにします。

    Copied!
    1 aws s3 cp "$FILE_PATH" /dev/null

コマンドの実行に成功した場合、カタログによる資格情報の払い出しに成功し、このテーブルの接頭辞配下のファイルについてバケットに到達できることを意味します。これにより、イングレス設定が正しいことを確認できます。AccessDenied エラーは、ソース IP アドレスまたは VPC エンドポイントがバケットの許可リストに登録されていないことを示します。

さらに Iceberg クライアントを使用してテーブル全体の読み取り(カタログ + メタデータ + データファイル)を確認するには、Bearer トークンを使用して接続を確認するを参照してください。

ネットワークの許可リスト登録は、認証に加えて適用されます。カタログは資格情報を払い出す前に、引き続き呼び出し元プリンシパルの権限を検証するため、トークンを生成したユーザーには、対象テーブルに対する読み取り権限または書き込み権限も必要です。