Criptografia dos pacotes de implantação .zip do Lambda
O Lambda sempre fornece criptografia do lado do servidor em repouso para pacotes de implantação .zip e detalhes da configuração da função com uma AWS KMS key. Por padrão, o Lambda usa um Chave pertencente à AWS. Se esse comportamento padrão for adequado ao fluxo de trabalho, você não precisará configurar mais nada. A AWS não cobra pelo uso dessa chave.
Se você preferir, pode fornecer uma AWS KMS chave gerenciada pelo cliente. Você pode fazer isso para ter controle sobre a alternância da chave KMS ou para atender aos requisitos de sua organização para gerenciar chaves KMS. Quando você usa uma chave gerenciada pelo cliente, somente os usuários em sua conta com acesso à chave do KMS podem visualizar ou gerenciar o código ou a configuração da função.
As chaves gerenciadas pelo cliente incorrem em cobranças do AWS KMS padrão. Para obter mais informações, consulte Preços do AWS Key Management Service.
Criar uma chave gerenciada pelo cliente
Você pode criar uma chave simétrica gerenciada pelo cliente usando o AWS Management Console ou as APIs do AWS KMS.
Para criar uma chave simétrica gerenciada pelo cliente
Siga as etapas para Criar chaves simétricas do KMS no Guia do desenvolvedor do AWS Key Management Service.
Permissões
Política de chave
As políticas de chaves controlam o acesso à chave gerenciada pelo cliente. Cada chave gerenciada pelo cliente deve ter exatamente uma política de chaves, que contém declarações que determinam quem pode usar a chave e como pode usá-la. Para obter mais informações, consulte Como alterar uma política de chaves no Guia do desenvolvedor do AWS Key Management Service.
Quando você usa uma chave gerenciada pelo cliente para criptografar um pacote de implantação .zip, o Lambda não adiciona uma concessão à chave. Em vez disso, sua política de chave do AWS KMS deve permitir que o Lambda chame as seguintes operações de API do AWS KMS em seu nome:
O exemplo de política de chave a seguir permite que todas as funções do Lambda na conta 111122223333 chamem as operações do AWS KMS necessárias para a chave gerenciada pelo cliente especificada:
exemplo Política de chave do AWS 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:*
"
}
}
}
]
}
Para obter mais informações sobre solução de problemas de acesso à chave, consulte o Guia do Desenvolvedor do AWS Key Management Service.
Permissões de entidade principal
Quando você usa uma chave gerenciada pelo cliente para criptografar um pacote de implantação .zip, somente as entidades principais com acesso a essa chave podem acessar o pacote de implantação .zip. Por exemplo, as entidades principais que não têm acesso à chave gerenciada pelo cliente não podem baixar o pacote .zip usando o URL pré-assinado do S3 que está incluído na resposta GetFunction. Uma AccessDeniedException
é retornada na seção Code
da resposta.
exemplo 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"
},
...
Para obter mais informações sobre permissões para chaves do AWS KMS, consulte Autenticação e controle de acesso do AWS KMS.
Uso de uma chave gerenciada pelo cliente para seu pacote de implantação .zip
Use os seguintes parâmetros de API para configurar as chaves gerenciadas pelo cliente para pacotes de implantação .zip:
Quando SourceKMSKeyArn
e KMSKeyArn
são especificados, o Lambda usa a chave KMSKeyArn
para criptografar a versão descompactada do pacote que o Lambda usa para invocar a função. Quando SourceKMSKeyArn
é especificado, mas KMSKeyArn
não é, o Lambda usa uma Chave gerenciada pela AWS para criptografar a versão descompactada do pacote.
- Lambda console
-
Para adicionar criptografia de chave gerenciada pelo cliente ao criar uma função
Abra a página Funções do console do Lambda.
-
Escolha a opção Criar função.
-
Escolha Author from scratch (Criar do zero) ou Container image (Imagem de contêiner).
-
Em Basic information (Informações básicas), faça o seguinte:
-
Em Function name (Nome da função), insira o nome da função.
-
Em Runtime, escolha a versão da linguagem a ser usada para sua função.
-
Expanda Configurações avançadas e selecione Habilitar a criptografia com uma chave do AWS KMS gerenciada pelo cliente.
-
Escolha uma chave gerenciada pelo cliente.
-
Escolha a opção Criar função.
Para remover a criptografia de chave gerenciada pelo cliente ou usar uma chave diferente, você deve carregar o pacote de implantação .zip novamente.
Para adicionar criptografia de chave gerenciada pelo cliente a uma função existente
Abra a página Funções do console do Lambda.
-
Escolha o nome de uma função.
-
No painel do Código-fonte, escolha Carregar de.
-
Escolha o arquivo .zip ou o local do Amazon S3.
-
Faça upload do arquivo ou insira o local do Amazon S3.
-
Escolha Habilitar a criptografia com uma chave do AWS KMS gerenciada pelo cliente.
-
Escolha uma chave gerenciada pelo cliente.
-
Escolha Salvar.
- AWS CLI
-
Para adicionar criptografia de chave gerenciada pelo cliente ao criar uma função
No seguinte exemplo de create-function:
-
--zip-file
: especifica o caminho local para o pacote de implantação .zip.
-
--source-kms-key-arn
: especifica a chave gerenciada pelo cliente para criptografar a versão compactada do pacote de implantação.
-
--kms-key-arn
: especifica a chave gerenciada pelo cliente para criptografar as variáveis de ambiente e a versão descompactada do pacote de implantação.
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
No seguinte exemplo de create-function:
-
--code
: especifica o local do arquivo .zip em um bucket do Amazon S3. Você só precisa usar o parâmetro S3ObjectVersion
para objetos com versionamento.
-
--source-kms-key-arn
: especifica a chave gerenciada pelo cliente para criptografar a versão compactada do pacote de implantação.
-
--kms-key-arn
: especifica a chave gerenciada pelo cliente para criptografar as variáveis de ambiente e a versão descompactada do pacote de implantação.
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
Para adicionar criptografia de chave gerenciada pelo cliente a uma função existente
No seguinte exemplo de update-function-code:
-
--zip-file
: especifica o caminho local para o pacote de implantação .zip.
-
--source-kms-key-arn
: especifica a chave gerenciada pelo cliente para criptografar a versão compactada do pacote de implantação. O Lambda usa uma chave que pertence à AWS para criptografar o pacote descompactado para invocações de funções. Se você quiser usar uma chave gerenciada pelo cliente para criptografar a versão descompactada do pacote, execute o comando update-function-configuration com a opção --kms-key-arn
.
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
No seguinte exemplo de update-function-code:
-
--s3-bucket
: especifica o local do arquivo .zip em um bucket do Amazon S3.
-
--s3-key
: especifica a chave do Amazon S3 do pacote de implantação.
-
--s3-object-version
: para objetos com controle de versão, a versão do objeto do pacote de implantação a ser usada.
-
--source-kms-key-arn
: especifica a chave gerenciada pelo cliente para criptografar a versão compactada do pacote de implantação. O Lambda usa uma chave que pertence à AWS para criptografar o pacote descompactado para invocações de funções. Se você quiser usar uma chave gerenciada pelo cliente para criptografar a versão descompactada do pacote, execute o comando update-function-configuration com a opção --kms-key-arn
.
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
Para remover a criptografia de chave gerenciada pelo cliente de uma função existente
No exemplo de update-function-code a seguir, --zip-file
especifica o caminho local para o pacote de implantação .zip. Quando você executa esse comando sem a opção --source-kms-key-arn
, o Lambda usa uma chave que pertence à AWS para criptografar a versão compactada do pacote de implantação.
aws lambda update-function-code \
--function-name myFunction \
--zip-file
fileb://myFunction.zip