【入門編】 コンテナイメージの署名と検証(Cosign/Notary) – インフラ・ネットワーク & クラウドセキュリティ防御ガイド

コンテナの「中身」は本当に信じられますか?――サプライチェーン攻撃から身を守る「デジタル署名」の仕組み

こんにちは!現場の最前線でセキュリティと向き合っているエンジニアです。

皆さんは、普段開発で使っている「コンテナイメージ」を、どれくらい信頼していますか?「公式のレジストリから落としてきたから大丈夫」「有名なライブラリを使っているから安心」……そう思っているとしたら、少しだけ注意が必要です。

今回は、現代のIT現場で最も恐れられている脅威の一つ、「サプライチェーン攻撃」を防ぐための切り札、「コンテナイメージの署名と検証」について、身近な例えを交えながら一歩ずつ学んでいきましょう。

—

1. なぜ「コンテナの封印」が必要なのか?

想像してみてください。あなたは宅配便で大切な荷物を送ろうとしています。箱にガムテープを貼って「中身は絶対に開けていません」と証明したいですよね。

もし、配送の途中で悪い人が箱を開け、中身を「偽物の怪しい製品」に入れ替えて、もう一度ガムテープを貼って届けたらどうでしょう?受け取った人は、その製品が「公式のもの」だと信じて使い始めてしまいます。

コンテナの世界でも同じことが起きます。攻撃者はレジストリ(コンテナを保管する倉庫)に忍び込み、あなたが信頼しているイメージを「悪意あるコードが仕込まれた偽物」とすり替えることがあります。これがサプライチェーン攻撃です。

これを防ぐのが「デジタル署名」です。箱に特殊な「改ざん防止シール」を貼り、受け取る時に「シールが剥がれていないか(=中身が本物か)」を確認する仕組みを作ればいいのです。

—

2. Cosignでイメージに「デジタル署名」を付与しよう

現在、最も広く使われているツールの一つが 「Cosign」 です。これを使うと、誰でも簡単にイメージに署名を付与できます。

まずは、あなたのイメージに秘密の鍵で「これは私が作った本物です!」という署名スタンプを押してみましょう。

# Cosignを使ってイメージに秘密鍵で署名するコマンド
# この操作により、イメージのハッシュ値に対してデジタル署名が付与されます
cosign sign --key cosign.key my-registry.com/my-app:v1.0
  • cosign.key: あなただけが持つ秘密の鍵です。絶対に誰にも見せないでくださいね。
  • my-registry.com/my-app:v1.0: 署名対象のイメージです。

これで、イメージの横に「署名という名の保証書」が添えられました。

—

3. 「受け取り時」の検証を忘れないで!

署名をするだけでは不十分です。大切なのは、「サーバーにデプロイする瞬間に、その署名が正しいかを確認すること」です。

もし署名がなかったり、偽物の鍵で署名されていたりしたら、コンテナを起動させないように設定します。これを「検証(Verification)」と呼びます。

# 署名が正しいか検証するコマンド
# 署名が一致しない場合、このコマンドはエラーを返します
cosign verify --key cosign.pub my-registry.com/my-app:v1.0
  • cosign.pub: 公開鍵です。誰でも持っていてOKな「証明書」のようなものです。

この検証コマンドを、デプロイの自動化パイプライン(CI/CD)の中に組み込むのが、今の現場では「常識」になりつつあります。

—

4. 現場で意識すべき「泥臭い」ポイント

教科書通りにはいかないのが現場の面白いところです。運用を始める際に、以下のポイントを心に留めておいてください。

1. 鍵の管理が命です: 秘密鍵(cosign.key)を紛失すると、二度と署名ができなくなります。逆に盗まれると、攻撃者が自由に署名できるようになってしまいます。クラウドの鍵管理サービス(KMS)などを活用し、決して手元のデスクトップに放置しないでくださいね。
2. 「とりあえず動く」を許さない: 開発環境では署名なしでも動くようにしておき、本番環境のデプロイ時だけ「署名がないイメージは起動を拒否する」というポリシー(Admission Controllerの設定など)を徹底しましょう。
3. 全自動化が鍵: 人間が手動で検証するのはミスのもとです。Kubernetesを使っているなら、Kyverno や Policy Controller といったツールを使い、「署名のないイメージはデプロイできない」というルールを強制的に適用させるのがプロのやり方です。

—

まとめ:セキュリティは「疑う」ことから始まる

デジタル署名は、決して魔法の盾ではありません。しかし、「誰が作ったか分からないもの」を自動的に拒絶する仕組みは、今のネットワーク社会において「玄関に鍵をかける」のと同じくらい当たり前のマナーです。

「難しそうだな」と感じたら、まずは身近な小さなプロジェクトで cosign を使ってみてください。自分で署名し、自分で検証する体験を積むことで、セキュリティの重要性がより深く理解できるようになるはずです。

一歩ずつ、着実に。一緒に安全なシステムを作り上げていきましょう!

コメント

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