サービス間通信の「身元確認」してますか? mTLSで守るマイクロサービスの要塞
こんにちは。セキュリティの世界へようこそ。
皆さんは、自分の家に入るとき、玄関の鍵を閉めますよね。では、「家の中の各部屋のドア」には鍵をかけていますか?
これまで、社内ネットワークやクラウドの中は「信頼できる場所(安全圏)」とみなされがちでした。しかし、今のシステムは違います。一箇所でも突破されれば、攻撃者はまるで鍵のかかっていない部屋を渡り歩くように、あなたのサーバー内を自由に動き回ります。
今日は、そんな「部屋の鍵」をデジタル世界で実現する仕組み、mTLS(相互TLS)について、サービスメッシュ(Istioなど)という強力なガードマンを交えて、優しく解説していきます。
—
1. なぜ、いつもの通信ではダメなのか?
私たちが普段使っているブラウザの通信(HTTPS)は、いわば「身分証を見せ合う」仕組みです。あなたが銀行のサイトにアクセスするとき、銀行側が「私は本物の銀行ですよ」と証明書を見せてくれますよね。
しかし、マイクロサービス(小さなサーバー同士が連携する仕組み)の世界では、「サービスAがサービスBに話しかけるとき」に、互いの身分を証明していないケースが非常に多いのです。
これでは、攻撃者がネットワークに侵入して「私はサービスAです」と偽れば、サービスBは疑いもせずに機密情報を渡してしまいます。これは、誰かわからない訪問者に「どうぞ中へ」と招き入れるのと同じです。
—
2. mTLS(相互TLS)の仕組み:デジタルな「合鍵」
mTLS(Mutual TLS)は、その名の通り「相互に」身分を確認する仕組みです。
- 片側TLS(普通のHTTPS): あなたが銀行の身分証を確認する。
- 相互TLS(mTLS): あなたが銀行の身分証を確認し、銀行もあなたの身分証を確認する。
お互いに「証明書」というデジタルな合鍵を持っていることを確認できなければ、通信自体を成立させません。これにより、たとえネットワークを盗聴されても、鍵を持っていない攻撃者は会話に入り込むことができないのです。
—
3. サービスメッシュ(Istio)での「ガードマン」配置
とはいえ、全てのプログラムに「証明書を管理する複雑なコード」を書くのは、開発者にとって地獄のような作業です。そこで登場するのがIstio(イスティオ)などの「サービスメッシュ」です。
サービスメッシュは、各サーバーの横に「サイドカー」という小さなガードマン(プロキシ)を配置します。
- サービスAが通信を送ろうとすると、サイドカーが「鍵は持ってるか?」とチェックする。
- 通信相手のサイドカーが「持ってるよ」と証明書を見せる。
- 鍵が一致すれば、通信を通す。
開発者は、アプリのコードを一行も変えることなく、この強力なセキュリティを導入できるのです。
—
4. IstioでmTLSを「強制」する設定
では、具体的にどう設定するのか見ていきましょう。以下の設定は、Istioに対して「この名前空間内では、必ずmTLSを使いなさい」と指示する命令書(YAML)です。
# PeerAuthentication(ピア認証)の設定
# これを適用すると、この名前空間内の全サービス間でmTLSが必須になります
apiVersion: security.istio.io/v1beta1
kind: PeerAuthentication
metadata:
name: default
namespace: my-app-namespace # 適用したいサービスがある場所
spec:
mtls:
mode: STRICT # ここが重要!「STRICT(厳格)」にすることで、mTLS以外の通信を即座に遮断します
なぜ STRICT にするのか?
PERMISSIVE(寛容)というモードもありますが、これは「mTLSでも、普通の通信でもOK」という設定です。これだと、攻撃者がわざと普通の通信を試みることで、セキュリティの穴を突きやすくなります。
「家中のドアを必ず施錠する」と決めたなら、例外を作らずSTRICTで強制するのが鉄則です。
—
5. まとめ:今日からできる一歩
セキュリティ対策は、完璧を目指すと疲れてしまいます。まずは以下のステップで考えてみてください。
1. 現状を知る: 自社のサービス間通信で、暗号化されていないものはどれか?
2. 導入を検討する: Kubernetesを利用しているなら、IstioやLinkerdのようなサービスメッシュを検証環境で試してみる。
3. 強制する: まずは「内部システム」からSTRICTモードを適用し、通信が遮断されないかを確認する。
「うちはまだ小さいシステムだから…」と思っている時こそが、最も攻撃を受けやすい時期です。後からセキュリティを付け足すのは、家が建った後に防犯カメラを増設するよりずっと大変です。
デジタルな「合鍵」の仕組みを理解して、強固なインフラを作っていきましょう!一歩ずつ、着実に。それが、エンジニアとしての確かな自信に繋がりますよ。
—
*次回の記事では、この証明書をどうやって管理・更新していくのか?(証明書ローテーションの泥臭い話)について解説します。お楽しみに!*
コメント