

# コード署名を使用して Lambda でコードの整合性を検証する
<a name="configuration-codesigning"></a>

コード署名を使用すると、信頼できるコードのみが Lambda 関数にデプロイされるようにできます。AWS Signer を使用すると、関数のデジタル署名付きコードパッケージを作成できます。[コード署名の設定を関数に追加](configuration-codesigning-create.md)すると、Lambda はすべての新しいコードデプロイが信頼できるソースによって署名されていることを検証します。コード署名の検証チェックはデプロイ時に実行されるため、関数の実行に影響しません。

**重要**  
コード署名の設定では、署名なしコードの新規デプロイのみが防止されます。署名なしコードがある既存の関数にコード署名の設定を追加した場合、そのコードは新しいコードパッケージをデプロイするまで実行され続けます。

関数に対してコード署名を有効にする場合、関数に追加するすべての[レイヤー](chapter-layers.md)も許可された署名プロファイルによって署名されている必要があります。

AWS Lambda での AWS Signer またはコード署名の使用には、追加料金は発生しません。

## 署名の検証
<a name="config-codesigning-valid"></a>

ユーザーが署名付きコードパッケージを関数にデプロイすると、Lambda により次の検証チェックが実行されます。

1. **整合性**: コードパッケージが、署名されてから変更されていないことを検証します。Lambda が、パッケージのハッシュと署名からのハッシュを比較します。

1. **有効期限**: コードパッケージの署名が有効期限切れになっていないことを検証します。

1. **不一致**: 許可された署名プロファイルによってコードパッケージが署名されていることを検証します。

1. **失効**: コードパッケージの署名が取り消されていないことを検証します。

コード署名の設定を作成するときは、[UntrustedArtifactOnDeployment](https://docs.aws.amazon.com/lambda/latest/api/API_CodeSigningPolicies.html#lambda-Type-CodeSigningPolicies-UntrustedArtifactOnDeployment) パラメータを使用して、有効期限、不一致、または失効のチェックが失敗した場合に Lambda がどのように対応するかを指定できます。以下のいずれかのアクションを選択できます。
+ `Warn`: これはデフォルトの設定です。Lambda はコードパッケージのデプロイを許可しますが、警告を発行します。Lambda は、新しい Amazon CloudWatch メトリクス (`SignatureValidationErrors`) を発行し、警告を CloudTrail ログに保存します。
+ `Enforce`: Lambda は (`Warn` アクションと同じように) 警告を発行し、コードパッケージのデプロイをブロックします。

**Topics**
+ [

## 署名の検証
](#config-codesigning-valid)
+ [

# Lambda のコード署名の設定を作成する
](configuration-codesigning-create.md)
+ [

# Lambda コード署名設定用の IAM ポリシーの設定
](config-codesigning-policies.md)
+ [

# コード署名設定でのタグの使用
](tags-csc.md)

# Lambda のコード署名の設定を作成する
<a name="configuration-codesigning-create"></a>

関数でコード署名を有効にするには、*コード署名の設定*を作成し、その設定を関数にアタッチします。コード署名の設定では、許可済みの署名プロファイルのリストと、検証チェックが失敗した場合に実行するポリシーアクションを定義します。

**注記**  
コンテナイメージとして定義された関数では、コード署名はサポートされません。

**Topics**
+ [

## 構成の前提条件
](#config-codesigning-prereqs)
+ [

## コード署名の設定を作成する
](#config-codesigning-config-console)
+ [

## 関数のコード署名を有効化する
](#config-codesigning-function-console)

## 構成の前提条件
<a name="config-codesigning-prereqs"></a>

Lambda 関数用のコード署名を設定する前に、AWS Signer を使用して次の操作を実行します。
+ 1 つまたは複数の[署名プロファイル](https://docs.aws.amazon.com/signer/latest/developerguide/signing-profiles.html)を作成します。
+ 署名プロファイルを使用して、[関数の署名付きコードパッケージを作成](https://docs.aws.amazon.com/signer/latest/developerguide/lambda-workflow.html)します。

## コード署名の設定を作成する
<a name="config-codesigning-config-console"></a>

コード署名の設定では、許可された署名プロファイルと署名検証ポリシーのリストを定義します。

**コード署名設定を (コンソールで) 作成するには、**

1. Lambda コンソールの [[Code signing configurations (コード署名設定)] ページ)](https://console.aws.amazon.com/lambda/home#/code-signing-configurations)を開きます。

1. **[設定を作成]** を選択します。

1. [**説明**] に、その設定のための、分かりやすい名前を入力します。

1. [**署名プロファイル**] に、設定のための署名プロファイルを (最大 20 個まで) 追加します。

   1. [**署名プロファイルバージョンの ARN**] から、使用するプロファイルバージョンの Amazon リソースネーム (ARN) を選択します。あるいは、そこに ARN を入力します。

   1. 署名プロファイルを追加するには、[**署名プロファイルの追加**] をクリックします。

1. [**署名の検証ポリシー**] で、[**警告 **] または [**強制**] を選択します。

1. **[設定を作成]** を選択します。

## 関数のコード署名を有効化する
<a name="config-codesigning-function-console"></a>

関数のコード署名を有効にするには、コード署名の設定を関数に追加します。

**重要**  
コード署名の設定では、署名なしコードの新規デプロイのみが防止されます。署名なしコードがある既存の関数にコード署名の設定を追加した場合、そのコードは新しいコードパッケージをデプロイするまで実行され続けます。

**コード署名の設定を (コンソールで) 関数に関連付けるには**

1. Lambda コンソールの [[関数]](https://console.aws.amazon.com/lambda/home#/functions) ページを開きます。

1. コード署名を有効にする関数を選択します。

1. **[設定]** タブを開きます。

1. 下にスクロールし、**[コード署名]** を選択します。

1. **[編集]** を選択します。

1. **[コード署名を編集]** で、対象の関数に関連付けるコード署名の設定を選択します。

1. **[保存]** を選択します。

# Lambda コード署名設定用の IAM ポリシーの設定
<a name="config-codesigning-policies"></a>

Lambda コード署名 API オペレーションにアクセスする権限をユーザーに付与するには、1 つ以上のポリシーステートメントをそのユーザーのポリシーにアタッチします。ユーザーポリシーの詳細については、「[Lambda のアイデンティティベースの IAM ポリシー](access-control-identity-based.md)」を参照してください。

次に示すポリシーステートメントの例では、コード署名の設定を作成、更新、および取得するためのアクセス権限を付与しています。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
          "lambda:CreateCodeSigningConfig",
          "lambda:UpdateCodeSigningConfig",
          "lambda:GetCodeSigningConfig"
        ],
      "Resource": "*" 
    }
  ]
}
```

------

管理者は、`CodeSigningConfigArn` 条件キーを使用して、デベロッパーが関数を作成または更新する際に必要となる、コード署名の設定を指定できます。

次に示すポリシーステートメントの例では、関数を作成するための権限を付与しています。ポリシーステートメントには、許可されるコード署名設定を指定する `lambda:CodeSigningConfigArn` 条件を含めます。[CodeSigningConfigArn](https://docs.aws.amazon.com/lambda/latest/api/API_CreateFunction.html#lambda-CreateFunction-request-CodeSigningConfigArn) パラメータが欠如しているか、条件の値と一致しない場合、Lambda は `CreateFunction` API リクエストをブロックします。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "AllowReferencingCodeSigningConfig",
      "Effect": "Allow",
      "Action": [
        "lambda:CreateFunction"
      ],
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "lambda:CodeSigningConfigArn": "arn:aws:lambda:us-east-1:111122223333:code-signing-config:csc-0d4518bd353a0a7c6"
        }
      }
    }
  ]
}
```

------

# コード署名設定でのタグの使用
<a name="tags-csc"></a>

コード署名設定にタグを付けて、リソースを整理および管理できます。タグは、AWS のサービス間でサポートされているリソースに関連付けられた自由形式のキーと値のペアです。タグのユースケースの詳細については、「*タグ付け AWS リソースとタグエディタガイド*」の「[一般的なタグ付け戦略](https://docs.aws.amazon.com//tag-editor/latest/userguide/best-practices-and-strats.html#tag-strategies)」を参照してください。

 AWS Lambda API を使用して、タグを表示および更新できます。Lambda コンソールで特定のコード署名設定を管理しながら、タグを表示および更新することもできます。

**Topics**
+ [

## タグの操作に必要なアクセス許可
](#csc-tags-required-permissions)
+ [

## Lambda コンソールでのタグの使用
](#tags-csc-console)
+ [

## AWS CLIでのタグの使用
](#tags-csc-cli)

## タグの操作に必要なアクセス許可
<a name="csc-tags-required-permissions"></a>

AWS Identity and Access Management (IAM) ID (ユーザー、グループ、ロール) がリソースのタグを読み取るまたは設定できるようにするには、以下の対応するアクセス許可を付与します。
+ **lambda:ListTags** – リソースがタグ付けされている場合は、そのリソースで `ListTags` を呼び出す必要があるすべてのユーザーに対し、このアクセス許可を付与します。タグ付き関数の場合、このアクセス許可は `GetFunction` にも必要です。
+ **lambda:TagResource** – 作成時に `TagResource` を呼び出すかタグを実行する必要があるすべてのユーザーにこのアクセス許可を付与します。

必要に応じて、**Lambda:UntagResource** アクセス許可も付与して、リソースへの `UntagResource` 呼び出しを許可することを検討してください。

詳細については、「[Lambda のアイデンティティベースの IAM ポリシー](access-control-identity-based.md)」を参照してください。

## Lambda コンソールでのタグの使用
<a name="tags-csc-console"></a>

Lambda コンソールを使用して、タグを持つコード署名設定を作成し、既存のコード署名設定にタグを追加して、コード署名設定をタグでフィルタリングできます。

**コード署名設定の作成時にタグを追加するには**

1. Lambda コンソールの [[コード署名設定]](https://console.aws.amazon.com/lambda/home#/code-signing-configurations) を開きます。

1. コンテンツペインのヘッダーから、**[設定の作成]** を選択します。

1. コンテンツペインの上部にあるセクションで、コード署名設定をセットアップします。コード署名設定の設定の詳細については、「[コード署名を使用して Lambda でコードの整合性を検証する](configuration-codesigning.md)」を参照してください。

1. In the **Tags** section, choose **Add new tag**.

1. **[キー]** フィールドにタグキーを入力します。タグ付け制限の詳細については、「*タグ付け AWS リソースとタグエディタユーザーガイド*」の「[タグの命名制限と要件](https://docs.aws.amazon.com//tag-editor/latest/userguide/best-practices-and-strats.html#id_tags_naming_best_practices)」を参照してください。

1. **[設定を作成]** を選択します。

**既存のコード署名設定にタグを追加するには**

1. Lambda コンソールの [[コード署名設定]](https://console.aws.amazon.com/lambda/home#/code-signing-configurations) を開きます。

1. コード署名設定の名前を選択します。

1. **[詳細]** ペインの下にあるタブで、**[タグ]** を選択します。

1. [**Manage tags (タグの管理)**] を選択します。

1. **新しいタグを追加**を選択します。

1. **[キー]** フィールドにタグキーを入力します。タグ付け制限の詳細については、「*タグ付け AWS リソースとタグエディタユーザーガイド*」の「[タグの命名制限と要件](https://docs.aws.amazon.com//tag-editor/latest/userguide/best-practices-and-strats.html#id_tags_naming_best_practices)」を参照してください。

1. **[保存]** を選択します。

**タグでコード署名設定をフィルタリングするには**

1. Lambda コンソールの [[コード署名設定]](https://console.aws.amazon.com/lambda/home#/code-signing-configurations) を開きます。

1. 検索ボックスを選択します。

1. ドロップダウンリストで、**[タグ]** の小見出しの下からタグを選択します。

1. **[使用: "tag-name"]** を選択して、このキーでタグ付けされたすべてのコード署名設定を表示するか、**[演算子]** を選択して、値でさらにフィルタリングします。

1. タグキーと値の組み合わせでフィルタリングするタグ値を選択します。

検索ボックスは、タグキーの検索もサポートしています。キーの名前を入力し、リスト内で見つけます。

## AWS CLIでのタグの使用
<a name="tags-csc-cli"></a>

Lambda API を使用して、コード署名設定を含む既存の Lambda リソースにタグを追加および削除できます。コード署名設定の作成時にタグを追加することもできます。これにより、ライフサイクル全体を通じてリソースにタグを付けることができます。

### Lambda タグ API を使用したタグの更新
<a name="tags-csc-api-config"></a>

サポートされている Lambda リソースのタグを追加または削除するには、[TagResource](https://docs.aws.amazon.com/lambda/latest/api/API_TagResource.html) および [UntagResource](https://docs.aws.amazon.com/lambda/latest/api/API_UntagResource.html) API オペレーションを使用します。

これらの操作は AWS CLI を使用して呼び出すことができます。既存のリソースにタグを追加するには、`tag-resource` コマンドを使用します。この例では、2 つのタグを追加します。1 つはキー *Department* を持つタグで、もう 1 つはキー *CostCenter* を持つタグです。

```
aws lambda tag-resource \
--resource arn:aws:lambda:us-east-2:123456789012:resource-type:my-resource \
--tags Department=Marketing,CostCenter=1234ABCD
```

タグを削除するには、`untag-resource` コマンドを使用します。この例では、キー *Department* を持つタグを削除します。

```
aws lambda untag-resource --resource arn:aws:lambda:us-east-1:123456789012:resource-type:resource-identifier \
--tag-keys Department
```

### コード署名設定作成時のタグの追加
<a name="tags-csc-on-create"></a>

タグを使用して新しい Lambda コード署名設定を作成するには、[CreateCodeSigningConfig](https://docs.aws.amazon.com//lambda/latest/api/API_CreateCodeSigningConfig.html) API オペレーションを使用します。`Tags` パラメータを指定します。このオペレーションは、`create-code-signing-config` AWS CLI コマンドと `--tags` オプションを使用して呼び出すことができます。CLI コマンドの詳細については、「*AWS CLI コマンドリファレンス*」の「[create-code-signing-config](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/create-code-signing-config.html)」を参照してください。

`CreateCodeSigningConfig` で `Tags` パラメータを使用する前に、このオペレーションに必要な通常のアクセス許可と共に、リソースにタグを付けるアクセス許可をロールが有していることを確認してください。タグ付けのアクセス許可の詳細については、「[タグの操作に必要なアクセス許可](#csc-tags-required-permissions)」を参照してください。

### Lambda タグ API を使用したタグの表示
<a name="tags-csc-api-view"></a>

特定の Lambda リソースに適用されるタグを表示するには、`ListTags` API オペレーションを使用します。詳細については、「[ListTags](https://docs.aws.amazon.com/lambda/latest/api/API_ListTags.html)」を参照してください。

このオペレーションは、ARN (Amazon リソースネーム) を指定することで `list-tags` AWS CLI コマンドで呼び出すことができます。

```
aws lambda list-tags --resource arn:aws:lambda:us-east-1:123456789012:resource-type:resource-identifier
```

### タグによるリソースのフィルタリング
<a name="tags-csc-filtering"></a>

AWS Resource Groups Tagging API [GetResources](https://docs.aws.amazon.com/resourcegroupstagging/latest/APIReference/API_GetResources.html) API オペレーションを使用すると、リソースをタグでフィルタリングできます。この `GetResources` オペレーションは、それぞれにタグキーと最大 10 個のタグ値が含まれているフィルタを、最大 10 個まで受け取ります。特定のリソースタイプでフィルタリングするには、`GetResources` で `ResourceType` を指定します。

このオペレーションは、`get-resources` AWS CLI コマンドを使用して呼び出すことができます。`get-resources` の使用例については、「*AWS CLI コマンドリファレンス*」の「[get-resources](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/resourcegroupstaggingapi/get-resources.html#examples)」を参照してください。