

# Uso de la firma de código para verificar la integridad del código con Lambda
<a name="configuration-codesigning"></a>

La firma de código ayuda a garantizar que solo se implemente código de confianza en sus funciones de Lambda. Con AWS Signer, puede crear paquetes de códigos firmados digitalmente para sus funciones. Al [añadir una configuración de firma de código a una función](configuration-codesigning-create.md), Lambda comprueba que todas las nuevas implementaciones de código estén firmadas por una fuente de confianza. Dado que las comprobaciones de validación de firma de código se ejecutan en tiempo de implementación, no hay impacto en la ejecución de funciones.

**importante**  
Las configuraciones de firma de código solo impiden nuevas implementaciones de código sin firmar. Si agrega una configuración de firma de código a una función existente que tiene código sin firmar, ese código seguirá ejecutándose hasta que implemente un nuevo paquete de códigos.

Cuando habilita la firma de código para una función, todas las [capas](chapter-layers.md) que se agregan a la función también deben estar firmadas por uno de los perfiles de firma permitidos.

No hay ningún cargo adicional por usar AWS Signer o la firma de código para AWS Lambda.

## Validación de firmas
<a name="config-codesigning-valid"></a>

Lambda realiza las siguientes comprobaciones de validación cuando implementa un paquete de código firmado en su función:

1. **Integridad**: valida que el paquete de código no se ha modificado desde que se firmó. Lambda compara el hash del paquete con el hash de la firma.

1. **Caducidad**: valida que la firma del paquete de código no ha caducado.

1. **Discrepancia**: valida que el paquete de código está firmado con uno de los perfiles de firma permitidos.

1. **Revocación**: valida que la firma del paquete de código no se ha revocado.

Al crear una configuración de firma de código, puede usar el parámetro [UntrustedArtifactOnDeployment](https://docs.aws.amazon.com/lambda/latest/api/API_CodeSigningPolicies.html#lambda-Type-CodeSigningPolicies-UntrustedArtifactOnDeployment) para especificar cómo debe responder Lambda en caso de que las comprobaciones de caducidad, discrepancias o revocación fallen. Puede elegir uno de estas acciones:
+ `Warn`: esta es la configuración predeterminada. Lambda permite la implementación del paquete de código, pero emite una advertencia. Lambda emite una nueva métrica de Amazon CloudWatch (`SignatureValidationErrors`) y también almacena la advertencia en el registro de CloudTrail.
+ `Enforce`: Lambda emite una advertencia (lo mismo que para la acción `Warn`) y bloquea la implementación del paquete de código.

**Topics**
+ [

## Validación de firmas
](#config-codesigning-valid)
+ [

# Creación de configuraciones de firma de código para Lambda
](configuration-codesigning-create.md)
+ [

# Configuración de las políticas de IAM para configuraciones de firma de código de Lambda
](config-codesigning-policies.md)
+ [

# Uso de etiquetas en configuraciones de firma de código
](tags-csc.md)

# Creación de configuraciones de firma de código para Lambda
<a name="configuration-codesigning-create"></a>

Para habilitar la firma de código para una función, debe crear una *configuración de firma de código* y adjuntarla a la función. Una configuración de firma de código define una lista de perfiles de firma permitidos y la acción de directiva que se debe realizar si falla alguna de las comprobaciones de validación.

**nota**  
Las funciones definidas como imágenes de contenedor no admiten la firma de código.

**Topics**
+ [

## Requisitos previos de configuración
](#config-codesigning-prereqs)
+ [

## Creación de configuraciones de firma de código
](#config-codesigning-config-console)
+ [

## Habilitar la firma de código para una función
](#config-codesigning-function-console)

## Requisitos previos de configuración
<a name="config-codesigning-prereqs"></a>

Antes de configurar la firma de código para una función de Lambda, utilice AWS Signer para hacer lo siguiente:
+ Cree uno o varios [perfiles de firma](https://docs.aws.amazon.com/signer/latest/developerguide/signing-profiles.html).
+ Utilice un perfil de firma para [crear un paquete de código firmado para su función](https://docs.aws.amazon.com/signer/latest/developerguide/lambda-workflow.html).

## Creación de configuraciones de firma de código
<a name="config-codesigning-config-console"></a>

Una configuración de firma de código define una lista de perfiles de firma permitidos y la directiva de validación de firmas.

**Para crear una configuración de firma de código (consola)**

1. Abra la página [Configuraciones de firma de código](https://console.aws.amazon.com/lambda/home#/code-signing-configurations) de la consola de Lambda.

1. Seleccione **Crear configuración**.

1. En **Descripción**, introduzca un nombre descriptivo para la configuración.

1. En **Perfiles de firma**, agregue hasta 20 perfiles de firma a la configuración.

   1. Para **Firmar versión de perfil ARN**, elija el Nombre de recurso de Amazon (ARN) de una versión de perfil o introduzca el ARN.

   1. Para agregar un perfil de firma adicional, elija **Agregar perfiles de firma**.

1. En **Política de validación de firmas**, seleccione **Advertir** o **Aplicar**.

1. Seleccione **Crear configuración**.

## Habilitar la firma de código para una función
<a name="config-codesigning-function-console"></a>

Para habilitar la firma de código para una función, agregue una configuración de firma de código con la función.

**importante**  
Las configuraciones de firma de código solo impiden nuevas implementaciones de código sin firmar. Si agrega una configuración de firma de código a una función existente que tiene código sin firmar, ese código seguirá ejecutándose hasta que implemente un nuevo paquete de códigos.

**Para asociar una configuración de firma de código con una función (consola)**

1. Abra la página de [Funciones](https://console.aws.amazon.com/lambda/home#/functions) en la consola de Lambda.

1. Elija la función para la que desea habilitar la firma de código.

1. Haga clic en la pestaña **Configuration** (Configuración).

1. Desplácese hacia abajo y seleccione **Firma de código**.

1. Elija **Edit (Edición de)**.

1. En **Editar firma de código**, elija una configuración de firma de código para esta función.

1. Seleccione **Save**.

# Configuración de las políticas de IAM para configuraciones de firma de código de Lambda
<a name="config-codesigning-policies"></a>

Para conceder permiso a un usuario para acceder a las operaciones de la API de firma de código de Lambda, adjunte una o varias instrucciones de política a la política de usuario. Para obtener más información sobre las políticas de usuario, consulte [Políticas de IAM basadas en identidad para Lambda](access-control-identity-based.md).

En la siguiente declaración de directiva de ejemplo se concede permiso para crear, actualizar y recuperar configuraciones de firma de código.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
          "lambda:CreateCodeSigningConfig",
          "lambda:UpdateCodeSigningConfig",
          "lambda:GetCodeSigningConfig"
        ],
      "Resource": "*" 
    }
  ]
}
```

------

Los administradores pueden usar la clave de `CodeSigningConfigArn` condición para especificar las configuraciones de firma de código que los desarrolladores deben utilizar para crear o actualizar sus funciones.

En la siguiente declaración de política de ejemplo se concede permiso para crear una función. La declaración de política incluye una condición `lambda:CodeSigningConfigArn` para especificar la configuración de firma de código permitida. Lambda bloquea las solicitudes a la API `CreateFunction` si el parámetro [CodeSigningConfigArn](https://docs.aws.amazon.com/lambda/latest/api/API_CreateFunction.html#lambda-CreateFunction-request-CodeSigningConfigArn) no está o no coincide con el valor de la condición.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "AllowReferencingCodeSigningConfig",
      "Effect": "Allow",
      "Action": [
        "lambda:CreateFunction"
      ],
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "lambda:CodeSigningConfigArn": "arn:aws:lambda:us-east-1:111122223333:code-signing-config:csc-0d4518bd353a0a7c6"
        }
      }
    }
  ]
}
```

------

# Uso de etiquetas en configuraciones de firma de código
<a name="tags-csc"></a>

Puede etiquetar configuraciones de firma de código para organizar y administrar sus recursos. Las etiquetas son pares de clave-valor de formato libre que se asocian a los recursos y que son compatibles con todos los Servicios de AWS. Para obtener más información sobre los casos de uso de las etiquetas, consulte [Estrategias de etiquetado habituales](https://docs.aws.amazon.com//tag-editor/latest/userguide/best-practices-and-strats.html#tag-strategies) en la *Guía del editor de etiquetas y recursos de etiquetado de AWS*. 

 Puede utilizar la API de AWS Lambda para ver y actualizar etiquetas. También puede ver y actualizar las etiquetas mientras administra una configuración de firma de código específica en la consola de Lambda.

**Topics**
+ [

## Permisos necesarios para trabajar con etiquetas
](#csc-tags-required-permissions)
+ [

## Uso de etiquetas con la consola de Lambda
](#tags-csc-console)
+ [

## Uso de etiquetas con la AWS CLI
](#tags-csc-cli)

## Permisos necesarios para trabajar con etiquetas
<a name="csc-tags-required-permissions"></a>

Para permitir que una identidad de AWS Identity and Access Management (IAM) (usuario, grupo o rol) lea o establezca etiquetas en un recurso, conceda los permisos correspondientes:
+ **lambda:ListTags**: cuando un recurso tiene etiquetas, conceda este permiso a cualquier persona que necesite llamar a `ListTags` en este. En el caso de las funciones etiquetadas, este permiso también es necesario para `GetFunction`.
+ **lambda:TagResource**: conceda este permiso a cualquier persona que necesite llamar a `TagResource` o efectuar una etiqueta en la creación.

Si lo desea, considere conceder el permiso **lambda:UntagResource** y permitir las llamadas `UntagResource` al recurso.

Para obtener más información, consulte [Políticas de IAM basadas en identidad para Lambda](access-control-identity-based.md).

## Uso de etiquetas con la consola de Lambda
<a name="tags-csc-console"></a>

Puede utilizar la consola de Lambda para crear configuraciones de firma de código que tengan etiquetas, agregar etiquetas a configuraciones de firma de código existentes y filtrar configuraciones de firma de código por etiqueta.

**Adición de una etiqueta al crear una configuración de firma de código**

1. Abra [Configuraciones de la firma de código](https://console.aws.amazon.com/lambda/home#/code-signing-configurations) en la consola de Lambda.

1. En el encabezado del panel de contenido, seleccione **Crear la configuración**.

1. En la sección de la parte superior del panel de contenido, defina la configuración de firma de código. Para obtener más información sobre cómo definir las configuraciones de firma de código, consulte [Uso de la firma de código para verificar la integridad del código con Lambda](configuration-codesigning.md).

1. En la sección **Etiquetas**, elija **Agregar nueva etiqueta**.

1. En el campo **Clave**, ingrese la clave de la etiqueta. Para obtener información sobre las restricciones de etiquetado, consulte [Límites y requisitos de denominación de etiquetas](https://docs.aws.amazon.com//tag-editor/latest/userguide/best-practices-and-strats.html#id_tags_naming_best_practices) en la *Guía del editor de etiquetas y recursos de etiquetado de AWS*.

1. Seleccione **Crear configuración**.

**Adición de una etiqueta a una configuración de firma de código existente**

1. Abra [Configuraciones de la firma de código](https://console.aws.amazon.com/lambda/home#/code-signing-configurations) en la consola de Lambda.

1. Elija el nombre de la configuración de firma de código.

1. En las pestañas situadas debajo del panel **Detalle**, seleccione **Etiquetas**.

1. Elija **Manage tags** (Administrar etiquetas).

1. Elija **Add new tag** (Agregar nueva etiqueta).

1. En el campo **Clave**, ingrese la clave de la etiqueta. Para obtener información sobre las restricciones de etiquetado, consulte [Límites y requisitos de denominación de etiquetas](https://docs.aws.amazon.com//tag-editor/latest/userguide/best-practices-and-strats.html#id_tags_naming_best_practices) en la *Guía del editor de etiquetas y recursos de etiquetado de AWS*.

1. Seleccione **Save**.

**Filtrado de las configuraciones de firma de código por etiqueta**

1. Abra [Configuraciones de la firma de código](https://console.aws.amazon.com/lambda/home#/code-signing-configurations) en la consola de Lambda.

1. Seleccione la barra de búsqueda.

1. En la lista desplegable, seleccione la etiqueta situada debajo del subtítulo **Etiquetas**.

1. Seleccione **Usar: "nombre-etiqueta"** para ver todas las configuraciones de firma de código etiquetadas con esta clave o elija un **operador** para filtrar aún más por valor.

1. Seleccione el valor de la etiqueta para filtrarla por una combinación de clave y valor de la etiqueta.

El cuadro de búsqueda también permite buscar claves de etiqueta. Escriba el nombre de una clave para encontrarla en la lista.

## Uso de etiquetas con la AWS CLI
<a name="tags-csc-cli"></a>

Puede agregar y eliminar etiquetas en los recursos de Lambda existentes, incluidas las configuraciones de firma de código, con la API de Lambda. También puede agregar etiquetas al crear una configuración de firma de código, lo que le permite mantener un recurso etiquetado durante todo su ciclo de vida.

### Actualización de etiquetas con las API de etiquetas de Lambda
<a name="tags-csc-api-config"></a>

Puede agregar y eliminar etiquetas para los recursos de Lambda compatibles mediante las operaciones de API [TagResource](https://docs.aws.amazon.com/lambda/latest/api/API_TagResource.html) y [UntagResource](https://docs.aws.amazon.com/lambda/latest/api/API_UntagResource.html).

También puede llamar a estas operaciones mediante la AWS CLI. Para agregar etiquetas a un recurso existente, utilice el comando `tag-resource`. En este ejemplo se agregan dos etiquetas, una con la clave *Department* y otra con la clave *CostCenter*.

```
aws lambda tag-resource \
--resource arn:aws:lambda:us-east-2:123456789012:resource-type:my-resource \
--tags Department=Marketing,CostCenter=1234ABCD
```

Para eliminar etiquetas, utilice el comando `untag-resource`. En este ejemplo, se elimina la etiqueta con la clave *Department*.

```
aws lambda untag-resource --resource arn:aws:lambda:us-east-1:123456789012:resource-type:resource-identifier \
--tag-keys Department
```

### Adición de etiquetas al crear una configuración de firma de código
<a name="tags-csc-on-create"></a>

Para crear una nueva configuración de firma de código de Lambda con etiquetas, utilice la operación de la API [CreateCodeSigningConfig](https://docs.aws.amazon.com//lambda/latest/api/API_CreateCodeSigningConfig.html). Especifique el parámetro `Tags`. Puede llamar a esta operación con el comando `create-code-signing-config` de la AWS CLI y la opción `--tags`. Para obtener más información sobre el comando de la CLI, consulte [create-code-signing-config](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/create-code-signing-config.html) en la *Referencia de comandos de la AWS CLI*.

Antes de usar el parámetro `Tags` con `CreateCodeSigningConfig`, asegúrese de que su rol tenga permiso para etiquetar los recursos junto con los permisos habituales necesarios para esta operación. Para obtener más información sobre permisos de etiquetado, consulte [Permisos necesarios para trabajar con etiquetas](#csc-tags-required-permissions).

### Visualización de etiquetas con las API de etiquetas de Lambda
<a name="tags-csc-api-view"></a>

Para ver las etiquetas que se aplican a un recurso de Lambda específico, utilice la operación de la API `ListTags`. Para obtener más información, consulte [ListTags](https://docs.aws.amazon.com/lambda/latest/api/API_ListTags.html).

Puede llamar a esta operación con el comando `list-tags` de la AWS CLI si proporciona un ARN (nombre de recurso de Amazon).

```
aws lambda list-tags --resource arn:aws:lambda:us-east-1:123456789012:resource-type:resource-identifier
```

### Filtrado de recursos por etiqueta
<a name="tags-csc-filtering"></a>

Puede utilizar la operación de la API de AWS Resource Groups Tagging API [GetResources](https://docs.aws.amazon.com/resourcegroupstagging/latest/APIReference/API_GetResources.html) para filtrar los recursos por etiquetas. La operación `GetResources` recibe hasta 10 filtros y cada uno contiene una clave de etiqueta y hasta 10 valores de etiqueta. Usted proporciona `GetResources` con un `ResourceType` para filtrar por tipos de recurso específicos.

Puede llamar a esta operación mediante el comando `get-resources` de la AWS CLI. Para ver ejemplos de uso de `get-resources`, consulte [get-resources](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/resourcegroupstaggingapi/get-resources.html#examples) en la *Referencia de comandos de la AWS CLI*. 