Apache Polaris
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