コード署名を使用して Lambda でコードの整合性を検証する - AWS Lambda

コード署名を使用して Lambda でコードの整合性を検証する

AWS Lambda でコード署名を使用すると、信頼できるコードのみを Lambda 関数で実行するようにできます。関数のコード署名を有効にすると、デプロイされたすべてのコードが Lambda によりチェックされ、コードパッケージが信頼できるソースによって署名されていることを確認できます。

注記

コンテナイメージとして定義された関数では、コード署名はサポートされません。

コードの整合性を検証するには、AWS Signer を使用して、関数とレイヤーのために、デジタル署名されたコードパッケージを作成します。ユーザーがコードパッケージのデプロイを試みると、そのデプロイが受け入られる前に、コードパッケージの検証チェックが Lambda により実行されます。コード署名の検証チェックはデプロイ時に実行されるため、関数の実行時には、パフォーマンスへの影響はありません。

AWS Signer を使用すると、署名プロファイルを作成することもできます。署名付きコードパッケージを作成するには、署名プロファイルを使用します。コードパッケージに署名できるユーザーを制御し、署名プロファイルを作成するには、AWS Identity and Access Management (IAM) を使用します。詳細については、AWS Signer デベロッパーガイドの「認証とアクセスコントロール」を参照してください。

Lambda のレイヤーは、関数のコードパッケージと同じ形式の、署名付きのコードパッケージに従います。コード署名が有効化された関数にユーザーがレイヤーを追加すると、そのレイヤーが許可された署名プロファイルによって署名されていることを Lambda がチェックします。関数に対してコード署名を有効にする場合、関数に追加されるすべてのレイヤーも、許可された署名プロファイルの 1 つによって署名されている必要があります。

AWS CloudTrail への変更を記録するようにコード署名を構成できます。関数の成功したデプロイとブロックされたデプロイが、署名と検証チェックに関する情報とともに CloudTrail に記録されます。

AWS での AWS Lambda Signer またはコード署名の使用には、追加料金は必要ありません。

署名の検証

ユーザーが署名付きコードパッケージを関数にデプロイすると、Lambda により次の検証チェックが実行されます。

  1. 整合性 — コードパッケージが、署名されてから変更されていないことを検証します。Lambda が、パッケージのハッシュと署名からのハッシュを比較します。

  2. 有効期限 – コードパッケージの署名が有効期限切れになっていないことを検証します。

  3. 不一致 – Lambda 関数用に許可された署名プロファイルのうちの 1 つでコードパッケージが署名されていることを検証します。署名が存在しない場合にも不一致が発生します。

  4. 失効 – コードパッケージの署名が無効でないことを検証します。

コード署名の設定で定義されている署名検証ポリシーによって、検証チェックが失敗した場合に、次のアクションのうちどれが Lambda により実行されるかが決定されます。

  • 警告 — Lambda はコードパッケージのデプロイを許可しますが、警告を発行します。Lambda は、新しい Amazon CloudWatch メトリクスを発行し、警告を CloudTrail ログに保存します。

  • Enforce (強制) – Lambda は (警告アクションと同じように) 警告を発行し、コードパッケージのデプロイをブロックします。

有効期限、不一致、および失効の各検証チェックのためにポリシーを設定できます。整合性検証には、ポリシーを構成できないことに注意してください。整合性のチェックが失敗した場合は、Lambda がデプロイをブロックします。

Lambda API を使用したコード署名の設定

AWS CLIまたは AWS SDK でコード署名の設定を管理するには、次の API オペレーションを使用します。

関数のためにコード署名の設定を管理するには、次の API オペレーションを使用します。