AWS Signer で実現するコード署名 - Lambda 関数とコンテナイメージの信頼性保証

Lambda 関数とコンテナイメージにコード署名を適用し、CI/CD パイプラインで署名検証を強制する。署名のリボケーションによる侵害対応も紹介します。

コード署名の必要性

コード署名はデプロイされるコードが信頼された発行元から提供され、改ざんされていないことを暗号学的に保証する仕組みです。サプライチェーン攻撃でビルドパイプラインが侵害された場合でも、署名検証により不正なコードのデプロイを防止できます。AWS SignerLambda 関数のデプロイパッケージとコンテナイメージに対する署名と検証を提供します。

Lambda のコード署名

Lambda のコード署名設定 (Code Signing Configuration) で、信頼する署名プロファイルの ARN (最大 20 個) と、署名検証失敗時のアクション (Warn または Enforce) を定義します。Enforce モードでは署名されていない関数や、信頼されていない署名プロファイルで署名された関数のデプロイがブロックされます。CI/CD パイプラインでは、CodeBuild でビルドした ZIP パッケージを Signer で署名し、署名済みパッケージを Lambda にデプロイするフローを構築します。

コンテナイメージ署名と CI/CD 統合

AWS Signer は ECR のコンテナイメージに対する Notation 形式の署名をサポートします。 CI/CD パイプラインのビルドステージでイメージをビルドし、 Signer で署名した後に ECR にプッシュします。 EKS のアドミッションコントローラーで署名の検証を強制し、署名されていないイメージのデプロイを拒否します。署名プロファイルで署名に使用する暗号鍵と有効期間を定義し、プロファイルの有効期限が切れると新しい署名が生成できなくなります。署名のリボケーション (取り消し) で、侵害された署名プロファイルで署名されたコードを無効化できます。 Signer の実践的な知識を深めるには、専門書籍 (Amazon)が役立ちます。

Signer の料金

AWS Signer の料金は署名操作の回数で課金されます。Lambda のコード署名は 1 署名あたり約 0.005 ドル、コンテナイメージの署名は 1 署名あたり約 0.50 ドルです。署名の検証は無料です。CI/CD パイプラインで頻繁にビルド・署名を行う場合、コンテナイメージの署名コストが積み上がるため、開発環境では署名を省略し、ステージング・本番環境のみで署名を強制する運用でコストを管理します。署名プロファイルの管理に追加料金は発生しません。

まとめ

AWS Signer は Lambda 関数とコンテナイメージのコード署名を提供し、デプロイされるコードの信頼性を暗号学的に保証するサービスです。CI/CD パイプラインのビルドステージで署名し、Lambda のコード署名設定や EKS のアドミッションコントローラーで署名検証を強制します。署名のリボケーションで侵害された署名プロファイルのコードを無効化できます。