AWS SAM アプリケーションのためのコード署名の設定
信頼できるコードのみがデプロイされることを確実にするために、AWS SAM を使用してサーバーレスアプリケーションのコード署名を有効化できます。コード署名機能の詳細については、「AWS Lambda 開発者ガイド」の「Lambda のコード署名の設定」を参照してください。
サーバーレスアプリケーションのコード署名を設定する前に、AWS Signer を使用して署名プロファイルを作成する必要があります。この署名プロファイルは、以下のタスクに使用します。
-
コード署名設定の作成 -
AWS::Lambda::CodeSigningConfig
リソースを宣言して、信頼できる発行元の署名プロファイルの指定と、検証チェックのためのポリシーアクションの設定を行います。このオブジェクトは、サーバーレス関数と同じ AWS SAM テンプレート、異なる AWS SAM テンプレート、または AWS CloudFormation テンプレートで宣言できます。その後、AWS::Lambda::CodeSigningConfig
リソースの Amazon リソースネーム (ARN) を使用して関数のCodeSigningConfigArn
プロパティを指定することによって、サーバーレス関数のコード署名を有効にします。 -
コードの署名 -
--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-buckettest-bucket
--output-template-file packaged.yaml
アプリケーションをパッケージ化するときの関数コードと関数が依存するレイヤー両方への署名:
sam package --signing-profiles
HelloWorld=MySigningProfile MyLayer=MySigningProfile
--s3-buckettest-bucket
--output-template-file packaged.yaml
関数コードの署名と、署名後のデプロイの実行:
sam deploy --signing-profiles
HelloWorld=MySigningProfile MyLayer=MySigningProfile
--s3-buckettest-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」を参照してください。