💬

Apache Polaris

2024/11/02に公開

Apache Polaris

概要

Apache Polaris (以下、Polaris) は Apache Iceberg (以下、Iceberg) テーブル のカタログであり、Iceberg REST カタログプロトコルに基づいて実装されています。

Iceberg テーブルとは

Iceberg テーブルは、オブジェクトストレージを使用することで、安価に大容量のデータを保管しながらも、従来のファイルフォーマットにはない、強力な機能を提供します。

  • seriazable isolation
  • schema evolution
  • time travel query
  • version rollback

Iceberg カタログとは

Iceberg カタログは、Iceberg テーブルを、クエリーエンジンで使用するにあたって、不可欠なコンポーネントです。
Iceberg テーブルは、いくつか重要な機能を、カタログに委ねています。例えば、次の機能です。

  • テーブル名および名前空間の管理
  • スナップショットの管理
    • Icebergのスナップショットとは、ある時点のテーブルの状態を指します。
    • スナップショットにはそれぞれIDを持ちます。クエリーエンジンが、スナップショットを更新する都度、IDをインクリメントします。
    • カタログは、Iceberg テーブルの最新のスナップショットIDを追跡・更新し、クエリーエンジンから利用可能にします。

また、Iceberg テーブルは、次の機能を含みません。これらは Iceberg テーブルとは別のコンポーネントが、提供することになります。

  • テーブルの作成・削除、参照・更新に関る、認証および認可

Polaris がもたらす恩恵

Polaris は、Iceberg カタログの機能に加えて、Iceberg テーブルの認証・認可機能を提供します。
Iceberg テーブルを Polaris でカタログ管理することにより、異なるクエリーエンジン間で、Iceberg テーブルへの参照・更新にかかる認証・認可を集中管理することが可能になります。

認証

クエリーエンジンは、Polaris への接続時の credential として、Service Principal を使います。
Service Principal は、Client ID と Client secret のペアであり、クエリーエンジンごとに予め Polaris に作成します。

クエリーエンジンがPolarisに接続するごとに、Polarisは、クエリーエンジンのService Principalを認証し、Service Principal が与えられた Principal Role を解決します。

Principal Roleは、Polaris のリソースに対する権限を論理的なグループにまとめて、Service Principal に与えるためのエンティティです。
Polaris の認可は、role-base access control (RBAC) モデルに基づいており、ひとつの Service Principal に複数の Principal Role を与えることができます。

認可

オブジェクトストレージの認可の実装は、クラウドプロバイダーによって異なります。Polarisは、これらの実装の差異を吸収し、統一したインターフェースをクエリーエンジンに提供します。認証済みPrincipal Roleに与えられた認可に応じて、オブジェクトストレージのバケットおよびパスに対する権限を一時的に与えます。

例えば、次のようなイメージです。

  • AWS
    S3 バケット/パスに対する GetObject, PutObject権限を、STS tokenにより一時的に与える
  • Azure
    Blob コンテナー/パスに対する Read/WritePermission を、SAS tokenにより一時的に与える
  • GCP
    GCS バケット/パスに対する inRole:roles/storage.legacyObjectReader/Writer権限を、access token により一時的に与える

Discussion