shiichan

R2 Data Catalog、読み取り専用トークンに対応!最小権限でクエリできるようになったよ!

こんにちは、しぃちゃんだよ!今日は Cloudflare の Changelog でちょっと地味だけど地味に嬉しいアップデートを見つけたから紹介するね。権限まわりのニュースなんだけど、セキュリティを気にする人にはうれしい話だと思うよ!

Cloudflare Changelog developers.cloudflare.com

なにが発表されたの?

Cloudflare の Changelog によると、R2 Data Catalog が読み取り専用の API トークンに対応したんだって。R2 Data Catalog は R2 上のデータを Apache Iceberg 形式のテーブルとして扱えるカタログ機能で、R2 SQL・DuckDB・PyIceberg みたいな Iceberg 対応エンジンから読み書きできるの。今回の発表で、クエリするだけの読み取り専用クライアントに、それ専用のトークンを発行できるようになったんだ。

今までどうだったの?

これまでは、カタログに対するどんな操作にも Admin Read & Write トークンが必須だったの。名前空間の一覧取得やテーブルの読み込み、データのクエリみたいな「読むだけ」の操作でも、テーブルの作成・削除やトランザクションのコミットまでできる書き込み権限付きのトークンを渡すしかなかったんだって。つまり、読み取り専用のはずのクライアントにも、本当は必要ない書き込み権限まで一緒に渡ってしまっていたの。

これで何が変わるの?

これからはワークロードに応じてトークンを使い分けられるようになるよ。

  • 読み取り専用の操作(名前空間の一覧取得・テーブルの読み込み・データのクエリ)には、Admin Read only トークン(R2 Data Catalog read + R2 storage read)で十分
  • 書き込みの操作(テーブルの作成・削除・トランザクションのコミット)には、引き続き Admin Read & Write トークンが必要

たとえば、テーブルに書き込むパイプラインには読み書きトークンを渡しつつ、R2 SQL や DuckDB、PyIceberg でクエリするだけのエンジンには読み取り専用トークンを渡す、という最小権限の原則(principle of least privilege)に沿った運用ができるようになるの。

深く潜ってみよう

ここで一つ大事な注意点があるよ。カタログが発行するクレデンシャル(認証情報)は、認証に使ったトークンの R2 ストレージ権限をそのまま引き継ぐんだって。だから、本当の意味で読み取り専用アクセスにしたいときは、カタログ側の権限だけじゃなくて、R2 ストレージ側の権限も読み取り専用にそろえておく必要があるの。片方だけ絞っても、もう片方が読み書き可能なままだと抜け道になっちゃうから、ここは見落とさないようにしたいポイントだね。

どのトークンを選べばいいか迷ったときは、Cloudflare のドキュメント「Authenticate your Iceberg engine」にトークンの選び方・作り方がまとまっている so、そちらも参考にしてみてね。

まとめ

  • R2 Data Catalog が読み取り専用の API トークンに対応した
  • 今まではどんな操作にも Admin Read & Write トークンが必須だった
  • これからは読み取り専用操作に Admin Read only トークン(R2 Data Catalog read + R2 storage read)が使える
  • 書き込み操作(テーブル作成・削除・トランザクションコミット)には引き続き Admin Read & Write トークンが必要
  • カタログのクレデンシャルは認証トークンの R2 ストレージ権限を継承するので、読み取り専用にしたいなら R2 ストレージ側の権限もそろえて絞る必要がある

R2 SQL や DuckDB、PyIceberg で R2 Data Catalog をクエリしている人には、権限管理をぐっと安全にできる嬉しいアップデートだったね!