鍵束をポケットに詰め込むのはもう終わり!GCP Workload Identityで「本当のセキュリティ」を始めよう
こんにちは!日々セキュリティの最前線で「いかに泥棒の侵入を食い止めるか」と頭を悩ませているエンジニアです。
皆さんの開発現場では、GKE(Google Kubernetes Engine)上のアプリがGCPのクラウドサービス(Cloud StorageやBigQueryなど)にアクセスする際、どうやって「認証」を行っていますか?
もし、「サービスアカウントのJSONキーファイルをPodの中にコピーして、環境変数で読み込ませている」という方がいたら……悪いことは言いません、今すぐそのやり方は卒業しましょう。なぜならそれは、「家の鍵をコピーして、近所中に配り歩いている」のと同じくらい危うい行為だからです。
今日は、その解決策である「Workload Identity」について、防犯の知恵を交えながら優しく解説します。
—
1. なぜ「JSONキー」は泥棒の格好の的になるのか?
想像してみてください。あなたは大切な家(GCPプロジェクト)の鍵を、キーホルダー(JSONファイル)として作りました。そして、そのキーホルダーを荷物(Pod)の中に放り込んで、外の世界へ送り出しています。
もし、その荷物が何かの拍子に中身を覗かれたり、間違えてGitHubに公開してしまったりしたらどうなるでしょうか?
- 鍵(JSONキー)が盗まれる: 悪意ある攻撃者がその鍵を拾えば、あなたの家(GCPリソース)に自由に出入りできてしまいます。
- 管理の限界: 鍵がどこにあるのか、誰が持っているのか、有効期限はいつまでなのか……数が増えるほど管理は不可能になります。
これが、多くの開発現場で発生している「認証情報の漏洩」の典型的なメカニズムです。
2. Workload Identityという「顔認証システム」
そこで登場するのがWorkload Identityです。
これは、Podに「鍵(JSONキー)」を持たせるのではなく、「Pod自体に、GCPのIAMロール(通行証)を直接紐付けてしまう」という画期的な仕組みです。
例えるなら、「Podという名の入居者」に、管理人が「顔認証付きの通行証」を発行するようなものです。入居者は鍵を持ち歩く必要はありません。入り口に行けば、システム側が「お、君は〇〇の権限を持つPodだね」と自動で認識してドアを開けてくれます。
もしPodが乗っ取られたとしても、鍵という物理的な成果物を奪われるリスクがありません。これが、現代のクラウドセキュリティにおける「当たり前」の防御策です。
—
3. 実践!Workload Identityを設定する3つのステップ
では、実際にどう設定すればいいのか、一緒に見ていきましょう。一歩ずつ進めば必ずできますよ!
ステップ1:サービスアカウントを作成する
まずは、GCP上で「このPodにはこの権限を与える」という役割(IAMサービスアカウント)を作ります。
GCPのサービスアカウント作成
gcloud iam service-accounts create my-app-sa \
–display-name=”アプリ専用サービスアカウント”
ステップ2:Kubernetes側のサービスアカウントと紐付ける
次に、GKEの中の「Podの身分証明書(K8sサービスアカウント)」と、先ほどの「GCPの通行証(GCPサービスアカウント)」を、Googleの仲介で結びつけます。
紐付け設定(Workload Identityを有効化)
gcloud iam service-accounts add-iam-policy-binding my-app-sa@project-id.iam.gserviceaccount.com \
–role roles/iam.workloadIdentityUser \
–member “serviceAccount:project-id.svc.id.goog[default/my-k8s-sa]”
ステップ3:Podに紐付けを教える
最後に、Podの定義ファイル(YAML)で「私はこの通行証を使うよ」と宣言します。
apiVersion: v1
kind: ServiceAccount
metadata:
name: my-k8s-sa # 名前を合わせるのがコツ!
annotations:
# ここが魔法の呪文!「このアカウントはGCPのあのアカウントと繋がっている」と指示します
iam.gke.io/gcp-service-account: my-app-sa@project-id.iam.gserviceaccount.com
—
4. 最後に:セキュリティは「面倒くささ」との戦い
「設定がちょっと増えるじゃないか」と思うかもしれません。しかし、考えてみてください。一度設定してしまえば、JSONキーの更新作業や、うっかりGitHubに上げてしまった時の真っ青になるような体験から永遠に解放されます。
セキュリティとは、単に鍵をかけることではありません。「いかに人間のミスを減らし、自動的に安全な状態を維持するか」という仕組み作りのことです。
Workload Identityは、皆さんのアプリケーションを泥棒から守る、非常に強力で洗練された「防犯システム」です。ぜひ今日の開発から、JSONキーを手放して、このスマートな管理方法に切り替えてみてください。
もし分からないことがあれば、またいつでも聞きに来てくださいね。皆さんの安全で快適なクラウドライフを応援しています!

コメント