

# Lambda 環境変数の保護
<a name="configuration-envvars-encryption"></a>

環境変数の保護する場合、サーバー側の暗号化を使用して保管中のデータを保護し、クライアント側の暗号化を使用して転送中のデータを保護することができます。

**注記**  
データベースのセキュリティを強化するには、環境変数の代わりに AWS Secrets Manager を使用してデータベースの認証情報を保存することをお勧めします。詳細については、「[Lambda 関数で Secrets Manager シークレットを使用する](with-secrets-manager.md)」を参照してください。

**保管時のセキュリティ**  
Lambda は、AWS KMS key で常にサーバー側の暗号化を提供します。デフォルトでは、Lambda は AWS マネージドキーを使用します。このデフォルトの動作がワークフローに適している場合は、他の設定をする必要はありません。Lambda はアカウントに AWS マネージドキーを作成し、それに対するアクセス許可を管理します。このキーの使用に対する AWS の請求は発生しません。

必要に応じて、AWS KMS カスタマー管理のキーを使用することもできます。その場合、KMS キーのローテーションの制御や、KMS キーの管理に関する組織の要件への準拠を行うことができます。カスタマー管理のキーを使用すると、KMS キーへのアクセス許可があるアカウントのユーザーのみが、関数の環境変数を表示または管理できます。

カスタマーマネージドキーには、標準の AWS KMS 料金が発生します。詳細については、「[AWS Key Management Service 料金表](https://aws.amazon.com/kms/pricing/)」を参照してください。

**転送中のセキュリティ**  
セキュリティを強化するために、転送中の暗号化のヘルパーを有効にして、転送中の保護のために環境変数をクライアント側で暗号化することができます。

**環境変数の暗号化を設定するには**

1. AWS Key Management Service (AWS KMS) を使用して、Lambda でサーバー側およびクライアント側の暗号化に使用するカスタマー管理のキーを作成します。詳細については、 *AWS Key Management Service デベロッパーガイド*の「[キーの作成](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html)」を参照してください。

1. Lambda コンソールを使用して、[**環境変数の編集**] ページに移動します。

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

   1. 関数を選択します。

   1. [**設定**] を選択し、左側のナビゲーションバーで [**環境変数**] を選択します。

   1. [**環境変数**] セクションで、[**編集**] を選択します。

   1. [**暗号化設定**] を展開します。

1. コンソール暗号化ヘルパーを有効にして、クライアント側の暗号化を使用し、転送中のデータを保護します (オプション)。

   1. [**転送時の暗号化**] で、[**転送時の暗号化に使用するヘルパーの有効化**] を選択します。

   1. コンソール暗号化ヘルパーを有効にする各環境変数に対して、環境変数の横にある **[Encrypt]** (暗号化) を選択します。

   1.  転送時に暗号化する AWS KMS key で、この手順の最初で作成したカスタマー管理キーを選択します。

   1. [**実行ロールポリシー**] をクリックしてポリシーをコピーします。このポリシーは、環境変数を復号化するアクセス許可を関数の実行ロールに付与します。

      このポリシーは、この手順の最後のステップで使用するために保存します。

   1. 環境変数を暗号化する関数にコードを追加します。例を表示するには、**[Decrypt secrets snippet]** を選択します。

1. 保管中の暗号化に使用するカスタマーマネージドキーを指定します (オプション)。

   1. [**カスタマーマスターキーの使用**] を選択します。

   1. この手順の最初に作成したカスタマー管理のキーを選択します。

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

1. 許可を設定します。

   サーバー側の暗号化でカスタマーマネージドキーを使用している場合は、関数の環境変数を表示または管理できるようにしたいユーザーまたはロールに許可を付与します。詳細については、「[サーバー側の暗号化 KMS キーに対するアクセス許可の管理](#managing-permissions-to-your-server-side-encryption-key)」を参照してください。

   転送時のセキュリティの目的でクライアント側の暗号化を有効にする場合、関数に `kms:Decrypt` API オペレーションを呼び出すためのアクセス許可が必要です。この手順で以前に保存したポリシーを関数の[実行ロール](lambda-intro-execution-role.md)に追加します。

## サーバー側の暗号化 KMS キーに対するアクセス許可の管理
<a name="managing-permissions-to-your-server-side-encryption-key"></a>

ユーザーや関数の実行ロールには、デフォルトの暗号化キーを使用するための AWS KMS アクセス許可が不要です。カスタマー管理のキーを使用するには、キーを使用するためのアクセス許可が必要です。Lambda はユーザーのアクセス許可を使用して、キーを付与します。これにより、Lambda はこのキーを暗号化に使用できます。
+ `kms:ListAliases` － Lambda コンソールでキーを表示します。
+ `kms:CreateGrant`、`kms:Encrypt` － 関数でカスタマー管理のキーを設定します。
+ `kms:Decrypt` － カスタマー管理のキーで暗号化された環境変数を表示および管理します。

これらの許可は、AWS アカウントから、またはキーのリソースベースの許可ポリシーから取得できます。`ListAliases` は、[Lambda のマネージドポリシー](access-control-identity-based.md)から提供されます。キーポリシーは、**キーユーザー**グループのユーザーに対して残りのアクセス許可を付与します。

`Decrypt` アクセス許可を持たないユーザーは、引き続き関数を管理できますが、Lambda コンソールで環境変数を表示または管理することはできません。ユーザーが環境変数を表示できないようにするには、デフォルトキー、カスタマー管理キー、またはすべてのキーへのアクセスを拒否するステートメントをユーザーのアクセス許可に追加します。

**Example IAM ポリシー － キー ARN によるアクセスの拒否**    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Deny",
            "Action": [
                "kms:Decrypt"
            ],
            "Resource": "arn:aws:kms:us-east-2:111122223333:key/3be10e2d-xmpl-4be4-bc9d-0405a71945cc"
        }
    ]
}
```

キーのアクセス許可の管理に関する詳細については、「*AWS Key Management Service デベロッパーガイド*」の「[AWS KMS のキーポリシー](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html)」を参照してください。