AWS SAM アプリケーションのためのコード署名の設定 - AWS Serverless Application Model

AWS SAM アプリケーションのためのコード署名の設定

信頼できるコードのみがデプロイされることを確実にするために、AWS SAM を使用してサーバーレスアプリケーションのコード署名を有効化できます。コード署名機能の詳細については、「AWS Lambda 開発者ガイド」の「Lambda のコード署名の設定」を参照してください。

サーバーレスアプリケーションのコード署名を設定する前に、AWS Signer を使用して署名プロファイルを作成する必要があります。この署名プロファイルは、以下のタスクに使用します。

  1. コード署名設定の作成 - AWS::Lambda::CodeSigningConfig リソースを宣言して、信頼できる発行元の署名プロファイルの指定と、検証チェックのためのポリシーアクションの設定を行います。このオブジェクトは、サーバーレス関数と同じ AWS SAM テンプレート、異なる AWS SAM テンプレート、または AWS CloudFormation テンプレートで宣言できます。その後、AWS::Lambda::CodeSigningConfig リソースの Amazon リソースネーム (ARN) を使用して関数の CodeSigningConfigArn プロパティを指定することによって、サーバーレス関数のコード署名を有効にします。

  2. コードの署名 - --signing-profiles オプションを用いた sam package または sam deploy コマンドを使用します。

注記

sam package または sam deploy コマンドを使用したコードの署名が正常に行われるには、これらのコマンドで使用する Amazon S3 バケットでバージョニングが有効化されている必要があります。AWS SAM が作成する Amazon S3 バケットを使用している場合は、バージョニングが自動的に有効化されています。Amazon S3 バケットのバージョニング、および提供する Amazon S3 バケットでバージョニングを有効化する手順の詳細については、Amazon Simple Storage Service ユーザーガイドの「S3 バケットでのバージョニングの使用」を参照してください。

サーバーレスアプリケーションをデプロイするときは、コード署名を有効にしたすべての関数に対して Lambda が検証チェックを実行します。Lambda は、これらの関数が依存するレイヤーにも検証チェックを実行します。Lambda の検証チェックの詳細については、AWS Lambda デベロッパーガイドの「署名の検証」を参照してください。

署名プロファイルの作成

署名プロファイルを作成するには、以下のコマンドを実行します。

aws signer put-signing-profile --platform-id "AWSLambda-SHA384-ECDSA" --profile-name MySigningProfile

上記のコマンドが正常に実行されると、署名プロファイルの ARN が返されたことを確認できます。例えば、このようになります。

{ "arn": "arn:aws:signer:us-east-1:111122223333:/signing-profiles/MySigningProfile", "profileVersion": "SAMPLEverx", "profileVersionArn": "arn:aws:signer:us-east-1:111122223333:/signing-profiles/MySigningProfile/SAMPLEverx" }

profileVersionArn フィールドには、コード署名設定を作成するときに使用する ARN が含まれています。

コード署名設定の作成と関数のコード署名の有効化

以下の AWS SAM テンプレート例は、AWS::Lambda::CodeSigningConfig リソースを宣言して、Lambda 関数のコード署名を有効にします。この例では、信頼できるプロファイルが 1 つあり、署名チェックが失敗するとデプロイが拒否されます。

Resources: HelloWorld: Type: AWS::Serverless::Function Properties: CodeUri: hello_world/ Handler: app.lambda_handler Runtime: python3.7 CodeSigningConfigArn: !Ref MySignedFunctionCodeSigningConfig MySignedFunctionCodeSigningConfig: Type: AWS::Lambda::CodeSigningConfig Properties: Description: "Code Signing for MySignedLambdaFunction" AllowedPublishers: SigningProfileVersionArns: - MySigningProfile-profileVersionArn CodeSigningPolicies: UntrustedArtifactOnDeployment: "Enforce"

コードの署名

コードは、アプリケーションをパッケージ化またはデプロイするときに署名できます。以下のコマンド例にあるように、sam package または sam deploy コマンドで --signing-profiles オプションを指定します。

アプリケーションをパッケージ化するときの関数コードへの署名:

sam package --signing-profiles HelloWorld=MySigningProfile --s3-bucket test-bucket --output-template-file packaged.yaml

アプリケーションをパッケージ化するときの関数コードと関数が依存するレイヤー両方への署名:

sam package --signing-profiles HelloWorld=MySigningProfile MyLayer=MySigningProfile --s3-bucket test-bucket --output-template-file packaged.yaml

関数コードの署名と、署名後のデプロイの実行:

sam deploy --signing-profiles HelloWorld=MySigningProfile MyLayer=MySigningProfile --s3-bucket test-bucket --template-file packaged.yaml --stack-name --region us-east-1 --capabilities CAPABILITY_IAM
注記

sam package または sam deploy コマンドを使用したコードの署名が正常に行われるには、これらのコマンドで使用する Amazon S3 バケットでバージョニングが有効化されている必要があります。AWS SAM が作成する Amazon S3 バケットを使用している場合は、バージョニングが自動的に有効化されています。Amazon S3 バケットのバージョニング、および提供する Amazon S3 バケットでバージョニングを有効化する手順の詳細については、Amazon Simple Storage Service ユーザーガイドの「S3 バケットでのバージョニングの使用」を参照してください。

sam deploy --guided での署名プロファイルの提供

コード署名が設定されたサーバーレスアプリケーションで sam deploy --guided コマンドを実行すると、AWS SAM がコード署名に使用する署名プロファイルの提供を求めるプロンプトを表示します。sam deploy --guided プロンプトの詳細については、AWS SAM CLI コマンドリファレンスの「sam deploy」を参照してください。