みなさん、こんにちは!頼れる先輩エンジニアのタカシです。
突然ですが、システムを作るときに避けては通れない、とても大切なテーマがあります。そう、「セキュリティ(誰がどのデータを見ていいか)」のルール決めです。
特に、Google Cloudが誇る超巨大データベース 「Cloud Spanner(クラウド スパナー)」 を使うとき、「世界中に散らばった膨大なデータに対して、どうやって一瞬でセキュリティのルールをチェックしているんだろう?」と不思議に思ったことはありませんか?
「セキュリティのチェックって、一箇所でまとめてやるから遅くなるんじゃないの?」
「世界中のサーバーにデータが散らばっているのに、どうやって『今の時間だけアクセスOK』なんてルールを同時に守れるの?」
今回は、そんな疑問をすっきりと解消します!
難しそうに見える「IAM(アイアム)条件評価の分散処理」という仕組みについて、専門用語をできるだけ使わず、日常の身近な出来事に例えて優しく解説しますね。
ここをクリアすれば、Cloud Spannerの基本はバッチリマスターできますよ。それでは、一緒に楽しく学んでいきましょう!
—
1. そもそも Cloud Spanner ってどんなデータベース?
まずは、Cloud Spannerの基本的なキャラクターを知っておきましょう。
Spannerを一言でいうと、「世界中に引き出しがある、超巨大で絶対に整理整頓が崩れないキャビネット」です。
通常のデータベースは、1台の強力なパソコン(サーバー)の中でデータを管理することが多いですが、Spannerは違います。世界中の何十台、何百台ものサーバーが手を組んで、1つの巨大なデータベースを形作っています。
データは自動的に「小さな束(これを専門用語でスプリットと呼びますが、ここでは『ファイルの束』と呼びましょう)」に小分けされ、世界中の最適なサーバー(現場の担当スタッフ)に配られます。
- ユーザーからのリクエスト: 「日本の〇〇さんのデータを見せて!」
- Spannerの動き: 日本のデータを預かっている「現地の担当スタッフ」が、ピンポイントでそのデータを引っ張り出して返します。
この「みんなで手分けして働く仕組み」を「分散処理(ぶんさんしょり)」と呼びます。
—
2. IAMの「条件(Conditional)」ってなに?
次に、今回の主役である「IAM(Identity and Access Management)」と、その「条件(Conditions)」についてです。
IAMとは、簡単に言うと「オフィスの入館証(セキュリティカード)」です。「あなたは総務部だから、この部屋に入っていいですよ」「あなたはゲストだから、会議室だけね」という権限を管理しています。
そして、今回の鍵となるのが「条件(Conditions)」です。
これは、入館証に書き加えられた「特別なルール」だと思ってください。
例えば、以下のようなルールです。
> 📝 セキュリティカードの特別ルール例
> 時間のルール: 「平日の 9:00 〜 18:00 の間だけ、データを見てよい」
> 場所のルール: 「日本国内のオフィスからアクセスしている時だけ、データを見てよい」
> 属性のルール: 「プロジェクトAに関わっている人だけ、データを見てよい」
ただでさえデータが世界中に散らばっているのに、こんな「時間」や「場所」の細かいルールまで、どうやって1秒にも満たない一瞬の間にチェックしているのでしょうか?
—
3. 普通に考えると発生する「大渋滞」の問題
もし、あなたがこの巨大図書館のセキュリティ責任者だったら、どうやってルールをチェックしますか?
一番シンプルなのは、「入り口の門番(リーダー)」を1人だけ置いて、そこで全員のルールをチェックする方法です。
[ユーザー] ──(「データ見せて!」)──> [入り口の門番 (ここで時間や場所をチェック)]
│
(合格ならデータを取りに行く)
│
▼
[世界中に散らばるスタッフたち]
一見、この方法でも良さそうに見えますよね。
でも、世界中から毎秒何万回ものアクセスが来たらどうなるでしょうか?
入り口の門番がボトルネック(大渋滞の発生源)になってしまい、全員のチェックが終わるまでに大行列ができてしまいます。
これでは、せっかくSpannerが超高速でデータを配っていても、宝の持ち腐れになってしまいます。
—
4. Spannerの解決策:ルールを「現場のスタッフ」に配ってしまう!
そこでSpannerが採用しているのが、今回のテーマである「IAM条件評価の分散処理」です。
Spannerは、入り口の門番にチェックを任せるのをやめました。
代わりに、「セキュリティのルール(IAM条件)」を、データを預かっている「世界中の現場スタッフ(各サーバー)」全員に、あらかじめコピーして配っておくのです。
[ユーザー] ──(「データ見せて!」)──> [入り口の門番] (素通りしてOK!)
│
▼
┌──────────────────────────────────────┐
│ [現場スタッフA] [現場スタッフB] [現場スタッフC] │
│ (ルールを各自が持ち、その場でチェックしてデータを渡す) │
└──────────────────────────────────────┘
ユーザーから「データを見せて!」というお願いが来たら、入り口の門番は「はい、担当のスタッフのところへ行ってね」とスルーします。
そして、データを持っている現場のスタッフ自身が、データを引き出すその瞬間に「いま何時?」「この人は本当にアクセスしていい人?」というルール(IAM条件)をその場で評価(チェック)します。
これが「条件評価の分散処理」の正体です。
なぜこれが凄いの?
1. 大渋滞が起きない: チェックする場所が世界中に分散されるため、アクセスが集中してもスピードが落ちません。
2. 無駄な動きがない: ルールに違反している場合は、現場のスタッフがその場で「ダメです!」と断るため、無駄なデータをネットワークで送受信する必要がなくなります。
—
5. 【超重要】世界中の「いま何時?」を合わせる奇跡の技術
ここで、鋭い方は一つの疑問を持つかもしれません。
> 「現場のスタッフが各自で『いま何時?』ってチェックするなら、スタッフ同士の時計がズレていたらどうするの?」
例えば、ルールが「17:00までアクセス可能」だったとします。
日本のスタッフの時計が「16:59」、アメリカのスタッフの時計が「17:01」とズレていたら、同じタイミングのアクセスなのに、データが見えたり見えなかったりして大混乱が起きてしまいますよね。
これを解決するために、Cloud Spannerには「TrueTime(トゥルータイム)」という、GPSや原子時計を使った「世界で最も正確に同期された時計の仕組み」が組み込まれています。
世界中のどのサーバーも、ミリ秒(1秒の1000分の1)単位の狂いもなく同じ時間を共有しているため、「全員が全く同じタイミングで、正しく時間のルールをチェックできる」のです。このTrueTimeがあるからこそ、分散されたセキュリティチェックが完璧に成り立っています。
—
6. 実際の「ルール設定」はどんなイメージ?
では、私たちがこの素晴らしい仕組みを使うとき、どのような設定をするのでしょうか?
難しく考える必要はありません。Google Cloudの設定画面や、以下のような設定ファイル(YAML形式)で「ルール」を書くだけです。
Spannerは、私たちが書いたこの設定を自動的に理解し、世界中のサーバーへ配ってくれます。
IAMポリシーに「条件(Condition)」を設定する例
bindings:
- members:
- “user:alice@example.com” # アリスさんに権限をあげます
role: “roles/spanner.databaseReader” # データの読み取り権限です
condition:
title: “work_hours_only”
description: “平日の業務時間内だけアクセスを許可するルールです”
# ここに「条件」を書きます(月曜〜金曜の 9:00〜18:00 の間だけOK)
expression: >
request.time.getHours(‘Asia/Tokyo’) >= 9 &&
request.time.getHours(‘Asia/Tokyo’) < 18 &&
request.time.getDayOfWeek('Asia/Tokyo') >= 1 &&
request.time.getDayOfWeek(‘Asia/Tokyo’) <= 5
このようなルールを1回設定しておくだけで、Spannerの裏側では、世界中のサーバーたちが「よし、アリスさんがアクセスしてきたぞ。今は東京時間で15:00だから……よし、データを見せてOK!」と、手分けして一瞬で判断してくれているのです。
---
まとめ:今回の極限の知見
今日お話しした内容を、ギュッと3つにまとめますね。
1. Spannerは世界中にデータが散らばっている: だからこそ、セキュリティチェックも1箇所ではなく、全員で手分けする。
2. 現場でチェックするから速い: データを管理するサーバー(現場スタッフ)自身が、データを引き出す瞬間にルールをチェックすることで、大渋滞を防いでいる。
3. 超正確な時計(TrueTime)が支えている: 世界中のサーバーの時計が完全に一致しているから、時間制限のルールも1ミリ秒の狂いなく安全に実行できる。
一見すると難しそうな「IAM条件評価の分散処理」も、「全員にルールブックを配っておき、現場でその場チェックする仕組み」だと考えると、とても合理的でスマートな仕組みだと分かりますよね。
これを意識できるようになれば、あなたも立派なSpannerアーキテクトの第一歩を踏み出しています!
もし「ここがもう少し知りたい!」「実際に設定してみたい」ということがあれば、いつでも気軽に聞いてくださいね。これからも一緒に、一歩ずつマスターしていきましょう!
コメント