AWS Lambda でのコード署名の設定 - AWS Lambda

AWS Lambda でのコード署名の設定

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

注記

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

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

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

関数でコード署名を有効にするには、コード署名の設定を作成し、その設定を関数にアタッチします。コード署名の設定では、許可済みの署名プロファイルのリストと、検証チェックが失敗した場合に実行するポリシーアクションを定義します。

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

IAM を使用して、コード署名の設定を作成できるユーザーを制御します。通常、このための権限は、特定の管理者ユーザーのみに付与します。さらに、コード署名が有効化された関数のみをデベロッパーが作成できるようにする IAM ポリシーを設定できます。

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

関数のコード署名の設定には、Lambda コンソール、AWS Command Line Interface (AWS CLI)、AWS CloudFormation、AWS Serverless Application Model (AWS SAM) を使用します。

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

署名の検証

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

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

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

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

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

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

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

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

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

構成の前提条件

Lambda 関数用のコード署名を設定する前に、AWS Signer を使用して次の操作を実行します。

  • 1 つまたは複数の署名プロファイルを作成します。

  • 署名プロファイルを使用して、関数の署名付きコードパッケージを作成します。

詳細については、AWS Signer デベロッパーガイドの 「署名プロファイルの (コンソールでの) 作成」を参照してください。

コード署名の設定を作成する

コード署名の設定では、許可された署名プロファイルと署名検証ポリシーのリストを定義します。

コード署名設定を (コンソールで) 作成するには、

  1. Lambda コンソールの [Code signing configurations (コード署名設定)] ページ)を開きます。

  2. [Create configuration (設定の作成)] を選択します。

  3. [説明] に、その設定のための、分かりやすい名前を入力します。

  4. [署名プロファイル] に、設定のための署名プロファイルを (最大 20 個まで) 追加します。

    1. [署名プロファイルバージョンの ARN] から、使用するプロファイルバージョンの Amazon リソースネーム (ARN) を選択します。あるいは、そこに ARN を入力します。

    2. 署名プロファイルを追加するには、[署名プロファイルの追加] をクリックします。

  5. [署名の検証ポリシー] で、[警告 ] または [強制] を選択します。

  6. [Create configuration (設定の作成)] を選択します。

コード署名の設定を更新する

コード署名の設定を更新すると、その設定がアタッチされている関数で行われる、将来のデプロイに対し内容が反映されます。

コード署名の設定を (コンソールで) 更新するには、

  1. Lambda コンソールの [Code signing configurations (コード署名設定)] ページ)を開きます。

  2. 更新するコード署名の設定を選択し、[編集] をクリックします。

  3. [説明] に、その設定のための、分かりやすい名前を入力します。

  4. [署名プロファイル] に、設定のための署名プロファイルを (最大 20 個まで) 追加します。

    1. [署名プロファイルバージョンの ARN] から、使用するプロファイルバージョンの Amazon リソースネーム (ARN) を選択します。あるいは、そこに ARN を入力します。

    2. 署名プロファイルを追加するには、[署名プロファイルの追加] をクリックします。

  5. [署名の検証ポリシー] で、[警告 ] または [強制] を選択します。

  6. [変更を保存] をクリックします。

コード署名の設定を削除する

コード署名の設定を削除できるのは、その設定が、いずれの関数でも使用されていない場合のみです。

コード署名の設定を (コンソールで) 削除するには

  1. Lambda コンソールの [Code signing configurations (コード署名設定)] ページ)を開きます。

  2. 削除するコード署名の設定を選択し、[削除] をクリックします。

  3. 確認のために、もう一度 [削除] をクリックします。

関数のコード署名を有効化する

関数のコード署名を有効にするには、コード署名の設定を関数に関連付けます。

コード署名の設定を (コンソールで) 関数に関連付けるには

  1. Lambda コンソールで [Functions (関数)] ページを開きます。

  2. コード署名を有効にする関数を選択します。

  3. [コード署名の設定] で、[編集] をクリックします。

  4. [コード署名の編集] で、対象の関数に関連付けるコード署名の設定を選択します。

  5. [Save] を選択します。

IAM ポリシーの設定

コード署名 API オペレーションにアクセスする権限をユーザーに付与するには、1 つ以上のポリシーステートメントを、そのユーザーのポリシーにアタッチします。ユーザーポリシーの詳細については、「」を参照してくださいLambda のアイデンティティベースの IAM ポリシー

次に示すポリシーステートメントの例では、コード署名の設定を作成、更新、および取得するためのアクセス権限を付与しています。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "lambda:CreateCodeSigningConfig", "lambda:UpdateCodeSigningConfig", "lambda:GetCodeSigningConfig" ], "Resource": "*" } ] }

管理者は、CodeSigningConfigArn 条件キーを使用して、デベロッパーが関数を作成または更新する際に必要となる、コード署名の設定を指定できます。

次に示すポリシーステートメントの例では、関数を作成するための権限を付与しています。ポリシーステートメントには、許可されるコード署名設定を指定する lambda:CodeSigningConfigArn 条件を含めます。CodeSigningConfigArn パラメータが欠如しているか、条件の値と一致しない場合、Lambda はすべての CreateFunction API リクエストをブロックします。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowReferencingCodeSigningConfig", "Effect": "Allow", "Action": [ "lambda:CreateFunction", ], "Resource": "*", "Condition": { "StringEquals": { "lambda:CodeSigningConfigArn": “arn:aws:lambda:us-west-2:123456789012:code-signing-config:csc-0d4518bd353a0a7c6” } } } ] }

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

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

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