

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

# AWS SAM アプリケーションのコード署名を設定する
<a name="authoring-codesigning"></a>

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

コード署名の詳細については、「AWS Lambda デベロッパーガイド」の「[Lambda 関数のコード署名の設定](https://docs.aws.amazon.com/lambda/latest/dg/configuration-codesigning.html)」を参照してください。

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

1. **コード署名設定の作成** - [https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-codesigningconfig.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-codesigningconfig.html) リソースを宣言して、信頼できる発行元の署名プロファイルの指定と、検証チェックのためのポリシーアクションの設定を行います。このオブジェクトは、サーバーレス関数と同じ AWS SAM テンプレート、別の AWS SAM テンプレート、または CloudFormation テンプレートで宣言できます。その後、[https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-codesigningconfig.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-codesigningconfig.html) リソースの Amazon リソースネーム (ARN) を使用して関数の [https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-resource-function.html#sam-function-codesigningconfigarn](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-resource-function.html#sam-function-codesigningconfigarn) プロパティを指定することによって、サーバーレス関数のコード署名を有効にします。

1. **コードの署名** - `--signing-profiles` オプションを用いた [https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-cli-command-reference-sam-package.html](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-cli-command-reference-sam-package.html) または [https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-cli-command-reference-sam-deploy.html](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-cli-command-reference-sam-deploy.html) コマンドを使用します。

**注記**  
`sam package` または `sam deploy` コマンドを使用したコードの署名が正常に行われるには、これらのコマンドで使用する Amazon S3 バケットでバージョニングが有効化されている必要があります。が AWS SAM 作成する Amazon S3 バケットを使用している場合、バージョニングは自動的に有効になります。Amazon S3 バケットのバージョニング、および提供する Amazon S3 バケットでバージョニングを有効化する手順の詳細については、*Amazon Simple Storage Service ユーザーガイド*の「[S3 バケットでのバージョニングの使用](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Versioning.html)」を参照してください。

サーバーレスアプリケーションをデプロイするときは、コード署名を有効にしたすべての関数に対して Lambda が検証チェックを実行します。Lambda は、これらの関数が依存するレイヤーにも検証チェックを実行します。Lambda の検証チェックの詳細については、*AWS Lambda デベロッパーガイド*の「[署名の検証](https://docs.aws.amazon.com/lambda/latest/dg/configuration-codesigning.html#config-codesigning-valid)」を参照してください。

## 例
<a name="authoring-codesigning-example"></a>

### 署名プロファイルの作成
<a name="authoring-codesigning-example-signing-profile"></a>

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

```
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 が含まれています。

### コード署名設定の作成と関数のコード署名の有効化
<a name="authoring-codesigning-example-configure-trusted-deployments"></a>

次のサンプル AWS SAM テンプレートは、 [https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-codesigningconfig.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-codesigningconfig.html)リソースを宣言し、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"
```

### コードの署名
<a name="authoring-codesigning-example-signing-code"></a>

コードは、アプリケーションをパッケージ化またはデプロイするときに署名できます。以下のコマンド例にあるように、`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 バケットでのバージョニングの使用](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Versioning.html)」を参照してください。

## `sam deploy --guided` での署名プロファイルの提供
<a name="authoring-codesigning-sam-deploy-guided"></a>

コード署名が設定されたサーバーレスアプリケーションで `sam deploy --guided` コマンドを実行すると、 はコード署名に使用する署名プロファイルを指定するように AWS SAM 求めます。`sam deploy --guided` プロンプトの詳細については、 AWS SAM CLI コマンドリファレンスの「[sam deploy](sam-cli-command-reference-sam-deploy.md)」を参照してください。