BigQuery の行レベルのセキュリティにより、データへのアクセスのよりきめ細かい制御が可能に
Google Cloud Japan Team
※この投稿は米国時間 2021 年 6 月 22 日に、Google Cloud blog に投稿されたものの抄訳です。
データ ウェアハウスの管理者にとって、データ セキュリティは常に懸念事項です。組織内外から安全にデータへアクセスできるようにするため、データへのアクセス権は細分化して管理する必要があります。日々複雑になっていくデータ プラットフォームに対応していくため、機密データへのアクセスを特定してモニタリングすることがますます不可欠になってきています。多くの場合、機密データはその他のデータと一緒に保存されており、機密データへのアクセス制限はデータの場所や財務情報の有無などの要素に基づいて設定する必要があります。また、一部のユーザーにとっては機密データであっても、他のユーザーにとっては機密ではないという微妙な差があることもあります。
これを受け、本日、BigQuery の行レベルのセキュリティが一般提供となりました。これにより、同一テーブル内のデータのサブセットに対するアクセスをユーザー グループ別に制御できるようになります。行レベルのセキュリティ(Row Level Security、RLS)は、最小限のアクセス権限の原則の延長として、BigQuery テーブルでのきめ細やかなアクセス制御ポリシーを可能にします。現在、BigQuery はプロジェクト レベル、データセット レベル、テーブルレベル、列レベルでのアクセス制御をサポートしています。アクセス制御機能に行レベルのセキュリティが加わったことで、アクセスを許可するユーザー条件に基づいてテーブル内の特定の行に対するアクセスをフィルタし、定義できるようになりました。これでデータ プロフェッショナルも安心できます。
「デジタル トランスフォーメーションとクラウドへのデータの移行により、情報資産から引き出せるビジネス価値を増大できます。しかし、国際的な規制や契約上の要件を遵守するうえで、きめ細やかなデータアクセス制御は欠かせません。BigQuery の行レベルのセキュリティのおかげで、データの所在地と輸出に関する規制を遵守することができています」と、Iron Mountain のエンタープライズ データ プラットフォーム担当シニア ディレクターを務める Jarrett Garcia 氏は述べています。「データを複製しなくてもきめ細かくアクセスを制御できます。以前は承認を取ってアクセスをプロビジョニングするまで何か月もかかっていましたが、それをもっと効率的かつ効果的に行えるようになりました。他の重要なビジネス ユースケースに対応できるよう、BigQuery のロードマップに、さらにデータ セキュリティ機能を実装していく予定です。」
BigQuery の行レベルのセキュリティの仕組み
BigQuery の行レベルのセキュリティを使用すると、同じテーブル内のデータのサブセットごとに異なるユーザー ペルソナのアクセスを許可できます。現在、承認済みのビューを利用してこうしたユースケースに対応しているお客様は、RLS を活用することで管理が容易になります。RLS のコンセプトを明示するため、BigQuery に行アクセス ポリシーという新たなエンティティを導入しました。行アクセス ポリシーは、ユーザー プリンシパルのグループを、そのグループが表示できる行(SQL フィルタの述語で定義)に対応付けます。
どのユーザーがどの行を表示できるかは、行レベルのアクセス ポリシーの作成を通じてデータ所有者や管理者が設定したセキュアな論理ルールによって決まります。テーブルでクエリが実行されると、管理者やデータ所有者がターゲット テーブルで作成した行レベルのアクセス ポリシーが適用されます。1 つのテーブルに対して複数のポリシーを適用できます。
以下の例では、ユーザーの「地域」に基づいてフィルタする行レベルのアクセス ポリシーが設定されています。
上のシナリオでは、ユーザーのリージョンのクエリを検証し、そのリージョンに関連するデータのサブセットのみにアクセスを許可するよう、行レベルのアクセス ポリシーを作成しました。アクセス ポリシーは、アクセス権が付与されるユーザーのリストに適用され、個人ユーザー、グループ、ドメイン、サービス アカウントなど、あらゆるタイプの IAM 原則をサポートします。この例では、ユーザーがテーブルをクエリすると、行レベルのアクセス ポリシーが評価されて、そのユーザーに適用できるポリシー(存在する場合)が評価されます。グループ「sales-apac」には、リージョンが「APAC」の行のサブセットを表示するアクセス権が与えられ、グループ「sales-us」には、リージョンが「US」の行のサブセットを表示するアクセス権が与えられます。同様に、両方のグループに属するユーザーには両方のリージョンの行が表示され、どちらのグループにも属さないユーザーにはどちらの行も表示されません。
また、SESSION_USER() 関数を使って行レベルのアクセス ポリシーを作成すると、クエリを実行しているユーザーに属する行にのみアクセスを制限できます。クエリを実行しているユーザーに適用できる行アクセス ポリシーがない場合、そのユーザーはテーブルのどのデータにもアクセスできません。
BigQuery では、行レベルのアクセス ポリシーが適用されたユーザーがテーブルをクエリした場合、行レベルのアクセス ポリシーによって結果がフィルタされる可能性があることをバナー通知で示します。この通知は、ユーザーが「grantee_list」のメンバーである場合でも表示されます。
BigQuery の行レベルのセキュリティを利用するタイミング
行レベルのアクセス ポリシーは、フィルタ条件に基づいてデータへのアクセスを制限する必要がある場合に便利です。行アクセス ポリシーのフィルタ述語は任意の SQL をサポートし、概念的には SQL クエリの WHERE 句に似ています。フィルタ述語で SESSION_USER() 関数を使用して、クエリを実行しているユーザーに属する行にのみアクセスを制限できます。クエリを実行しているユーザーに適用できる行アクセス ポリシーがない場合、そのユーザーはテーブルのどのデータにもアクセスできません。現時点では、フィルタリングに使用する列がテーブル内にあることが必要です。今後は、ルックアップ テーブルや計算値に基づいてデータをフィルタするユースケースに対応できるよう、フィルタ式にサブクエリのサポートを追加する予定です。
行レベルのアクセス ポリシーは、DDL ステートメントを使って作成、更新、削除できます。テーブルに適用されている行レベルのアクセス ポリシーのリストは、Cloud Console の BigQuery スキーマペインで確認できるようになる予定です。これにより、テーブルごとのポリシー管理が簡単になります。または、bq コマンドライン ツールを使用して確認することもできます。
行レベルのセキュリティは他の BigQuery セキュリティ機能と互換性があるため、列レベルのセキュリティと併用して、さらに詳細にデータを保護できます。ソーステーブルには行レベルのアクセス ポリシーが適用されるため、テーブルで実行されるアクションはすべて、テーブルに関連付けられたアクセス ポリシーを継承し、安全なデータへのアクセスが確実に保護されます。行レベルのアクセス ポリシーは、BigQuery データ(API、ビューなど)へのアクセスに使用されるすべてのメソッドに適用できます。
お試しください
Google では常に、BigQuery(および Google Cloud)のデータ ガバナンス機能を強化して、データの管理をより詳細に制御できるよう取り組んでいます。データには行レベルのセキュリティを適用して、保護を強化しています。BigQuery の行レベルのセキュリティについて詳しくは、ドキュメントとベスト プラクティスをご覧ください。
- Google Cloud プロダクト マネージャー Deepti Mandava