はじめに
近年のセキュリティインシデントでは、ソフトウェアサプライチェーン攻撃が大きな問題となっています。
- 改ざんされたコンテナイメージ
- 悪意ある依存パッケージ
- CI/CDパイプラインの侵害
これらに対抗するために重要なのが、ゼロトラスト × 署名・検証です。
本記事では、Sigstoreを中心にCI/CDパイプラインでの実装方法を解説します。
1. ゼロトラストとCI/CDの関係
従来のCI/CDは「ビルド済みアーティファクトを信頼する」前提でしたが、ゼロトラストでは以下が必要です:
- 誰がビルドしたか証明する
- 改ざんされていないことを保証する
- 実行前に必ず検証する
2. Sigstoreとは?
Sigstoreは、オープンソースのソフトウェア署名・検証フレームワークです。
主要コンポーネント
| コンポーネント | 役割 |
|---|---|
| cosign | コンテナイメージ署名 |
| Fulcio | 証明書発行(OIDCベース) |
| Rekor | 透明ログ(改ざん検知) |
3. 全体アーキテクチャ
CI/CD Pipeline ↓ ビルド(Docker) ↓ 署名(cosign) ↓ Rekorログ登録 ↓ Kubernetesデプロイ時に検証
4. コンテナイメージの署名(cosign)
① インストール
brew install cosign
② 署名実行
cosign sign --key cosign.key myrepo/myimage:latest
③ OIDCベース署名(推奨)
cosign sign myrepo/myimage:latest
GitHub Actionsなどと連携可能です。
5. 検証(verify)
cosign verify myrepo/myimage:latest
検証内容:
- 署名の正当性
- 証明書の有効性
- Rekorログとの整合性
6. Kubernetesでの強制(Admission制御)
Cosign Policy Controller
apiVersion: policy.sigstore.dev/v1beta1 kind: ClusterImagePolicy spec: images: - glob: "myrepo/*" authorities: - keyless: identities: - issuer: https://token.actions.githubusercontent.com
未署名イメージはデプロイ不可にします。
7. CI/CD統合(GitHub Actions例)
- name: Sign Image run: cosign sign $IMAGE
OIDCを利用することで鍵管理不要になります。
8. SBOMとの連携
SBOM(Software Bill of Materials)と組み合わせることで、依存関係の可視化が可能です。
cosign attach sbom --sbom sbom.json myimage
9. ゼロトラストCI/CD設計
Build → Sign → Verify → Deploy → Runtime検証
- Build:信頼された環境
- Sign:必ず署名
- Verify:必ず検証
10. ベストプラクティス
- 鍵レス署名(OIDC)を利用
- すべてのイメージを署名
- Admissionで強制
- Rekorログを活用
まとめ
- CI/CDもゼロトラスト対象
- Sigstoreで署名・検証を実現
- Kubernetesで強制することで安全性向上
- サプライチェーン防御の中核技術
これからの時代、「署名されていないソフトは動かさない」が標準になります。