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

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

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

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

コード署名の詳細については、「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 amzn-s3-demo-bucket --output-template-file packaged.yaml

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

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

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

sam deploy --signing-profiles HelloWorld=MySigningProfile MyLayer=MySigningProfile --s3-bucket amzn-s3-demo-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 プロンプトの詳細については、sam deploy「」の「」を参照してください。 AWS SAM CLI コマンドリファレンス。