Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅
中国的 Amazon Web Services 服务入门
(PDF)。
加密 Lambda .zip 部署包
Lambda 始终为 .zip 部署包和带有 Amazon KMS key的函数配置详细信息提供静态服务器端加密。默认情况下,Lambda 使用 Amazon 拥有的密钥。如果此默认行为适合您的工作流,则您无需设置任何其他内容。Amazon 不会向您收取使用此密钥的费用。
如果您愿意,可以提供 Amazon KMS 客户托管式密钥。这样做可能是为了控制 KMS 密钥的轮换,或者是为了满足组织管理 KMS 密钥的要求。当您使用客户自主管理型密钥时,只有您账户中有权访问 KMS 密钥的用户才能查看或管理函数的代码或配置。
客户托管式密钥产生标准 Amazon KMS 费用。有关更多信息,请参阅Amazon Key Management Service 定价。
创建客户托管密钥
您可以使用 Amazon Web Services Management Console 或 Amazon KMS API 创建对称的客户托管密钥。
创建对称的客户托管密钥:
请按照《Amazon Key Management Service 开发人员指南》中创建对称加密 创建对称 KMS 密钥的步骤操作。
权限
密钥策略
密钥策略控制对客户自主管理型密钥的访问。每个客户托管式密钥必须只有一个密钥政策,其中包含确定谁可以使用密钥以及如何使用密钥的声明。有关更多信息,请参阅《Amazon Key Management Service 开发人员指南》中的如何更改密钥策略。
当您使用客户自主管理型密钥加密 .zip 部署包时,Lambda 不会向该密钥添加授权。相反,您的 Amazon KMS 密钥策略必须允许 Lambda 代表您调用以下 Amazon KMS API 操作:
以下示例密钥策略允许账户 111122223333 中的所有 Lambda 函数调用指定客户自主管理型密钥所需的 Amazon KMS 操作:
例 Amazon KMS 密钥政策
{
"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:*
"
}
}
}
]
}
有关密钥访问故障排除的信更多息,请参阅《Amazon Key Management Service 开发人员指南》。
主体权限
当您使用客户自主管理型密钥加密 .zip 部署包时,只有有权访问该密钥的主体才能访问 .zip 部署包。例如,无法访问客户自主管理型密钥的主体无法使用 GetFunction 响应中包含的预签名 S3 URL 下载 .zip 包。响应的 Code
部分中会返回 AccessDeniedException
。
例 Amazon 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"
},
...
有关 Amazon KMS 密钥的权限的更多信息,请参阅 Amazon KMS 的身份验证和访问控制。
对 .zip 部署包使用客户自主管理型密钥
使用以下 API 参数为 .zip 部署包配置客户自主管理型密钥:
同时指定 SourceKMSKeyArn
和 KMSKeyArn
时,Lambda 使用 KMSKeyArn
密钥来加密 Lambda 用于调用该函数的程序包的解压缩版本。如果已指定 SourceKMSKeyArn
但未指定 KMSKeyArn
,则 Lambda 使用 Amazon 托管式密钥加密程序包的解压缩版本。
- Lambda console
-
在创建函数时添加客户自主管理型密钥加密
打开 Lamba 控制台的 Functions page(函数页面)。
-
选择 Create function(创建函数)。
-
选择 Author from scratch(从头开始编写)或 Container image(容器映像)。
-
在 Basic information(基本信息)中,执行以下操作:
-
对于 Function name(函数名称),输入函数名称。
-
对于Runtime(运行时),请选择函数使用的语言版本。
-
展开高级设置,然后选择使用 Amazon KMS 客户自主管理型密钥启用加密。
-
选择客户托管密钥。
-
选择 Create function (创建函数)。
要删除客户自主管理型密钥加密或使用其他密钥,必须再次上传 .zip 部署包。
向现有函数添加客户自主管理型密钥加密
打开 Lamba 控制台的函数页面。
-
选择一个函数的名称。
-
在代码源窗格中,选择上传自。
-
选择 .zip 文件或 Amazon S3 位置。
-
上传文件,或者输入 Amazon S3 位置。
-
选择使用 Amazon KMS 客户自主管理型密钥启用加密。
-
选择客户托管密钥。
-
选择保存。
- Amazon CLI
-
在创建函数时添加客户自主管理型密钥加密
在以下 create-function 示例中:
-
--zip-file
:指定 .zip 部署包的本地路径。
-
--source-kms-key-arn
:指定用于加密部署包压缩版本的客户自主管理型密钥。
-
--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
:指定 .zip 文件在 Amazon S3 存储桶中的位置。您只需对版本控制对象使用 S3ObjectVersion
参数。
-
--source-kms-key-arn
:指定用于加密部署包压缩版本的客户自主管理型密钥。
-
--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 示例中:
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
:指定 .zip 文件在 Amazon S3 存储桶中的位置。
-
--s3-key
:指定部署包的 Amazon S3 密钥。
-
--s3-object-version
:对于版本控制的对象,指要使用的部署程序包对象的版本。
-
--source-kms-key-arn
:指定用于加密部署包压缩版本的客户自主管理型密钥。Lambda 使用 Amazon 拥有的密钥对解压缩包进行加密,以进行函数调用。如果要使用客户自主管理型密钥来加密程序包的解压缩版本,则请运行带有 --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 会使用 Amazon 拥有的密钥对部署包的压缩版本进行加密。
aws lambda update-function-code \
--function-name myFunction \
--zip-file
fileb://myFunction.zip