Recruit Data Blog

  • はてなブックマーク

目次

開発した背景

株式会社リクルートでデータエンジニアとして働いている宮井です。普段はインフラ寄りのデータエンジニアとして社内のデータ基盤関連システムの開発・運用に携わっています。今回は直近で開発したBigQueryの柔軟な権限管理を実現するためのシステムについて紹介させていただきます。

当社ではいくつかのデータ基盤チームが存在しており、これはその中の1つのチームで開発されたシステムです。基盤上で管理されているデータを利用するためには、利用者はまず申請を行う必要があります。この申請という作業が利用者にとってハードルが高く、特に新規に着任される方にとっては業務で必要となるデータを詳細まで把握することが難しいため、業務を開始するまでに時間がかかってしまうという課題がありました。

データの管理者側の立場でも、当社のBigQueryのデータセットは多くの場合は事業や開発チームといった管理側の単位で区切られていることが多く利用側の単位ではありません。そのためデータセットへの権限付与では粒度が大きくて分析に必要ではないテーブルが含まれているのではないかといった不安がありました。ただテーブル単位での権限付与とすると、先ほど述べた通り利用者側での判断が難しくなってしまうという問題があります。場合によっては権限が足りないテーブルを何度も申請することなって双方の負担が増大してしまうかもしれません。

こうした課題に対応するために、利用者側にとって理解しやすい単位でデータセットやテーブルをまとめた仮想的なデータセットを作成し、その仮想的なデータセットに対して権限を付与することで、利用者側にとっては申請しやすく、かつ管理者側にとってはより厳密な権限管理を実現することを目指しました。

この仮想的なデータセットはBigQueryのデータセットやテーブルをまとめたものであるため、以後はリソースセットと称して紹介させていただきます。

チーム内で使うだけであればTerraformなどのIaCツールを使って簡易的に実現することもできると思いますが、将来的に他のチームで管理されているデータを混ぜたいといった要望が出てきた場合に対応が難しくなると考え、システム化しました。

類似するプロダクトとの比較

Google Cloud ではリソースセットに似たような機能を持つプロダクトとして Dataplex があります。これはレイク/ゾーン/アセットという単位で権限を管理できるため、リソースセットとほぼ同等の機能を実現できるといえます。

ただDataplexは、アセットとして追加できるBigQueryのリソースはデータセットのみです。テーブル単位での追加ができないため、背景で説明したような課題を解決することができません。そのため、今回はDataplexを利用せずに新しいシステムを開発することにしました。

リソースセットを実現する権限管理の構成

まず単純なBigQueryのテーブル1つに対する権限付与の構成を以下の図に示します。

BigQueryのテーブル1つに対する権限付与の構成

この構成では、BigQueryのテーブルに対して権限を付与するために、BigQueryのテーブルに対応するGoogleグループを作成し、そのGoogleグループに必要な権限をテーブルアクセスポリシーによって付与しています。さらに利用者をグルーピングするためのGoogleグループも用意し、テーブルに対応したGoogleグループにそのユーザーのGoogleグループを追加することで権限を付与しています。

なぜこのような2段構成になっているのか、直接テーブルのアクセスポリシーにユーザーのGoogleグループを追加する形ではダメなのか疑問に思われたかもしれません。当社のデータ基盤は複数存在し、管理するチームも別であるため、チームによってはテーブルのアクセスポリシーをTerraform等のIaCツールで管理している場合があります。その時にそのテーブルのアクセスポリシーを直接この権限管理システムが編集してしまうと差分が出てしまい、管理ができなくなります。そのため権限管理システムから編集するのはテーブルに割り当てられたGoogleグループのメンバーのみとしているのです。

この構成をふまえた上で、リソースセットを実現する権限管理の構成を以下の図に示します。

リソースセットを実現する権限管理の構成

リソースセットに対してもテーブル単体と同様にGoogleグループを払い出しています。リソースセットは論理的な単位であり、直接対応するGCP上のリソースは存在しません。そのためこのGoogleグループには直接付与された権限はありません。

リソースセットに追加された各テーブルに紐づいたGoogleグループには、このリソースセットに紐付けられたGoogleグループがメンバーとして追加されます。そうすることでリソースセットに紐づいたGoogleグループのメンバーは、リソースセットに追加されたテーブルに対して権限を付与されます。リソースセットを利用したいユーザーがいれば、そのリソースセットに紐づいたGoogleグループにユーザーのGoogleグループをメンバーとして追加すれば良いのです。

権限管理システムから見るとGCP上の実体を持つリソースであってもリソースセットであっても紐づいたGoogleグループがあり、その紐づいたGoogleグループに対してユーザーのGoogleグループをメンバーとして追加すれば良いという構成で統一感があります。

注意しなければならないのは、直感的にはリソースセットにリソースが含まれるのでリソースセットに紐づくGoogleグループにテーブルに紐づくGoogleグループが入るような形を想像してしまう点です。実際にはテーブルに紐づくGoogleグループにリソースセットに紐づくGoogleグループがメンバーとして入る形で、印象とは逆になっています。

おわりに

Googleグループを多段にして使うことで、リソースセットという概念を実現する方法について紹介しました。今回紹介した権限管理の構成は応用が利くと思いますので、ぜひ参考にしていただければと思います。

当社では、様々な職種のエンジニアを募集しています。興味のある方は、以下の採用ページをご覧ください。

===========================

株式会社リクルート 中途採用サイト テクノロジー職

株式会社リクルート 新卒採用

===========================

Yoshihiro MIYAI

データインフラエンジニア(シニアプロフェッショナル)

Yoshihiro MIYAI

動画サービス提供会社などを経て、データエンジニアとしてリクルートコミュニケーションズに入社。以後、社内のデータ基盤関連のシステムを開発・運用。