

# Usar a assinatura de código para verificar integridade de código com o Lambda
<a name="configuration-codesigning"></a>

A assinatura de código ajuda a garantir que apenas código confiável seja implantado nas funções do Lambda. Usando AWS Signer, você pode criar pacotes de código assinados digitalmente para as funções. Quando você [adiciona uma configuração de assinatura de código a uma função](configuration-codesigning-create.md), o Lambda verifica se todas as novas implantações de código estão assinadas por uma fonte confiável. Como as verificações de validação de assinatura de código são executadas na implantação, elas não afetam a performance da execução da função.

**Importante**  
As configurações de assinatura de código evitam apenas novas implantações de código não assinado. Se você adicionar uma configuração de assinatura de código a uma função existente que tenha código não assinado, esse código continuará em execução até que um novo pacote de código seja implantado.

Quando você habilita a assinatura de código para uma função, todas as [camadas](chapter-layers.md) adicionadas à função também devem ser assinadas por um perfil de assinatura permitido.

Não há custo adicional pelo uso de AWS Signer ou assinatura de código no AWS Lambda.

## Validação de assinatura
<a name="config-codesigning-valid"></a>

O Lambda executa as seguintes verificações de validação ao implantar um pacote de código assinado na sua função:

1. **Integridade**: valida que o pacote de código não foi modificado depois de assinado. O Lambda compara o hash do pacote com o hash da assinatura.

1. **Expiração**: valida que a assinatura do pacote de código não expirou.

1. **Incompatibilidade**: valida que o pacote de código está assinado com um dos perfis de assinatura permitidos

1. **Revogação**: valida que a assinatura do pacote de código não foi revogada.

Ao criar uma configuração de assinatura de código, você pode usar o parâmetro [UntrustedArtifactonDeployment](https://docs.aws.amazon.com/lambda/latest/api/API_CodeSigningPolicies.html#lambda-Type-CodeSigningPolicies-UntrustedArtifactOnDeployment) para especificar como o Lambda deve responder se as verificações de expiração, incompatibilidade ou revogação falharem. Você pode escolher uma destas ações:
+ `Warn`: essa é a configuração padrão. O Lambda permite a implantação do pacote de código, mas emite um aviso. O Lambda emite uma nova métrica do Amazon CloudWatch (`SignatureValidationErrors`) e também armazena o aviso no log do CloudTrail.
+ `Enforce`: o Lambda emite um aviso (o mesmo que para a ação `Warn`) e bloqueia a implantação do pacote de código.

**Topics**
+ [

## Validação de assinatura
](#config-codesigning-valid)
+ [

# Criar configurações de assinatura de código para o Lambda
](configuration-codesigning-create.md)
+ [

# Configurar políticas do IAM para configurações de assinatura de código do Lambda
](config-codesigning-policies.md)
+ [

# Uso de tags nas configurações de assinatura de código
](tags-csc.md)

# Criar configurações de assinatura de código para o Lambda
<a name="configuration-codesigning-create"></a>

Para ativar a assinatura de código para uma função, crie uma *configuração de assinatura de código* e associe-a à função. Uma configuração de assinatura de código define uma lista de perfis de assinatura permitidos e a ação de política a ser executada se alguma das verificações de validação falhar.

**nota**  
Funções definidas como imagens de contêiner não são compatíveis com assinatura de código.

**Topics**
+ [

## Pré-requisitos de configuração
](#config-codesigning-prereqs)
+ [

## Criar configurações de assinatura de código
](#config-codesigning-config-console)
+ [

## Habilitar a assinatura de código para uma função
](#config-codesigning-function-console)

## Pré-requisitos de configuração
<a name="config-codesigning-prereqs"></a>

Antes de configurar a assinatura de código para uma função do Lambda, use o AWS Signer para fazer o seguinte:
+ Crie um ou mais [perfis de assinatura](https://docs.aws.amazon.com/signer/latest/developerguide/signing-profiles.html).
+ Use um perfil de assinatura para [criar um pacote de código assinado para a função](https://docs.aws.amazon.com/signer/latest/developerguide/lambda-workflow.html).

## Criar configurações de assinatura de código
<a name="config-codesigning-config-console"></a>

Uma configuração de assinatura de código define uma lista dos perfis de assinatura permitidos e a política de validação de assinatura.

**Para criar uma configuração de assinatura de código (console)**

1. Abra a página [Code signing configurations](https://console.aws.amazon.com/lambda/home#/code-signing-configurations) (Configurações de assinatura de código) do console do Lambda.

1. Escolha **Criar configuração**.

1. Em **Description (Descrição)**, insira um nome descritivo para a configuração.

1. Em **Signing profiles (Perfis de assinatura)**, adicione até 20 perfis de assinatura à configuração.

   1. Para **Signing profile version ARN (ARN da versão do perfil de assinatura)**, escolha o nome de recurso da Amazon (ARN) de uma versão de perfil ou insira o ARN.

   1. Para adicionar um perfil de assinatura adicional, escolha **Add signing profiles (Adicionar perfis de assinatura)**.

1. Em **Signature validation policy (Política de validação de assinatura)**, escolha **Warn (Avisar)** ou **Enforce (Impor)**.

1. Escolha **Criar configuração**.

## Habilitar a assinatura de código para uma função
<a name="config-codesigning-function-console"></a>

Para habilitar assinatura de código para uma função, adicione a ela uma configuração de assinatura de código.

**Importante**  
As configurações de assinatura de código evitam apenas novas implantações de código não assinado. Se você adicionar uma configuração de assinatura de código a uma função existente que tenha código não assinado, esse código continuará em execução até que um novo pacote de código seja implantado.

**Para associar uma configuração de assinatura de código a uma função (console)**

1. Abra a [página Funções](https://console.aws.amazon.com/lambda/home#/functions) do console do Lambda.

1. Escolha a função para a qual deseja ativar a assinatura de código.

1. Abra a guia **Configuration** (Configuração).

1. Role para baixo e escolha **Assinatura de código**.

1. Escolha **Editar**.

1. Em **Edit code signing (Editar assinatura de código)**, escolha uma configuração de assinatura de código para esta função.

1. Escolha **Salvar**.

# Configurar políticas do IAM para configurações de assinatura de código do Lambda
<a name="config-codesigning-policies"></a>

Para conceder a um usuário permissão para acessar as operações de API de assinatura de código do Lambda, anexe uma ou mais instruções de política à política do usuário. Para obter mais informações sobre políticas de usuário, consulte [Políticas do IAM baseadas em identidade para o Lambda](access-control-identity-based.md).

A instrução da política de exemplo a seguir concede permissão para criar, atualizar e recuperar configurações de assinatura de código.

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

****  

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

------

Os administradores podem usar a chave de condição `CodeSigningConfigArn` para especificar as configurações de assinatura de código que os desenvolvedores devem usar para criar ou atualizar suas funções.

O exemplo de declaração de política a seguir concede permissão para criar uma função. A declaração de política inclui um`lambda:CodeSigningConfigArn`para especificar a configuração de assinatura de código permitida. O Lambda bloqueará as solicitações de API `CreateFunction` se o parâmetro [CodeSigningConfigArn](https://docs.aws.amazon.com/lambda/latest/api/API_CreateFunction.html#lambda-CreateFunction-request-CodeSigningConfigArn) estiver faltando ou não corresponder ao valor da condição.

------
#### [ 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 tags nas configurações de assinatura de código
<a name="tags-csc"></a>

Você pode marcar as configurações de assinatura de código para organizar e gerenciar os recursos. Tags são pares de chave-valor de formato livre associados aos recursos compatíveis com todos os Serviços da AWS. Para obter mais informações sobre casos de uso de tags, consulte [Common tagging strategies](https://docs.aws.amazon.com//tag-editor/latest/userguide/best-practices-and-strats.html#tag-strategies) no *Guia do editor de tags e recursos de marcação da AWS*. 

 Você pode usar a API do AWS Lambda para visualizar e atualizar tags. Você também pode visualizar e atualizar tags enquanto gerencia uma configuração específica de assinatura de código no console do Lambda.

**Topics**
+ [

## Permissões necessárias para trabalhar com tags
](#csc-tags-required-permissions)
+ [

## Uso de tags usando o console do Lambda
](#tags-csc-console)
+ [

## Uso de tags com a AWS CLI
](#tags-csc-cli)

## Permissões necessárias para trabalhar com tags
<a name="csc-tags-required-permissions"></a>

Para permitir que uma identidade do AWS Identity and Access Management (IAM) (usuário, grupo ou perfil) leia ou defina tags em um recurso, conceda a ela as permissões correspondentes:
+ **lambda:ListTags**: quando um recurso tiver tags, conceda essa permissão a qualquer usuário que precise chamar `ListTags` nele. Para funções marcadas, essa permissão também será necessária para `GetFunction`.
+ **lambda:TagResource**: conceda essa permissão a qualquer pessoa que precise chamar `TagResource` ou executar uma tag na criação.

Opcionalmente, considere conceder também a permissão **lambda:UntagResource** para permitir chamadas `UntagResource` ao recurso.

Para obter mais informações, consulte [Políticas do IAM baseadas em identidade para o Lambda](access-control-identity-based.md).

## Uso de tags usando o console do Lambda
<a name="tags-csc-console"></a>

Você pode usar o console do Lambda para criar configurações de assinatura de código que tenham tags, adicionar tags a configurações de assinatura de código existentes e filtrar configurações de assinatura de código por tag.

**Para adicionar uma tag ao criar uma configuração de assinatura de código**

1. Abra [Configurações de assinatura de código](https://console.aws.amazon.com/lambda/home#/code-signing-configurations) no console do Lambda.

1. No cabeçalho do painel de conteúdo, escolha **Criar configuração**.

1. Na seção na parte superior do painel de conteúdo, defina a configuração de assinatura de código. Para obter mais informações sobre como definir as configurações de assinatura de código, consulte [Usar a assinatura de código para verificar integridade de código com o Lambda](configuration-codesigning.md).

1. Na seção **Tags**, escolha **Adicionar nova tag**.

1. No campo **Chave**, insira sua chave de tag. Para obter informações sobre restrições de marcação, consulte [Tag naming limits and requirements](https://docs.aws.amazon.com//tag-editor/latest/userguide/best-practices-and-strats.html#id_tags_naming_best_practices) no *Guia do editor de tags e recursos de marcação da AWS*.

1. Escolha **Criar configuração**.

**Para adicionar uma tag a uma configuração de assinatura de código existente**

1. Abra [Configurações de assinatura de código](https://console.aws.amazon.com/lambda/home#/code-signing-configurations) no console do Lambda.

1. Escolha o nome da configuração de assinatura de código.

1. Nas guias abaixo do painel **Detalhes**, escolha **Tags**.

1. Selecione **Gerenciar tags**.

1. Selecione **Adicionar nova tag**.

1. No campo **Chave**, insira sua chave de tag. Para obter informações sobre restrições de marcação, consulte [Tag naming limits and requirements](https://docs.aws.amazon.com//tag-editor/latest/userguide/best-practices-and-strats.html#id_tags_naming_best_practices) no *Guia do editor de tags e recursos de marcação da AWS*.

1. Escolha **Salvar**.

**Para filtrar as configurações de assinatura de código por tag**

1. Abra [Configurações de assinatura de código](https://console.aws.amazon.com/lambda/home#/code-signing-configurations) no console do Lambda.

1. Escolha a caixa Pesquisar.

1. Na lista suspensa, selecione sua tag abaixo do subtítulo **Tags**.

1. Selecione **Usar: “tag-name”** para ver todas as configurações de assinatura de código marcadas com essa chave, ou escolha um **operador** para filtrar ainda mais por valor.

1. Selecione o valor da tag para filtrar por uma combinação de chave e valor da tag.

A barra de pesquisa também é compatível com a pesquisa de chaves de tag. Insira o nome de uma chave para encontrá-la na lista.

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

Você pode adicionar e remover tags em recursos existentes do Lambda, incluindo configurações de assinatura de código, com a API do Lambda. Você também pode adicionar tags ao criar uma configuração de assinatura de código, o que permite manter um recurso marcado durante todo o ciclo de vida.

### Atualização de tags usando as APIs de tag do Lambda
<a name="tags-csc-api-config"></a>

Você pode adicionar e remover tags dos recursos compatíveis do Lambda por meio das operações da API [TagResource](https://docs.aws.amazon.com/lambda/latest/api/API_TagResource.html) e [UntagResource](https://docs.aws.amazon.com/lambda/latest/api/API_UntagResource.html).

Você também pode chamar essas operações usando a AWS CLI. Para adicionar tags a um recurso existente, use o comando `tag-resource`. Este exemplo adiciona duas tags, uma com a chave *Department* e outra com a chave *CostCenter*.

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

Para remover tags, use o comando `untag-resource`. Este exemplo remove a tag com a chave *Department*.

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

### Adição de tags ao criar uma configuração de assinatura de código
<a name="tags-csc-on-create"></a>

Para criar uma nova configuração de assinatura de código do Lambda com tags, use a operação da API [CreateCodeSigningConfig](https://docs.aws.amazon.com//lambda/latest/api/API_CreateCodeSigningConfig.html). Especifique o parâmetro `Tags`. Você pode chamar essa operação com o comando `create-code-signing-config` da AWS CLI e a opção `--tags`. Para obter mais informações sobre o comando da CLI, consulte [create-code-signing-config](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/create-code-signing-config.html) na *referência de comandos da AWS CLI*.

Antes de usar o parâmetro `Tags` com `CreateCodeSigningConfig`, certifique-se de que seu perfil tenha permissão para marcar recursos junto com as permissões usuais necessárias para essa operação. Para obter mais informações sobre permissões para marcação, consulte [Permissões necessárias para trabalhar com tags](#csc-tags-required-permissions).

### Visualização de tags usando as APIs de tag do Lambda
<a name="tags-csc-api-view"></a>

Para visualizar as tags que são aplicadas à um recurso específico do Lambda, use a operação da API `ListTags`. Para obter mais informações, consulte [ListTags](https://docs.aws.amazon.com/lambda/latest/api/API_ListTags.html).

Você pode chamar essa operação com o comando `list-tags` da AWS CLI fornecendo um ARN (nome do recurso da Amazon).

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

### Filtragem de recursos por tag
<a name="tags-csc-filtering"></a>

Você pode usar a operação de API [GetResources](https://docs.aws.amazon.com/resourcegroupstagging/latest/APIReference/API_GetResources.html) do AWS Resource Groups Tagging API para filtrar seus recursos por etiquetas. A operação `GetResources` aceita até 10 filtros, cada um contendo uma chave de etiquetas e até 10 valores de etiquetas. Você fornece a `GetResources` um `ResourceType` para filtrar por tipos de recursos específicos.

Você pode chamar essa operação usando o comando `get-resources` da AWS CLI. Para ver exemplos de uso de `get-resources`, consulte [get-resources](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/resourcegroupstaggingapi/get-resources.html#examples) na *referência de comandos da AWS CLI*. 