AWS Signer

コードやコンテナイメージにデジタル署名を付与し、デプロイ時に署名検証を行うことでソフトウェアサプライチェーンの完全性を保証するサービス

概要

AWS Signer は、Lambda 関数のデプロイパッケージ、コンテナイメージ、IoT デバイスのファームウェアなどにデジタル署名を付与し、実行時に署名の検証を行うコード署名サービスです。署名プロファイルで署名アルゴリズムと有効期限を定義し、CI/CD パイプラインに組み込むことで、改ざんされていない正規のコードのみがデプロイされることを保証します。Lambda のコード署名設定と連携し、未署名または無効な署名のコードのデプロイを自動的にブロックできます。

署名プロファイルと署名ジョブの実行

Signer の署名プロファイルは、署名に使用するプラットフォーム (Lambda、IoT、コンテナ)、署名アルゴリズム、署名の有効期限を定義する設定です。Lambda 向けの署名プロファイルでは、SHA-256 ハッシュと ECDSA P-256 による署名が使用されます。署名ジョブは、S3 上のソースアーティファクト (ZIP ファイル、コンテナイメージ) を入力として受け取り、署名済みアーティファクトを指定した S3 バケットに出力します。署名プロセスでは、アーティファクトのハッシュ値を計算し、Signer が管理する署名鍵で署名を生成してアーティファクトに付与します。署名鍵は AWS が管理する HSM 内に保管され、ユーザーが直接アクセスすることはできません。署名プロファイルの取り消し (Revoke) 機能により、漏洩が疑われる署名プロファイルで署名されたすべてのアーティファクトを一括で無効化できます。

Lambda コード署名とデプロイ制御

Lambda のコード署名設定 (Code Signing Configuration) に Signer の署名プロファイルを関連付けると、Lambda 関数のデプロイ時に自動的に署名検証が実行されます。署名が無効な場合のポリシーとして、Enforce (デプロイをブロック) または Warn (警告のみでデプロイは許可) を選択できます。本番環境では Enforce を設定し、開発環境では Warn を設定する運用が一般的です。CI/CD パイプラインでは、CodeBuild でコードをビルド → Signer で署名 → Lambda にデプロイという流れを自動化します。署名検証に失敗した場合、CloudWatch Logs にエラーの詳細が記録され、EventBridge 経由で通知を発行できます。Organizations の SCP (Service Control Policy) と組み合わせて、組織内のすべての Lambda 関数にコード署名を強制する全社ポリシーを適用することも可能です。

コンテナイメージ署名とサプライチェーンセキュリティ

コンテナイメージの署名では、ECR に格納されたイメージに対して Notation (CNCF のコンテナ署名標準) 形式の署名を付与します。EKSECS のデプロイ時に署名検証を行い、信頼された CI/CD パイプラインでビルドされたイメージのみが実行されることを保証します。ソフトウェアサプライチェーン攻撃 (依存関係の改ざん、ビルド環境の侵害) への対策として、ビルドの各段階で署名を付与し、デプロイ時に全段階の署名チェーンを検証する多層署名パターンが推奨されます。SBOM (Software Bill of Materials) と組み合わせて、署名済みアーティファクトに含まれるすべての依存関係を追跡可能にする構成も、規制対応 (米国大統領令 14028) の文脈で重要性が増しています。IoT デバイスのファームウェア更新では、OTA (Over-The-Air) 更新パッケージに署名を付与し、デバイス側で署名検証を行ってから適用する仕組みにより、不正なファームウェアの実行を防止します。

共有するXB!