🔧

Cloud Spannerの「細かいアクセス制御」とは

2023/04/11に公開

はじめに

こんにちは、クラウドエース データML ディビジョン所属の森です。
クラウドエースのITエンジニアリングを担うシステム開発部の中で、特にデータ基盤構築・分析基盤構築からデータ分析までを含む一貫したデータ課題の解決を専門とするのがデータML ディビジョンになります。

データML ディビジョンでは活動の一環として、毎週Google Cloud の新規リリースを調査・発表し、データ領域のプロダクトのキャッチアップをしています。その中でも重要と考えるリリースを本ページ含め記事として公開しています。

今回紹介するリリースは、Cloud Spannerの「細かいアクセス制御」についてになります。
細かいアクセス制御を用いることにより、テーブル、列、ビュー、変更ストリームへのアクセスを制御することが可能です。

Cloud Spannerの概要

Cloud Spannerは、トランザクション処理の大規模分散処理ができるリレーショナルデータベースです。
リージョンや大陸全体にわたる強整合性で高性能のトランザクションを提供しています。

Cloud Spannerの「細かいアクセス制御」の説明

今回ご紹介するリリースは、2023年3月9日付に一般提供(GA)となったCloud Spannerにおける細かいアクセス制御という機能についてとなります。
URL:Spanner release notes

リリース内容

細かいアクセス制御では、「アクセス制御対象のリソース」に対して、「ロールに付与できる権限」ごとにアクセスを細かく制御することが可能です。
以下で、より詳しく見ていきたいと思います。

  • アクセス制御対象のリソース
    • テーブル (Tables)
    • 列 (Columns)
    • ビュー (Views)
    • 変更ストリーム (Change streams)
  • ロールに付与できる権限
    • SELECT
    • INSERT
    • UPDATE
    • DELETE
    • EXECUTE

【表】データベース ロールに付与できる権限

alt
出典:Fine-grained access control privileges

テーブル (Tables)

  • テーブルに対する SELECTINSERTUPDATEDELETE 権限をデータベース ロールに付与できます。
  • インターリーブされたテーブルの場合、親テーブルに付与されている権限は子テーブルには伝播されません。

列 (Columns)

  • テーブル内の列のサブセットに SELECTINSERTUPDATE を付与できます。
    また、列に対しての権限付与の場合、権限を付与した列のみが対象となります。
  • DELETE は列レベルでは許可されいないため注意が必要です。

ビュー (Views)

  • SELECT をビューに付与できます。
    ビューでサポートされているのは SELECT のみです。
  • Cloud Spanner は呼び出し元の権利ビューのみをサポートしているため、データベースロールには、SELECTビューに対する権限と、SELECTビューが参照する基になるオブジェクトに対する権限が必要です。

変更ストリーム (Change streams)

  • 変更ストリームでは SELECT を付与することができます。
  • また、テーブル値関数(TVF) を使用して、変更ストリームのデータの読み取りを行うには EXECUTE を付与する必要があります。
    詳細については、変更ストリームのきめ細かいアクセス制御をご覧ください。

この機能により、テーブル等に対して限定した操作権限を付与することで、「どのようなSQL命令が許されているか」を定義することができるようになりました。

細かいアクセス制御による権限付与の例

以下の DDL ステートメントでは、hr_rep データベースロールに対して、テーブル employees への SELECT 権限を付与しています。

CREATE ROLE hr_rep;
GRANT SELECT ON TABLE employees TO ROLE hr_rep;

使い方の詳細については、以下ドキュメントをご参照ください。
Google Cloudドキュメント:細かいアクセス制御について

ユースケース

細かいアクセス制御のユースケース例を以下に示します。

  • 開発者以外はデータの読み取り以外行えなくする場合。
    • 制御方法:INSERTUPDATEDELETE ができないように、SELECTのみを許可するようアクセスを制御する。
  • 読み取りとデータの挿入は許可されるが、データの更新及び削除は許可されない台帳の権限制御の場合。
    • 制御方法:SELECTINSERT のみを許可するようにアクセスを制御する。

まとめ

今回の記事では、以下の内容について紹介しました。

  • Cloud Spannerで、細かいアクセス制御という機能の一般提供が開始。
  • データベースロールを作成し、IAMプリンシパルに権限を付与するIAMポリシーを作成することで、テーブル、列、ビュー、変更ストリームへのアクセスを制御可能。

細かいアクセス制御が一般提供開始になったことで、より細かい操作の制御が可能となった反面、権限管理の複雑さを考慮する必要が出てくるため、慎重に使用する必要があります。

関連リリース

週刊 Google Cloud アップデート情報 2022年11月第5週
GCP-Goat で学ぶ Google Cloud セキュリティ Day1
Security Command Center でお手軽セキュリティ診断
BigQuery上の機密情報の守り方

Discussion