コード署名を使用して 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 により次の検証チェックが実行されます。
-
整合性 — コードパッケージが、署名されてから変更されていないことを検証します。Lambda が、パッケージのハッシュと署名からのハッシュを比較します。
-
有効期限 – コードパッケージの署名が有効期限切れになっていないことを検証します。
-
不一致 – Lambda 関数用に許可された署名プロファイルのうちの 1 つでコードパッケージが署名されていることを検証します。署名が存在しない場合にも不一致が発生します。
-
失効 – コードパッケージの署名が無効でないことを検証します。
コード署名の設定で定義されている署名検証ポリシーによって、検証チェックが失敗した場合に、次のアクションのうちどれが Lambda により実行されるかが決定されます。
-
警告 — Lambda はコードパッケージのデプロイを許可しますが、警告を発行します。Lambda は、新しい Amazon CloudWatch メトリクスを発行し、警告を CloudTrail ログに保存します。
-
Enforce (強制) – Lambda は (警告アクションと同じように) 警告を発行し、コードパッケージのデプロイをブロックします。
有効期限、不一致、および失効の各検証チェックのためにポリシーを設定できます。整合性検証には、ポリシーを構成できないことに注意してください。整合性のチェックが失敗した場合は、Lambda がデプロイをブロックします。
Lambda API を使用したコード署名の設定
AWS CLIまたは AWS SDK でコード署名の設定を管理するには、次の API オペレーションを使用します。
関数のためにコード署名の設定を管理するには、次の API オペレーションを使用します。