Lambda .zip デプロイパッケージの暗号化
Lambda では、.zip デプロイパッケージと関数設定詳細の保管時のサーバー側暗号化に常に AWS KMS keyを提供します。デフォルトで、Lambda は AWS 所有のキーを使用します。このデフォルトの動作がワークフローに適している場合は、他の設定をする必要はありません。AWS では、このキーの使用に料金は発生しません。
必要に応じて、AWS KMS カスタマー管理のキーを使用することもできます。その場合、KMS キーのローテーションの制御や、KMS キーの管理に関する組織の要件への準拠を行うことができます。カスタマーマネージドキーを使用すると、KMS キーへのアクセス許可があるアカウントのユーザーのみが、関数のコードや設定を表示または管理できます。
カスタマーマネージドキーには、標準の AWS KMS 料金が発生します。詳細については、「AWS Key Management Service 料金表」を参照してください。
カスタマーマネージドキーを作成する
対称カスタマーマネージドキーを作成するには、AWS マネジメントコンソール または AWS KMS API を使用します。
対称カスタマーマネージドキーを作成するには
「AWS Key Management Service デベロッパーガイド」の「KMS キーを作成する」の手順に従ってください。
アクセス許可
キーポリシー
キーポリシーは、カスタマーマネージドキーへのアクセスを制御します。すべてのカスタマーマネージドキーには、キーポリシーが 1 つだけ必要です。このポリシーには、そのキーを使用できるユーザーとその使用方法を決定するステートメントが含まれています。詳細については、「AWS Key Management Service デベロッパーガイド」の「キーポリシーを変更する方法」を参照してください。
カスタマーマネージドキーを使用して .zip デプロイパッケージを暗号化する場合、Lambda はキーに grant を追加しません。AWS KMS キーポリシーで、Lambda がユーザーに代わって次の AWS KMS API オペレーションを呼び出せるようにする必要があります。
次のキーポリシーの例では、アカウント 111122223333 のすべての Lambda 関数が、指定されたカスタマーマネージドキーに必要な AWS KMS オペレーションを呼び出せるようにします。
例 AWS KMS キーポリシー
- JSON
-
-
{
"Version":"2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "lambda.amazonaws.com"
},
"Action": [
"kms:GenerateDataKey",
"kms:Decrypt"
],
"Resource": "arn:aws:kms:us-east-1:111122223333:key/key-id",
"Condition": {
"StringLike": {
"kms:EncryptionContext:aws:lambda:FunctionArn": "arn:aws:lambda:us-east-1:111122223333:function:*"
}
}
}
]
}
キーアクセスのトラブルシューティングに関する詳細については、「AWS Key Management Service デベロッパーガイド」を参照してください。
プリンシパルアクセス許可
カスタマーマネージドキーを使用して .zip デプロイパッケージを暗号化すると、そのキーにアクセスできるプリンシパルのみが .zip デプロイパッケージにアクセスできます。例えば、カスタマーマネージドキーにアクセスできないプリンシパルは、GetFunction レスポンスに含まれている署名付き S3 URL を使用して .zip パッケージをダウンロードすることはできません。AccessDeniedException は、レスポンスの Code セクションで返されます。
例 AWS KMS AccessDeniedException
{
"Code": {
"RepositoryType": "S3",
"Error": {
"ErrorCode": "AccessDeniedException",
"Message": "KMS access is denied. Check your KMS permissions. KMS Exception: AccessDeniedException KMS Message: User: arn:aws:sts::111122223333:assumed-role/LambdaTestRole/session is not authorized to perform: kms:Decrypt on resource: arn:aws:kms:us-east-1:111122223333:key/key-id with an explicit deny in a resource-based policy"
},
"SourceKMSKeyArn": "arn:aws:kms:us-east-1:111122223333:key/key-id"
},
...
AWS KMS キーのアクセス許可については、「AWS KMS キーアクセスとアクセス許可」を参照してください。
.zip デプロイパッケージにカスタマーマネージドキーを使用する
次の API パラメータを使用して、.zip デプロイパッケージのカスタマーマネージドキーを設定します。
SourceKMSKeyArn と KMSKeyArn の両方が指定されている場合、Lambda は KMSKeyArn キーを使用して、Lambda が関数の呼び出しに使用する解凍されたバージョンのパッケージを暗号化します。SourceKMSKeyArn が指定されていて KMSKeyArn が指定されていない場合、Lambda は AWS マネージドキーを使用して解凍されたバージョンのパッケージを暗号化します。
- Lambda console
-
関数の作成時にカスタマーマネージドキーの暗号化を追加するには
Lambda コンソールの [関数] ページを開きます。
-
[関数の作成] を選択してください。
-
[Author from scratch] (一から作成) または [Container image] (コンテナイメージ) をクリックします。
-
[基本的な情報] で、以下の作業を行います。
-
[関数名] に関数名を入力します。
-
[Runtime] (ランタイム) で、関数で使用する言語バージョンを選択します。
-
[詳細設定] を展開し、[AWS KMS カスタマーマネージドキーによる暗号化を有効にする] を選択します。
-
カスタマーマネージドキーを選択します。
-
[関数の作成] を選択してください。
カスタマーマネージドキーの暗号化を削除するか、別のキーを使用するには、.zip デプロイパッケージを再度アップロードする必要があります。
カスタマーマネージドキーの暗号化を既存の関数に追加するには
Lambda コンソールの関数ページを開きます。
-
関数の名前を選択します。
-
[コードソース] ペインで、[アップロード元] をクリックします。
-
[.zip ファイル] または [Amazon S3 の場所] を選択します。
-
ファイルをアップロードするか、Amazon S3 の場所を入力します。
-
[AWS KMS カスタマーマネージドキーによる暗号化を有効にする] を選択します。
-
カスタマーマネージドキーを選択します。
-
[保存] を選択します。
- AWS CLI
-
関数の作成時にカスタマーマネージドキーの暗号化を追加するには
次に create-function の例を示します。
-
--zip-file: .zip デプロイパッケージへのローカルパスを指定します。
-
--source-kms-key-arn: zip 化されたバージョンのデプロイパッケージを暗号化するカスタマーマネージドキーを指定します。
-
--kms-key-arn: 環境変数と解凍されたバージョンのデプロイパッケージを暗号化するカスタマーマネージドキーを指定します。
aws lambda create-function \
--function-name myFunction \
--runtime nodejs22.x \
--handler index.handler \
--role arn:aws:iam::111122223333:role/service-role/my-lambda-role \
--zip-file fileb://myFunction.zip \
--source-kms-key-arn arn:aws:kms:us-east-1:111122223333:key/key-id \
--kms-key-arn arn:aws:kms:us-east-1:111122223333:key/key2-id
次に create-function の例を示します。
-
--code: Amazon S3 バケット内の .zip ファイルの場所を指定します。S3ObjectVersion パラメータは、バージョン管理下のオブジェクトにのみ使用する必要があります。
-
--source-kms-key-arn: zip 化されたバージョンのデプロイパッケージを暗号化するカスタマーマネージドキーを指定します。
-
--kms-key-arn: 環境変数と解凍されたバージョンのデプロイパッケージを暗号化するカスタマーマネージドキーを指定します。
aws lambda create-function \
--function-name myFunction \
--runtime nodejs22.x --handler index.handler \
--role arn:aws:iam::111122223333:role/service-role/my-lambda-role \
--code S3Bucket=amzn-s3-demo-bucket,S3Key=myFileName.zip,S3ObjectVersion=myObjectVersion \
--source-kms-key-arn arn:aws:kms:us-east-1:111122223333:key/key-id \
--kms-key-arn arn:aws:kms:us-east-1:111122223333:key/key2-id
カスタマーマネージドキーの暗号化を既存の関数に追加するには
次に update-function-code の例を示します。
-
--zip-file: .zip デプロイパッケージへのローカルパスを指定します。
-
--source-kms-key-arn: zip 化されたバージョンのデプロイパッケージを暗号化するカスタマーマネージドキーを指定します。Lambda は、AWS 所有キーを使用して、解凍されたパッケージを関数呼び出しのために暗号化します。カスタマーマネージドキーを使用して解凍されたバージョンのパッケージを暗号化する場合は、--kms-key-arn オプションを指定して update-function-configuration コマンドを実行します。
aws lambda update-function-code \
--function-name myFunction \
--zip-file fileb://myFunction.zip \
--source-kms-key-arn arn:aws:kms:us-east-1:111122223333:key/key-id
次に update-function-code の例を示します。
-
--s3-bucket: Amazon S3 バケット内の .zip ファイルの場所を指定します。
-
--s3-key: デプロイパッケージの Amazon S3 キーを指定します。
-
--s3-object-version: バージョニングオブジェクトの場合、使用するデプロイパッケージオブジェクトのバージョンです。
-
--source-kms-key-arn: zip 化されたバージョンのデプロイパッケージを暗号化するカスタマーマネージドキーを指定します。Lambda は、AWS 所有キーを使用して、解凍されたパッケージを関数呼び出しのために暗号化します。カスタマーマネージドキーを使用して解凍されたバージョンのパッケージを暗号化する場合は、--kms-key-arn オプションを指定して update-function-configuration コマンドを実行します。
aws lambda update-function-code \
--function-name myFunction \
--s3-bucket amzn-s3-demo-bucket \
--s3-key myFileName.zip \
--s3-object-version myObject Version
--source-kms-key-arn arn:aws:kms:us-east-1:111122223333:key/key-id
既存の関数からカスタマーマネージドキーの暗号化を削除するには
次の update-function-code の例では、--zip-file で .zip デプロイパッケージのローカルパスを指定します。--source-kms-key-arn オプションを指定せずにこのコマンドを実行すると、Lambda は AWS 所有キーを使用して、zip 化されたバージョンのデプロイパッケージを暗号化します。
aws lambda update-function-code \
--function-name myFunction \
--zip-file fileb://myFunction.zip