Cifrado de los paquetes de implementación .zip de Lambda - AWS Lambda

Cifrado de los paquetes de implementación .zip de Lambda

Lambda siempre proporciona cifrado en el servidor en reposo para los paquetes de implementación .zip y los detalles de configuración de las funciones con una AWS KMS key. De forma predeterminada, Lambda utiliza una Clave propiedad de AWS. Si este comportamiento predeterminado se ajusta a su flujo de trabajo, no tiene que configurar nada más. AWS no cobra por usar esta clave.

Si lo prefiere, puede proporcionar una clave administrada por el cliente de AWS KMS en su lugar. Puede hacerlo para tener control sobre la rotación de la clave de KMS o para cumplir con los requisitos de su organización para administrar claves de KMS. Cuando usa una clave administrada por el usuario, solo los usuarios de su cuenta con acceso a la clave de KMS pueden ver o administrar el código o la configuración de la función.

Las claves administradas por el cliente ocasionan cargos de AWS KMS estándar. Para más información, consulte Precios de AWS Key Management Service.

Crear una clave administrada por el cliente

Puede crear una clave simétrica administrada por el cliente a través de la AWS Management Console o las API de AWS KMS.

Para crear una clave simétrica administrada por el cliente

Siga los pasos de Creación de cifrado simétrico y creación de claves de KMS simétricas en la Guía para desarrolladores de AWS Key Management Service.

Permisos

Política de claves

Las políticas de clave controlan el acceso a la clave administrada por el cliente. Cada clave administrada por el cliente debe tener exactamente una política de clave, que contiene instrucciones que determinan quién puede usar la clave y cómo puede utilizarla. Para obtener más información, consulte Cómo cambiar una política de claves en la Guía para desarrolladores de AWS Key Management Service.

Cuando se utiliza una clave administrada por el cliente para cifrar un paquete de implementación de .zip, Lambda no agrega ninguna concesión a la clave. En su lugar, su política de claves de AWS KMS debe permitir a Lambda llamar a las siguientes operaciones de la API de AWS KMS en su nombre:

El siguiente ejemplo de política de claves permite que todas las funciones de Lambda de la cuenta 111122223333 llamen a las operaciones de AWS KMS requeridas para la clave administrada por el cliente especificada:

ejemplo Política de claves de 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 obtener información sobre la solución de problemas de acceso a las claves, consulte la Guía para desarrolladores de AWS Key Management Service.

Permisos de entidades principales

Cuando se utiliza una clave administrada por el cliente para cifrar un paquete de implementación .zip, solo las entidades principales con acceso a esa clave pueden acceder al paquete de implementación .zip. Por ejemplo, las entidades principales que no tienen acceso a la clave administrada por el cliente no pueden descargar el paquete .zip mediante la URL de S3 prefirmada que se incluye en la respuesta de GetFunction. Se devuelve una AccessDeniedException en la sección Code de la respuesta.

ejemplo 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 obtener más información sobre los permisos para las claves de AWS KMS, consulte Autenticación y control de acceso para AWS KMS.

Uso de una clave administrada por el cliente para el paquete de implementación .zip

Utilice los siguientes parámetros de la API para configurar las claves administradas por el cliente para los paquetes de implementación .zip:

Cuando SourceKMSKeyArn y KMSKeyArn se especifican, Lambda utiliza la clave KMSKeyArn para cifrar la versión descomprimida del paquete que Lambda usa para invocar la función. Cuando se especifica SourceKMSKeyArn, pero no KMSKeyArn, Lambda utiliza una Clave administrada de AWS para cifrar la versión descomprimida del paquete.

Lambda console
Cómo agregar una clave de cifrado administrada por el cliente al crear una función
  1. Abra la página de Funciones en la consola de Lambda.

  2. Seleccione Creación de función.

  3. Elija Author from scratch (Crear desde cero) o Container image (Imagen de contenedor).

  4. Bajo Basic information (Información básica), haga lo siguiente:

    1. En Nombre de la función, escriba el nombre de la función.

    2. Para Runtime (Tiempo de ejecución), elija la versión del idioma que desea utilizar para su función.

  5. Expanda Configuración avanzada y, a continuación, seleccione Habilitar el cifrado con una clave administrada por el cliente de AWS KMS.

  6. Elija una clave administrada por el cliente.

  7. Seleccione Creación de función.

Para eliminar el cifrado de clave administrada por el cliente o utilizar una clave diferente, debe volver a cargar el paquete de implementación .zip.

Cómo agregar el cifrado de clave administrada por el cliente a una función existente
  1. Abra la página de Funciones en la consola de Lambda.

  2. Elija el nombre de una función.

  3. En el panel Código fuente, elija Cargar desde.

  4. Elija el archivo .zip o la ubicación de Amazon S3.

    Carga del archivo.zip desde el panel de código de origen
  5. Cargue el archivo o introduzca la ubicación de Amazon S3.

  6. Elija Habilitar el cifrado con una clave administrada por el cliente de AWS KMS.

  7. Elija una clave administrada por el cliente.

  8. Seleccione Save (Guardar).

AWS CLI

Cómo agregar una clave de cifrado administrada por el cliente al crear una función

En el siguiente ejemplo de create-function:

  • --zip-file: especifica la ruta local del paquete de implementación .zip.

  • --source-kms-key-arn: especifica la clave administrada por el cliente para cifrar la versión comprimida del paquete de implementación.

  • --kms-key-arn: especifica la clave administrada por el cliente para cifrar las variables de entorno y la versión descomprimida del paquete de implementación.

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

En el siguiente ejemplo de create-function:

  • --code: especifica la ubicación del archivo .zip en un bucket de Amazon S3. Solo necesita utilizar el parámetro S3ObjectVersion para los objetos con versiones.

  • --source-kms-key-arn: especifica la clave administrada por el cliente para cifrar la versión comprimida del paquete de implementación.

  • --kms-key-arn: especifica la clave administrada por el cliente para cifrar las variables de entorno y la versión descomprimida del paquete de implementación.

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

Cómo agregar el cifrado de clave administrada por el cliente a una función existente

En el siguiente ejemplo de update-function-code:

  • --zip-file: especifica la ruta local del paquete de implementación .zip.

  • --source-kms-key-arn: especifica la clave administrada por el cliente para cifrar la versión comprimida del paquete de implementación. Lambda utiliza una clave propiedad de AWS para cifrar el paquete descomprimido durante las invocaciones de la función. Si desea utilizar una clave administrada por el cliente para cifrar la versión descomprimida del paquete, ejecute el comando update-function-configuration con la opción --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

En el siguiente ejemplo de update-function-code:

  • --s3-bucket: especifica la ubicación del archivo .zip en un bucket de Amazon S3.

  • --s3-key: especifica la clave de Amazon S3 del paquete de implementación.

  • --s3-object-version: para objetos con control de versiones, la versión del objeto del paquete de implementación que se va a utilizar.

  • --source-kms-key-arn: especifica la clave administrada por el cliente para cifrar la versión comprimida del paquete de implementación. Lambda utiliza una clave propiedad de AWS para cifrar el paquete descomprimido durante las invocaciones de la función. Si desea utilizar una clave administrada por el cliente para cifrar la versión descomprimida del paquete, ejecute el comando update-function-configuration con la opción --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

Cómo eliminar el cifrado de clave administrada por el cliente de una función existente

En el siguiente ejemplo de update-function-code, --zip-file especifica la ruta local al paquete de implementación .zip. Al ejecutar este comando sin la opción --source-kms-key-arn, Lambda utiliza una clave propia de AWS para cifrar la versión comprimida del paquete de implementación.

aws lambda update-function-code \ --function-name myFunction \ --zip-file fileb://myFunction.zip