

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Função de alternância do Lambda
<a name="rotate-secrets_lambda-functions"></a>

Em[Função do Lambda de alternância](rotate-secrets_lambda.md), uma AWS Lambda função gira o segredo. AWS Secrets Manager usa [rótulos de teste](whats-in-a-secret.md) para identificar versões secretas durante a rotação.

Se AWS Secrets Manager não fornecer um [modelo de função de rotação](reference_available-rotation-templates.md) para seu tipo de segredo, você pode criar uma função de rotação personalizada. Siga estas diretrizes ao escrever sua função de alternância:

**Práticas recomendadas para funções de alternância personalizadas**
+ Use o [modelo de alternância genérico](reference_available-rotation-templates.md#OTHER_rotation_templates) como ponto de partida.
+ Tenha cuidado com as instruções de depuração ou registro em log. Eles podem gravar informações no Amazon CloudWatch Logs. Certifique-se de que os logs não contenham informações confidenciais.

  Para exemplos de instruções de log, consulte o código-fonte dos [AWS Secrets Manager modelos de função de rotação](reference_available-rotation-templates.md).
+ Por segurança, permite AWS Secrets Manager apenas que uma função de rotação Lambda gire o segredo diretamente. A função de alternância não pode chamar uma outra função do Lambda para alternar o segredo.
+ Para orientações sobre depuração, consulte [Teste e depuração de aplicações com tecnologia sem servidor](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-test-and-debug.html).
+ Se você usar binários e bibliotecas externas, por exemplo, para se conectar a um recurso, será responsável pela aplicação de patches e atualizações.
+ Package sua função de rotação e quaisquer dependências em um arquivo ZIP, como*my-function.zip*.

**Atenção**  
Definir o parâmetro de simultaneidade provisionado como um valor menor que 10 pode causar limitação devido à insuficiência de threads de execução para a função do Lambda. Para obter mais informações, consulte [Noções básicas sobre simultaneidade reservada e simultaneidade provisionada](https://docs.aws.amazon.com/lambda/latest/dg/lambda-concurrency.html#reserved-and-provisioned) no Guia do desenvolvedor do AWS Lambda AWS Lambda .

## Quatro etapas em uma função de alternância
<a name="rotate-secrets_lambda-functions-code"></a>

**Topics**
+ [`createSecret`: criar uma nova versão do segredo](#w2aac21c11c29c11b5)
+ [**setSecret**: alterar as credenciais no banco de dados ou serviço](#w2aac21c11c29c11b7)
+ [**testSecret**: testar a nova versão do segredo](#w2aac21c11c29c11b9)
+ [**finishSecret**: concluir a alternância](#w2aac21c11c29c11c11)

### `createSecret`: criar uma nova versão do segredo
<a name="w2aac21c11c29c11b5"></a>

O método `createSecret` primeiro verifica se existe um segredo chamando [https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/secretsmanager.html#SecretsManager.Client.get_secret_value](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/secretsmanager.html#SecretsManager.Client.get_secret_value) com o `ClientRequestToken` aprovado. Se não houver segredo, ele cria um novo segredo com [https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/secretsmanager.html#SecretsManager.Client.create_secret](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/secretsmanager.html#SecretsManager.Client.create_secret) e o token como `VersionId`. Em seguida, ele gera um novo valor de segredo com [https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/secretsmanager.html#SecretsManager.Client.get_random_password](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/secretsmanager.html#SecretsManager.Client.get_random_password). Depois ele chama [https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/secretsmanager.html#SecretsManager.Client.put_secret_value](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/secretsmanager.html#SecretsManager.Client.put_secret_value) para armazená-lo com o rótulo de preparação `AWSPENDING`. Armazenar o novo valor do segredo em `AWSPENDING` ajuda a garantir a idempotência. Se a alternância falhar por qualquer motivo, será possível consultar esse valor de segredo em chamadas subsequentes. Consulte [Como torno minha função do Lambda idempotente?](https://aws.amazon.com/premiumsupport/knowledge-center/lambda-function-idempotent/).

**Dicas para escrever sua própria função de alternância**
+ Certifique-se de que o novo valor do segredo inclua apenas caracteres válidos para o banco de dados ou serviço. Exclua caracteres usando o parâmetro `ExcludeCharacters`. 
+ Ao testar sua função, use o AWS CLI para ver os estágios da versão: chame [https://docs.aws.amazon.com/cli/latest/reference/secretsmanager/describe-secret.html](https://docs.aws.amazon.com/cli/latest/reference/secretsmanager/describe-secret.html)e examine`VersionIdsToStages`.
+ Para o Amazon RDS MySQL, o Secrets Manager cria um usuário clonado com um nome de no máximo 16 caracteres no rodízio de usuários em alternância. É possível modificar a função de rodízio para permitir nomes de usuário mais longos. A versão 5.7 e superior do MySQL é compatível com nomes de usuário de até 32 caracteres. No entanto, o Secrets Manager acrescenta “\$1clone” (seis caracteres) ao final do nome de usuário, portanto, é necessário manter o nome de usuário com no máximo 26 caracteres.

### **setSecret**: alterar as credenciais no banco de dados ou serviço
<a name="w2aac21c11c29c11b7"></a>

O método `setSecret` altera a credencial no banco de dados ou serviço para corresponder ao novo valor do segredo na versão `AWSPENDING` do segredo. 

**Dicas para escrever sua própria função de alternância**
+ Se você transmitir instruções para um serviço que interprete instruções, como um banco de dados, use a parametrização de consulta. Para obter mais informações, consulte a [Folha de dicas de parametrização de consultas](https://cheatsheetseries.owasp.org/cheatsheets/Query_Parameterization_Cheat_Sheet.html) no *site da OWASP*.
+ A função de alternância é um representante privilegiado que tem autorização para acessar e modificar as credenciais do cliente no segredo do Secrets Manager e no recurso de destino. Para evitar um possível [ataque “confused deputy”](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html), você precisa garantir que um invasor não possa usar a função para acessar outros recursos. Antes de atualizar a credencial:
  + Verifique se a credencial na versão `AWSCURRENT` do segredo é válida. Se a credencial `AWSCURRENT` não for válida, abandone a tentativa de alternância.
  + Verifique se os valores dos segredos `AWSCURRENT` e `AWSPENDING` são para o mesmo recurso. Para obter um nome de usuário e uma senha, verifique se os nomes de usuário `AWSCURRENT` e `AWSPENDING` são os mesmos. 
  + Verifique se o recurso do serviço de destino é o mesmo. Para um banco de dados, verifique se os nomes de host `AWSCURRENT` e `AWSPENDING` são os mesmos.
+ Em casos raros, talvez você queira personalizar a função de alternância existente para um banco de dados. Por exemplo, com o rodízio de usuários em alternância, o Secrets Manager cria o usuário clonado copiando os [parâmetros de configuração de runtime](https://www.postgresql.org/docs/8.0/runtime-config.html) do primeiro usuário. Se você quiser incluir mais atributos ou alterar quais são concedidos ao usuário clonado, é necessário atualizar o código na função `set_secret`. 

### **testSecret**: testar a nova versão do segredo
<a name="w2aac21c11c29c11b9"></a>

Em seguida, a função de alternância do Lambda testará a versão `AWSPENDING` do segredo usando-a para acessar o banco de dados ou serviço. As funções de alternância baseadas em [Modelos de função de alternância](reference_available-rotation-templates.md) testam o novo segredo usando o acesso de leitura. 

### **finishSecret**: concluir a alternância
<a name="w2aac21c11c29c11c11"></a>

Por fim, a função de alternância do Lambda move o rótulo `AWSCURRENT` da versão anterior do segredo para a atual, o que também remove o rótulo `AWSPENDING` na mesma chamada de API. O Secrets Manager adiciona o rótulo de preparação prévia `AWSPREVIOUS` na versão anterior, para que você retenha a última versão boa conhecida do segredo. 

O método **finish\$1secret** usa [https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/secretsmanager.html#SecretsManager.Client.update_secret_version_stage](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/secretsmanager.html#SecretsManager.Client.update_secret_version_stage) para mover o rótulo de preparação `AWSCURRENT` da versão do segredo anterior para a nova versão do segredo. O Secrets Manager adiciona automaticamente o rótulo de preparação `AWSPREVIOUS` à versão anterior para reter a última versão válida do segredo. 

**Dicas para escrever sua própria função de alternância**
+ Não remova `AWSPENDING` antes desse ponto, e não remova-o por meio de uma chamada de API distinta. Isso pode indicar ao Secrets Manager que a alternância não foi concluída com êxito. O Secrets Manager adiciona o rótulo de preparação prévia `AWSPREVIOUS` na versão anterior, para que você retenha a última versão boa conhecida do segredo. 

Quando a alternância for bem-sucedida, talvez o rótulo de preparação de `AWSPENDING` seja anexado à mesma versão da versão `AWSCURRENT` ou talvez não seja anexado a nenhuma versão. Se o rótulo de preparação de `AWSPENDING` estiver presente, mas não estiver anexado à mesma versão de `AWSCURRENT`, qualquer invocação posterior de alternância vai pressupor que uma solicitação de alternância anterior ainda está em andamento e retornará um erro. Quando a alternância não for bem-sucedida, o rótulo de preparação de `AWSPENDING` poderá ser anexado a uma versão vazia de segredo. Para obter mais informações, consulte [Solucionar problemas de alternância](troubleshoot_rotation.md).