Amazon Web Services ブログ

新機能 — コード署名、AWS Lambda の信頼と整合性のコントロール

コード署名とは、コードが変更されていないこと、信頼できる発行元からのものであることを確認するために使用される業界標準の技法です。 AWS Lambda 関数内で実行されるコードは、高度に強化されたシステム上で、安全な方法で実行されます。ただし、関数コードは AWS の外部で実行されるデプロイパイプラインを移動するため、変更される可能性があります。

本日より、AWS Lambda のコード署名を開始いたします。これは、信頼できる発行元からの署名済みコードパッケージだけが Lambda 関数で実行され、署名以降コードが変更されないことを管理者が強制できるようにする、信頼と整合性のコントロールです。

Lambda のコード署名は、信頼できるコードのみが Lambda でデプロイされるようにする最高のメカニズムを提供します。これにより、組織はデプロイパイプラインでゲートキーパーコンポーネントを構築する負担から解放されます。AWS Lambda のコード署名は、AWS の完全マネージドコード型署名サービスである AWS Signer を活用しています。管理者は、署名プロファイルを作成します。署名プロファイルは、署名を作成するために使用され、AWS Identity and Access Management (IAM) を使用して署名プロファイルへのアクセス権をデベロッパーに付与するためのリソースです。Lambda 内で、管理者はコード署名設定 (CSC) と呼ばれる新しいリソースを使用して、許可された署名プロファイルを指定します。CSC により、組織は管理者とデベロッパーとの間での職務の分離を実装できます。管理者は CSC を使用して関数にコード署名ポリシーを設定でき、デベロッパーは関数にコードをデプロイすることができます。

署名プロファイルの作成方法
AWS 署名者コンソールを使用して、新しい署名プロファイルを作成できます。署名プロファイルは、信頼できる発行元のグループを表すことができ、デジタル署名証明書の使用に類似しています。

[Create Signing Profile] をクリックすることで、署名付きコードパッケージの作成に使用できる署名プロファイルを作成できます。

署名プロファイルによって生成される署名には、1 日から 135 か月の間で署名有効期間を割り当てることができます。

コード署名設定 (CSC) の作成方法
コード署名設定と呼ばれる新しいリソースを作成して関数にアタッチすることで、AWS Lambda コンソール、コマンドラインインターフェイス (CLI)、または API を使用してコード署名を使用するように関数を設定できます。コード署名設定は、[Additional resources] メニューにあります。

[Create configuration] をクリックすると、この設定のコードアーティファクトへの署名を許可する署名プロファイルを定義し、署名検証ポリシーを設定できます。許可された署名プロファイルを追加するには、AWS アカウント内のすべての署名プロファイルを表示するドロップダウンから選択するか、バージョン ARN を指定して別のアカウントから署名プロファイルを追加します。

また、署名検証ポリシーを「警告」または「強制」に設定することもできます。「警告」を使用すると、署名チェックに失敗した場合、Lambda は Cloudwatch メトリクスをログに記録しますが、デプロイは受け入れます。「強制」を使用すると、署名チェックが失敗した場合、Lambda はデプロイを拒否します。署名の署名プロファイルが CSC で許可されている署名プロファイルのいずれかと一致しない場合、署名の有効期限が切れている場合、または署名が取り消されている場合、署名チェックは失敗します。署名後にコードパッケージが改ざんまたは変更された場合、署名検証ポリシーに関係なく、デプロイは必ず拒否されます。

新しい Lambda API CreateCodeSigningConfig を使用して CSC を作成することもできます。JSON リクエストの構文は以下のとおりです。

{
     "CodeSigningConfigId": string,
     "CodeSigningConfigArn": string,
     "Description": string,
     "AllowedPublishers": {
           "SigningProfileVersionArns": [string]
      },
     "CodeSigningPolicies": {
     "UntrustedArtifactOnDeployment": string,   // 警告または強制
    },
     "LastModified”: string
}

Lambda 関数のコード署名を有効にする
Lambda 関数のコード署名機能を有効にするには、関数を選択して [コード署名設定] セクションで [Edit] をクリックします。

利用可能な CSC の 1 つを選択し、[Save] ボタンをクリックします。

コード署名を使用するように関数を設定したら、 AWS Signer の署名ジョブによって作成された署名付き .zip ファイルまたは署名済み .zip の Amazon S3 URL をアップロードする必要があります。

署名付きコードパッケージの作成方法
許可された署名プロファイルの 1 つを選択し、署名するコードパッケージの ZIP ファイルの S3 の場所を指定します。また、署名済みコードパッケージをアップロードする宛先パスも指定します。

署名ジョブは、コードパッケージの署名を生成し、署名済みコードパッケージを指定された宛先パスに配置する非同期プロセスです。

署名ジョブが成功すると、割り当てられた S3 バケットで署名済み ZIP パッケージを見つけることができます。

Lambda コンソールに戻ると、署名付きコードパッケージを Lambda 関数に公開できるようになります。Lambda は署名チェックを実行して、署名後にコードが変更されていないこと、および許可された署名プロファイルの 1 つによってコードが署名されていることを確認します。

関数に CSC をアタッチすることで、CreateFunction API または PutFunctionCodeSigningConfig API を使用して、関数のコード署名を有効にすることもできます。

デベロッパーは、 SAM CLI を使用してコードパッケージに署名することもできます。これは、パッケージまたはデプロイ段階で署名プロファイルを指定することによって行います。SAM CLI は、コードを Lambda にデプロイする前に、署名ワークフローを自動的に開始します。

コード署名は、 AWS CloudFormationTerraform などのコードツールとして、インフラストラクチャでもサポートされています。Terraform では、デベロッパーはコード署名リソースの宣言と作成に加えて、コードに署名することもできます。

今すぐご利用いただけます
AWS Lambda のコード署名は、AWS 中国リージョン、AWS GovCloud (米国) リージョン、およびアジアパシフィック (大阪) リージョンを除くすべての商用リージョンでご利用いただけます。コード署名の使用には追加料金は不要で、Lambda 関数の標準料金をお支払いいただきます。

AWS Lambda のコード署名および AWS Signer の詳細については、Lambda デベロッパーガイドにアクセスしてください。また、AWS Lambda のフォーラムあるいは通常の AWS サポート担当者からフィードバックをお送りください。

Channy