こんにちは。現場の最前線でセキュリティと格闘しているエンジニアの皆さん、お疲れ様です。
今日は、GCP(Google Cloud Platform)の「Cloud Run」を使ったサービス間通信における、ちょっとだけ背筋が凍るような、でも絶対に避けては通れない「認証と権限」の話をしようと思います。
「サービス間通信? IAM? なんか難しそう……」と思ったあなた、大丈夫です。まずは身近な「家の防犯」に例えて、この仕組みを紐解いていきましょう。
—
1. 「誰がドアを叩いているか」を知る重要性
想像してみてください。あなたは今、厳重なセキュリティで守られたマンションの管理人室にいます。
もし、誰が来ても「はい、どうぞ」とエントランスのドアを全開にしていたらどうなるでしょう? 泥棒が「宅配便です」と言えば、簡単に中に入れてしまいますよね。これと同じことが、Cloud Runのサービス間通信でも起こり得ます。
Cloud RunのサービスAからサービスBへデータを送る時、何も対策をしないと「インターネット上の誰でもサービスBにアクセスできる」という状態になりがちです。これは、玄関の鍵をかけずに放置しているのと同じくらい危険な状態です。
—
2. 「IDトークン」という名の身分証明書
では、どうすればいいのでしょうか? 答えは「身分証明書(IDトークン)」を見せるルールにすることです。
サービスAがサービスBを呼ぶとき、「私はサービスAです。これがGoogleが発行した私の身分証です」とIDトークンを差し出すように設定します。サービスBは、その身分証を見て「おっ、信頼できるサービスAだね。中へどうぞ」と判断するわけです。
実装のヒント:Cloud Runの設定
サービスB(呼び出される側)の設定で、以下のように「認証が必要」と指定しましょう。
1. Cloud Runのサービス詳細画面を開く。
2. 「認証」セクションで「認証を必須にする」を選択する。
これだけで、身分証がない怪しい訪問者はすべて門前払いになります。
—
3. 「最小権限の原則」:泥棒に家の中を荒らさせない
さて、サービスAがサービスBに「入室許可」をもらえたとします。でも、ここで安心してはいけません。
例えば、サービスAは「注文データを読み込む」権限だけでいいのに、サービスBのすべてのデータ(顧客名簿や売上情報など)を書き換える権限まで持っていたらどうでしょう? もしサービスAが悪意ある攻撃者に乗っ取られたら、被害は甚大になります。
これを防ぐのが「最小権限の原則」です。
「必要な場所にしか入れない鍵」だけを渡す、という考え方です。
IAMロールによる権限の絞り込み
GCPでは「サービスアカウント」という、サービス専用の「役割(ロール)」を作ります。
- 悪い例: 全権限を持つ「オーナー」権限をサービスAに付与する。
- 良い例: 「Cloud Run 起動元 (roles/run.invoker)」という、「このサービスを呼び出すことしかできない」という限定的な権限だけをサービスAに付与する。
設定例(gcloud コマンド)
ターミナルから、サービスAのサービスアカウントに「サービスBを呼ぶ権限」だけを与えるコマンドは以下の通りです。
サービスBに対して、サービスAだけが実行できるように設定
gcloud run services add-iam-policy-binding [サービスBの名前] \
–member=”serviceAccount:サービスAのメールアドレス” \
–role=”roles/run.invoker” \
–region=[リージョン]
—
4. なぜこれが「セキュリティのプロ」も重視するのか
初心者のうちは「とりあえず全部許可(フルアクセス)」で動かしたくなる気持ち、よくわかります。動かないと仕事になりませんからね。
でも、一度考えてみてください。アプリケーションの脆弱性(例えば、外部からの入力をそのまま処理してしまうようなコードの穴)が見つかったとき、サービスアカウントの権限が強すぎると、攻撃者はその権限を悪用してクラウド内の他のサービスまで支配し始めます。
「最小権限」は、被害を最小限に抑えるための最後の砦なんです。
—
最後に:一歩ずつ積み上げよう
セキュリティは、一度設定して終わりではありません。泥棒が日々新しい手口を考えるように、私たちも「本当にこの権限は必要か?」「もっと絞り込めないか?」と自問自答し続ける必要があります。
今日学んだことをまとめます。
1. 認証を必須にする: IDトークンがない訪問者は門前払いする。
2. 最小権限を与える: 「呼び出し」以外の余計な権限をサービスに持たせない。
これだけで、あなたのクラウド環境の防犯レベルは格段に上がります。最初は少し面倒かもしれませんが、この「泥臭い設定」こそが、あなたのサービスを、そしてユーザーのデータを守る一番の近道です。
さあ、自信を持って設定を見直してみてくださいね。応援しています!

コメント