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

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

AWS SAM アプリケーションのコード署名を設定する

信頼できるコードのみがデプロイされるように AWS SAM するには、 を使用してサーバーレスアプリケーションでコード署名を有効にします。コードに署名すると、署名後にコードが変更されず、信頼できるパブリッシャーからの署名付きコードパッケージのみが Lambda 関数で実行されるようになります。これにより、デプロイパイプラインでゲートキーパーコンポーネントを構築する負担から組織を解放できます。

コード署名の詳細については、「 AWS Lambda デベロッパーガイド」の「Lambda 関数のコード署名の設定」を参照してください。

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

  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」を参照してください。