【入門編】 IAMロールとアクセス制御 – Cloud Spanner

やあ。Cloud Spannerという、とてつもなく強力で、かつ少しだけ気難しい相棒と向き合おうとしている君へ。

今日は、Spannerの「門番」であるIAM(権限管理)について話そう。多くのエンジニアがここで躓き、あるいは適当に設定して後で泣きを見ることになる場所だ。でも安心してほしい。本質さえ掴めば、これは君のデータベースを守る最強の盾になる。

難しい用語は一旦置いておこう。まずは、ある「巨大な図書館」を想像してみてほしい。

—

1. データベースは「巨大な図書館」である

Cloud Spannerは、世界中に支店を持つ巨大な図書館のようなものだ。

  • インスタンス(建物そのもの): 図書館の建物。
  • データベース(本棚): 特定のテーマで整理された本の集まり。
  • IAMロール(通行証): 「誰がどのエリアに入れるか」を決める証明書。

もし、すべての来客に「図書館の全フロア」を自由に歩かせていたらどうなる? 誰かが誤って重要な記録を消したり、持ち出したりするかもしれないよね。だからこそ、「誰に、どこまでを許可するか」という「通行証(IAMロール)」が重要なわけだ。

—

2. 「大きな門番」と「小さな門番」

Spannerの権限管理は、大きく分けて2つの階層がある。

① インスタンスレベル(建物の門番)

「君はそもそもこの図書館に入っていいのか?」をチェックする門番だ。

  • 役割: インスタンスの作成・削除、設定変更ができるか。
  • 例: 館長(管理者)だけがこの権限を持つべきだ。一般の読者が「建物を解体」できてしまったら困るだろう?

② データベースレベル(本棚の番人)

「君はどの本棚を読んでいいのか?」をチェックする番人だ。

  • 役割: データの読み込み、書き込み、テーブルの追加ができるか。
  • 例: 事務員さんは「住所録の本棚」は見られるけど、「給与の本棚」は見ちゃダメ、といった制限だね。

—

3. 「きめ細やかなアクセス制御(FGAC)」という魔法

ここからが少しだけエンジニアらしい話だ。「本棚」単位の制限も便利だけど、Spannerにはもっとすごい「FGAC(Fine-grained access control)」という魔法がある。

これは、本棚の中の「特定のページ」だけを見せるような技術だ。

例えば、ユーザーのデータが入っているテーブルで、「名前とメールアドレスは見せていいけど、クレジットカード番号の列は絶対に隠す」という制御ができる。

なぜこれが凄まじいのか?
従来のデータベースなら、アプリ側で必死に「この列は見せるな!」とプログラムを書いていたはずだ。でも、Spannerなら「データベースの門番が、最初から特定の列を通さない」ように設定できる。アプリがどれだけポンコツでも、データが漏れるリスクを極限まで下げられるんだ。

—

4. 設定のヒント:最小権限の原則

ここで僕から一つだけ、一生モノの教訓を授けよう。

「一番弱い通行証から渡せ」

多くの初心者は、面倒くさがって「全部できる権限(オーナー権限)」を配ってしまう。これは、自宅の鍵を近所の全員に配るのと同じくらい危ないことだ。

まずは「読むだけ(Read Only)」の通行証を渡し、どうしても足りない時にだけ「書く権利(Write)」を追加していく。これが、世界最高峰のエンジニアが守っている唯一の鉄則だ。

—

ちょっとだけコードで見てみよう

例えば、Google Cloud CLIを使って、特定のユーザーにデータベースの読み取り権限を与えるときは、こんな感じになるよ。

データベースの「閲覧者」という役職を、特定のユーザーに付与するコマンド
gcloud spanner databases add-iam-policy-binding [データベース名] \
–instance=[インスタンス名] \
–member=”user:engineer-tanaka@example.com” \
–role=”roles/spanner.databaseReader”
# ↑ このroles/spanner.databaseReaderが「読むだけ」という役職名だね

—

今日のまとめ

  • インスタンス権限は「建物全体」の管理権限。
  • データベース権限は「本棚」へのアクセス権。
  • FGACは「ページ単位」で隠せる究極のセキュリティ。
  • 「最小限の権限」から始めるのが、プロのたしなみ。

どうだい? Cloud Spannerの門番たちが、少しだけ頼もしく見えてきただろう?

この「通行証」の仕組みさえ理解すれば、君はもうデータベースの守り方で迷うことはない。一つずつ、丁寧に設定していこう。君のデータベースライフが、安全で素晴らしいものになることを心から願っているよ。

また何か壁にぶつかったら、いつでもここへ来るといい。エンジニア同士、じっくり話をしよう。

コメント

タイトルとURLをコピーしました