

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á.

# Solucionar problemas de rotação AWS Secrets Manager
<a name="troubleshoot_rotation"></a>

Em muitos serviços, o Secrets Manager usa uma função do Lambda para alternar segredos. Para obter mais informações, consulte [Função do Lambda de alternância](rotate-secrets_lambda.md). A função de alternância do Lambda interage com o banco de dados ou serviço para o qual o segredo se destina, bem como o Secrets Manager. Quando a rotação não funciona da maneira esperada, você deve primeiro verificar os CloudWatch registros.

**nota**  
Alguns serviços podem gerenciar segredos para você, incluindo o gerenciamento da alternância automática. Para obter mais informações, consulte [Rotação gerenciada para AWS Secrets Manager segredos](rotate-secrets_managed.md).

**Topics**
+ [Como solucionar falhas de rotação secreta em funções AWS Lambda](#troubleshooting-secret-rotation-failures)
+ [Nenhuma atividade após “Found credentials in environment variables” (Credenciais encontradas em variáveis de ambiente)](#troubleshoot_rotation_timing-out)
+ [Nenhuma atividade após “createSecret”](#troubleshoot_rotation_createSecret)
+ [Erro: “O acesso ao KMS não é permitido”](#troubleshoot_rotation_kms-key)
+ [Erro: “Key is missing from secret JSON” (A chave do segredo JSON está ausente)](#tshoot-lambda-mismatched-secretvalue)
+ [Erro: “setSecret: Unable to log into database” (setSecret: não é possível fazer login no banco de dados)](#troubleshoot_rotation_setSecret)
+ [Erro: “Não é possível importar o módulo ‘lambda\$1function’"](#tshoot-python-version)
+ [Atualize uma função de alternância existente do Python 3.7 para 3.9](#troubleshoot_rotation_python39)
+ [Atualize uma função de alternância existente de Python 3.9 para 3.10](#troubleshoot_rotation_python_310)
+ [AWS Lambda rotação secreta com `PutSecretValue` falha](#troubleshoot_rotation_putsecretvalue)
+ [Erro: “Erro ao executar lambda *<arn>* durante a *<a rotation>* etapa”](#concurrency-related-failures)

## Como solucionar falhas de rotação secreta em funções AWS Lambda
<a name="troubleshooting-secret-rotation-failures"></a>

Se estiver enfrentando falhas de alternância de segredo nas funções do Lambda, use as etapas a seguir para solucionar o problema.

### Possíveis causas
<a name="possible-causes"></a>
+ Execuções simultâneas insuficientes para a função do Lambda
+ Condições de corrida devido a várias chamadas de API durante a alternância
+ Lógica incorreta da função do Lambda
+ Problemas de rede entre a função do Lambda e o banco de dados

### Etapas gerais de solução de problemas
<a name="general-troubleshooting-steps"></a>

1. Analise CloudWatch os registros:
   + Procure por mensagens de erro específicas ou comportamentos inesperados nos logs das funções do Lambda
   + Verifique se todas as etapas de alternância (**CreateSecret**, **SetSecret**, **TestSecret**, **FinishSecret**) estão sendo tentadas

1. Analise as chamadas de API durante a alternância:
   + Evite fazer chamadas de API mutantes no segredo durante a alternância do Lambda
   + Certifique-se de que não haja condições de corrida entre as chamadas **RotateSecret** e **PutSecretValue**

1. Verifique a lógica da função do Lambda:
   + Confirme se você está usando o código de AWS amostra mais recente para rotação secreta
   + Se estiver usando código personalizado, revise-o para verificar o tratamento adequado de todas as etapas da alternância

1. Verifique a configuração da rede:
   + Verifique se as regras do grupo de segurança permitem que a função do Lambda acesse o banco de dados
   + Garanta o acesso adequado ao endpoint da VPC ou ao endpoint público para o Secrets Manager

1. Teste as versões do segredo:
   + Verifique se a AWSCURRENT versão do segredo permite acesso ao banco de dados
   + Verifique se AWSPREVIOUS nossas AWSPENDING versões são válidas

1. Limpe as alternâncias pendentes:
   + Se a rotação falhar consistentemente, limpe a etiqueta AWSPENDING de preparação e tente novamente a rotação

1. Verifique as configurações de simultaneidade do Lambda:
   + Verifique se as configurações de simultaneidade são apropriadas para sua workload
   + Se você suspeitar de problemas de simultaneidade, consulte a seção “Solução de falhas de alternância relacionadas à simultaneidade”

## Nenhuma atividade após “Found credentials in environment variables” (Credenciais encontradas em variáveis de ambiente)
<a name="troubleshoot_rotation_timing-out"></a>

Se não houver atividade após "Credenciais encontradas em variáveis de ambiente" e a duração da tarefa for longa, por exemplo, o tempo limite padrão do Lambda de 30 mil milissegundos, a função do Lambda pode estar expirando ao tentar alcançar o endpoint do Secrets Manager.

A função de alternância do Lambda deve ser capaz de acessar um endpoint do Secrets Manager. Se sua função do Lambda puder acessar a Internet, é possível usar um endpoint público. Para localizar um endpoint, consulte [AWS Secrets Manager endpoints](asm_access.md#endpoints).

Se a função do Lambda for executada em uma VPC que não tem acesso à Internet, recomendamos que você configure endpoints privados de serviço do Secrets Manager dentro de sua VPC. Assim, sua VPC pode interceptar solicitações endereçadas ao endpoint regional público e redirecioná-las para o endpoint privado. Para obter mais informações, consulte [Endpoints da VPC (AWS PrivateLink)](vpc-endpoint-overview.md).

Como alternativa, é possível habilitar a função do Lambda para acessar um endpoint público do Secrets Manager adicionando um [gateway NAT](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html) ou um [gateway da Internet](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Internet_Gateway.html) à VPC, o que permite que o tráfego da VPC alcance o endpoint público. Isso expõe a VPC a um risco maior, pois um endereço IP do gateway pode ser atacado a partir da Internet pública.

## Nenhuma atividade após “createSecret”
<a name="troubleshoot_rotation_createSecret"></a>

A seguir, estão os problemas que podem fazer com que a alternância pare após createSecret:

**A rede VPC ACLs não permite entrada e saída de tráfego HTTPS.**  
Para obter mais informações, consulte [Controle o tráfego para sub-redes usando a rede ACLs no Guia](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-network-acls.html) do usuário da Amazon *VPC*.

**A configuração de tempo limite da função do Lambda é muito curta para executar a tarefa. **  
Para obter mais informações, consulte [Configurar as opções da função do Lambda](https://docs.aws.amazon.com/lambda/latest/dg/configuration-function-common.html) no *Guia do desenvolvedor do AWS Lambda *.

**O endpoint VPC do Secrets Manager não permite que a VPC entre CIDRs nos grupos de segurança atribuídos. **  
Para obter mais informações, consulte [Controle o tráfego para recursos usando grupos de segurança](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html) no *Guia do usuário da Amazon VPC*.

**A política de endpoint da VPC do Secrets Manager não permite que o Lambda use o endpoint da VPC. **  
Para obter mais informações, consulte [Usando um AWS Secrets Manager VPC endpoint](vpc-endpoint-overview.md).

**O segredo usa a alternância de usuários alternados, o segredo do superusuário é gerenciado pelo Amazon RDS e a função do Lambda não pode acessar a API do RDS.**  
Para [rodízio de usuários em alternância](rotation-strategy.md#rotating-secrets-two-users) em que o segredo do superusuário é [gerenciado por outro produto da AWS](service-linked-secrets.md), a função de rodízio do Lambda deve ser capaz de chamar o endpoint do serviço para obter as informações de conexão do banco de dados. Recomendamos que você configure um endpoint da VPC para o serviço de banco de dados. Para obter mais informações, consulte:  
+  [API do Amazon RDS e endpoints da VPC de interface](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/vpc-interface-endpoints.html) no *Guia do usuário do Amazon RDS*.
+ [Trabalhar com endpoints da VPC](https://docs.aws.amazon.com/redshift/latest/mgmt/enhanced-vpc-working-with-endpoints.html) no *Guia de gerenciamento do Amazon Redshift*.

## Erro: “O acesso ao KMS não é permitido”
<a name="troubleshoot_rotation_kms-key"></a>

Se você vir `ClientError: An error occurred (AccessDeniedException) when calling the GetSecretValue operation: Access to KMS is not allowed`, a função de alternância não tem permissão para descriptografar o segredo usando a chave KMS usada para criptografar o segredo. Pode haver uma condição na política de permissões que limita o contexto de criptografia a um segredo específico. Para obter informações sobre as permissões necessárias, consulte [Declaração de política para chaves gerenciadas pelo cliente](rotating-secrets-required-permissions-function.md#rotating-secrets-required-permissions-function-cust-key-example).

## Erro: “Key is missing from secret JSON” (A chave do segredo JSON está ausente)
<a name="tshoot-lambda-mismatched-secretvalue"></a>

Uma função de alternância do Lambda requer que o valor do segredo esteja em uma estrutura JSON específica. Se você vir esse erro, o JSON pode estar sem uma chave que a função de alternância tentou acessar. Para obter informações sobre a estrutura JSON para cada tipo de segredo, consulte [Estrutura JSON de segredos AWS Secrets Manager](reference_secret_json_structure.md).

## Erro: “setSecret: Unable to log into database” (setSecret: não é possível fazer login no banco de dados)
<a name="troubleshoot_rotation_setSecret"></a>

A seguir, estão os problemas que podem causar esse erro:

**A função de alternância não pode acessar o banco de dados.**  
Se a duração da tarefa for longa, por exemplo, mais de 5 milissegundos, a função de alternância do Lambda pode não conseguir acessar o banco de dados utilizando a rede.   
Se seu banco de dados ou serviço estiver sendo executado em uma instância do Amazon EC2 em uma VPC, é recomendável que você configure a função do Lambda para ser executada na mesma VPC. Assim, a função de alternância pode se comunicar diretamente com seu serviço. Para obter mais informações, consulte [Configuring VPC access](https://docs.aws.amazon.com/lambda/latest/dg/configuration-vpc.html#vpc-configuring) (Configurar o acesso à VPC).  
Para permitir que a função do Lambda acesse o banco de dados ou serviço, certifique-se de que os grupos de segurança anexados à sua função de alternância do Lambda permitam conexões de saída com o banco de dados ou serviço. Você também deve garantir que os grupos de segurança anexados ao seu banco de dados ou serviço permitam conexões de entrada a partir da função de alternância do Lambda. 

**As credenciais no segredo estão incorretas.**  
Se a duração da tarefa for curta, a função de alternância do Lambda pode não conseguir autenticar com as credenciais no segredo. Verifique as credenciais fazendo login manualmente com as informações nas `AWSPREVIOUS` versões `AWSCURRENT` e do segredo usando o AWS CLI comando [https://docs.aws.amazon.com/cli/latest/reference/secretsmanager/get-secret-value.html](https://docs.aws.amazon.com/cli/latest/reference/secretsmanager/get-secret-value.html).

**O banco de dados usa `scram-sha-256` para criptografar senhas.**  
Se seu banco de dados for Aurora PostgreSQL versão 13 ou posterior e usar `scram-sha-256` para criptografar senhas, mas a função de alternância usar `libpq` versão 9 ou anterior que não seja compatível com `scram-sha-256`, a função de alternância não poderá estabelecer conexão com o banco de dados.   

**Para determinar quais usuários do banco de dados usam criptografia `scram-sha-256`**
+ Consulte *Checking for users with non-SCRAM passwords* (Verificação de usuários com senhas não SCRAM) na postem de blog [SCRAM Authentication in RDS for PostgreSQL 13](https://aws.amazon.com/blogs/database/scram-authentication-in-rds-for-postgresql-13/) (Autenticação SCRAM no RDS para PostgreSQL 13).

**Para determinar a versão que sua função de alternância `libpq` usa**

1. Em um computador baseado em Linux, no console do Lambda, acesse sua função de alternância e baixe o pacote de implantação. Descompacte o arquivo zip em um diretório de trabalho.

1. Usando uma linha de comando, no diretório de trabalho, execute:

   `readelf -a libpq.so.5 | grep RUNPATH`

1. Se você visualizar a string *`PostgreSQL-9.4.x`* ou qualquer versão principal inferior à versão 10, a função de alternância não será compatível com `scram-sha-256`.
   + Saída para uma função de alternância incompatível com `scram-sha-256`:

     `0x000000000000001d (RUNPATH) Library runpath: [/local/p4clients/pkgbuild-a1b2c/workspace/build/PostgreSQL/PostgreSQL-9.4.x_client_only.123456.0/AL2_x86_64/DEV.STD.PTHREAD/build/private/tmp/brazil-path/build.libfarm/lib:/local/p4clients/pkgbuild-a1b2c/workspace/src/PostgreSQL/build/private/install/lib]`
   + Saída para uma função de alternância compatível com `scram-sha-256`:

     `0x000000000000001d (RUNPATH) Library runpath: [/local/p4clients/pkgbuild-a1b2c/workspace/build/PostgreSQL/PostgreSQL-10.x_client_only.123456.0/AL2_x86_64/DEV.STD.PTHREAD/build/private/tmp/brazil-path/build.libfarm/lib:/local/p4clients/pkgbuild-a1b2c/workspace/src/PostgreSQL/build/private/install/lib]`
   + Saída para uma função de alternância compatível com `scram-sha-256`:

     `0x000000000000001d (RUNPATH) Library runpath: [/local/p4clients/pkgbuild- a1b2c /workspace/build/PostgreSQL/PostgreSQL-14.x_client_only. 123456 .0/AL2_x86_64/DEV.STD.PTHREAD/build/private/tmp/brazil-path/build.libfarm/lib:/local/p4clients/pkgbuild- a1b2c /workspace/src/PostgreSQL/build/private/install/lib]`
   + Saída para uma função de alternância compatível com `scram-sha-256`:

     `0x000000000000001d (RUNPATH) Library runpath: [/local/p4clients/pkgbuild- a1b2c/workspace/build/PostgreSQL/PostgreSQL- 14.x_client_only.123456.0/AL2_x86_64/DEV.STD.PTHREAD/build/private/tmp/brazil- path/build.libfarm/lib:/local/p4clients/pkgbuild- a1b2c/workspace/src/PostgreSQL/build/private/install/lib]`
Se tiver configurado a alternância automática de segredos antes de 30 de dezembro de 2021, sua função de alternância incluiu uma versão anterior de `libpq` que não oferece suporte a `scram-sha-256`. Para oferecer suporte a `scram-sha-256`, você precisa [recriar sua função de alternância](rotate-secrets_turn-on-for-db.md). 

**O banco de dados requer SSL/TLS acesso.**  
Se seu banco de dados exigir uma SSL/TLS conexão, mas a função de rotação usar uma conexão não criptografada, a função de rotação não poderá se conectar ao banco de dados. As funções de rodízio do Amazon RDS (exceto Oracle e Db2) e o Amazon DocumentDB usam automaticamente o Secure Socket Layer (SSL) ou o Transport Layer Security (TLS) para se conectar ao seu banco de dados, se ele estiver disponível. Caso contrário, utilizarão uma conexão não criptografada.  
Se você configurou a rotação secreta automática antes de 20 de dezembro de 2021, sua função de rotação pode ser baseada em um modelo anterior que não era compatívelSSL/TLS. To support connections that use SSL/TLS. Você precisará [recriar sua função de rotação](rotate-secrets_turn-on-for-db.md). 

**Para determinar quando a sua função de alternância foi criada**

1. No console do Secrets Manager [https://console.aws.amazon.com/secretsmanager/](https://console.aws.amazon.com/secretsmanager/), abra seu segredo. Na seção **Configuração de alternância**, em **Função de alternância do Lambda**, você verá o **ARN da função do Lambda**, por exemplo, `arn:aws:lambda:aws-region:123456789012:function:SecretsManagerMyRotationFunction `. Copie o nome da função do final do ARN. Neste exemplo, é ` SecretsManagerMyRotationFunction `. 

1. No AWS Lambda console [https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/), em **Funções**, cole o nome da função Lambda na caixa de pesquisa, escolha Enter e escolha a função Lambda. 

1. Na página de detalhes da função, na guia **Configuration** (Configuração), em **Tags** (Etiquetas), copie o valor ao lado da chave **aws:cloudformation:stack-name**. 

1. No AWS CloudFormation console [https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/), em **Stacks**, cole o valor da chave na caixa de pesquisa e escolha Enter.

1. A lista de filtros de pilhas para que somente a pilha que criou a função de alternância do Lambda apareça. Na coluna **Created date** (Data da criação), visualize a data em que a pilha foi criada. Esta é a data em que a função de alternância do Lambda foi criada.

## Erro: “Não é possível importar o módulo ‘lambda\$1function’"
<a name="tshoot-python-version"></a>

É possível receber esse erro se estiver executando uma função do Lambda anterior que foi atualizada automaticamente do Python 3.7 para uma versão mais recente do Python. Para solucionar o erro, é possível alterar a versão da função do Lambda de volta para Python 3.7 e, em seguida, para [Atualize uma função de alternância existente do Python 3.7 para 3.9](#troubleshoot_rotation_python39). Para obter mais informações, consulte [Por que a alternância da minha função do Lambda do Secrets Manager falhou com o erro “módulo pg não encontrado”?](https://repost.aws/knowledge-center/secrets-manager-lambda-rotation) no *AWS re:Post*.

## Atualize uma função de alternância existente do Python 3.7 para 3.9
<a name="troubleshoot_rotation_python39"></a>

Algumas funções de alternância criadas antes de novembro de 2022 usavam o Python 3.7. O AWS SDK para Python deixou de oferecer suporte ao Python 3.7 em dezembro de 2023. Para obter mais informações, consulte [Atualizações AWS SDKs e ferramentas da política de suporte do Python](https://aws.amazon.com/blogs/developer/python-support-policy-updates-for-aws-sdks-and-tools/). Para mudar para uma nova função de alternância que usa o Python 3.9, é possível adicionar uma propriedade de runtime a uma função de alternância existente ou recriá-la.

**Para descobrir quais funções de alternância do Lambda usam o Python 3.7**

1. Faça login no Console de gerenciamento da AWS e abra o AWS Lambda console em [https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/).

1. Na lista de **Funções**, filtre por **SecretsManager**.

1. Na lista filtrada de funções, em **Runtime**, busque o Python 3.7.

**Topics**
+ [Opção 1: Recriar a função de rotação usando CloudFormation](#update-python-opt-1)
+ [Opção 2: atualizar o tempo de execução da função de rotação existente usando CloudFormation](#update-python-opt-2)
+ [Opção 3: Para AWS CDK usuários, atualize a biblioteca CDK](#update-python-opt-3)

### Opção 1: Recriar a função de rotação usando CloudFormation
<a name="update-python-opt-1"></a>

Quando você usa o console do Secrets Manager para ativar a rotação, o Secrets Manager usa CloudFormation para criar os recursos necessários, incluindo a função de rotação do Lambda. Se você usou o console para ativar a rotação ou criou a função de rotação usando uma CloudFormation pilha, poderá usar a mesma CloudFormation pilha para recriar a função de rotação com um novo nome. A nova função usa a versão mais recente do Python.

**Para encontrar a CloudFormation pilha que criou a função de rotação**
+ Na página de detalhes da função do Lambda, na guia **Configuração**, escolha **Tags**. Visualize o ARN próximo à **aws:cloudformation:stack-id**.

  O nome da pilha está incorporado no ARN, conforme exibido no exemplo a seguir.
  + ARN: `arn:aws:cloudformation:us-west-2:408736277230:stack/SecretsManagerRDSMySQLRotationSingleUser5c2-SecretRotationScheduleHostedRotationLambda-3CUDHZMDMBO8/79fc9050-2eef-11ed-80f0-021fb13c0537`
  + Nome da pilha: **SecretsManagerRDSMySQLRotationSingleUser5c2-SecretRotationScheduleHostedRotationLambda**

**Para recriar uma função de alternância (CloudFormation)**

1. Em CloudFormation, pesquise a pilha pelo nome e escolha **Atualizar**. 

   Se aparecer uma caixa de diálogo recomendando a atualização da pilha raiz, escolha **Ir para a pilha raiz** e, em seguida, escolha **Atualizar**.

1. Na página **Atualizar pilha**, em **Preparar modelo**, escolha **Editar no Application Composer** e, em **Editar modelo no Application Composer**, escolha o botão **Editar no Application Composer**.

1. No Application Composer, faça o seguinte:

   1. No código do modelo, em `SecretRotationScheduleHostedRotationLambda`, substitua o valor por `"functionName": "SecretsManagerTestRotationRDS"` com um novo nome de função. Por exemplo, em JSON, `"functionName": "SecretsManagerTestRotationRDSupdated"`. 

   1. Escolha **Atualizar modelo**.

   1. Na caixa de diálogo **Prosseguir para CloudFormation**, escolha **Confirmar e prosseguir para CloudFormation**.

1. Continue com o fluxo de trabalho da CloudFormation pilha e escolha **Enviar**.

### Opção 2: atualizar o tempo de execução da função de rotação existente usando CloudFormation
<a name="update-python-opt-2"></a>

Quando você usa o console do Secrets Manager para ativar a rotação, o Secrets Manager usa CloudFormation para criar os recursos necessários, incluindo a função de rotação do Lambda. Se você usou o console para ativar a rotação ou criou a função de rotação usando uma CloudFormation pilha, poderá usar a mesma CloudFormation pilha para atualizar o tempo de execução da função de rotação.

**Para encontrar a CloudFormation pilha que criou a função de rotação**
+ Na página de detalhes da função do Lambda, na guia **Configuração**, escolha **Tags**. Visualize o ARN próximo à **aws:cloudformation:stack-id**.

  O nome da pilha está incorporado no ARN, conforme exibido no exemplo a seguir.
  + ARN: `arn:aws:cloudformation:us-west-2:408736277230:stack/SecretsManagerRDSMySQLRotationSingleUser5c2-SecretRotationScheduleHostedRotationLambda-3CUDHZMDMBO8/79fc9050-2eef-11ed-80f0-021fb13c0537`
  + Nome da pilha: **SecretsManagerRDSMySQLRotationSingleUser5c2-SecretRotationScheduleHostedRotationLambda**

**Para atualizar o runtime de uma função de alternância (CloudFormation)**

1. Em CloudFormation, pesquise a pilha pelo nome e escolha **Atualizar**. 

   Se aparecer uma caixa de diálogo recomendando a atualização da pilha raiz, escolha **Ir para a pilha raiz** e, em seguida, escolha **Atualizar**.

1. Na página **Atualizar pilha**, em **Preparar modelo**, escolha **Editar no Application Composer** e, em **Editar modelo no Application Composer**, escolha o botão **Editar no Application Composer**.

1. No Application Composer, faça o seguinte:

   1. No modelo JSON, para `SecretRotationScheduleHostedRotationLambda`, em `Properties`, em `Parameters`, adicione **"runtime": "python3.9"**.

   1. Escolha **Atualizar modelo**.

   1. Na caixa de diálogo **Prosseguir para CloudFormation**, escolha **Confirmar e prosseguir para CloudFormation**.

1. Continue com o fluxo de trabalho da CloudFormation pilha e escolha **Enviar**.

### Opção 3: Para AWS CDK usuários, atualize a biblioteca CDK
<a name="update-python-opt-3"></a>

Se você usou a versão AWS CDK anterior à v2.94.0 para configurar a rotação do seu segredo, você pode atualizar a função Lambda fazendo o upgrade para a v2.94.0 ou posterior. Para obter mais informações, consulte o [Guia do desenvolvedor do AWS Cloud Development Kit (AWS CDK) v2](https://docs.aws.amazon.com/cdk/v2/guide/home.html).

## Atualize uma função de alternância existente de Python 3.9 para 3.10
<a name="troubleshoot_rotation_python_310"></a>

O Secrets Manager está fazendo a transição de Python 3.9 para 3.10 para funções de alternância do Lambda. Para mudar para uma nova função de alternância que use o Python 3.10, é necessário seguir o caminho de atualização com base no método de implantação. Use os procedimentos a seguir para atualizar a versão do Python e as dependências subjacentes.

**Para descobrir quais funções de rotação do Lambda, use o Python 3.9**

1. Faça login no Console de gerenciamento da AWS e abra o AWS Lambda console em [https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/).

1. Na lista de **Funções**, filtre por **SecretsManager**.

1. Na lista filtrada de funções, em **Runtime**, busque por **Python 3.9**.

### Atualização de caminhos por método de implantação
<a name="update-python-3.9-paths"></a>

As funções de rotação do Lambda identificadas nessa lista podem ser implantadas por meio do console, AWS Serverless Application Repository aplicativos ou transformações do Secrets Manager. CloudFormation Cada uma dessas estratégias de implantação tem um caminho de atualização distinto. 

Use um dos procedimentos a seguir para atualizar suas funções de alternância do Lambda, dependendo de como sua função foi implantada.

------
#### [ AWS Secrets Manager console-deployed functions ]

Uma nova função Lambda deve ser implantada por meio do AWS Secrets Manager console, pois você não pode atualizar manualmente as dependências das funções Lambda existentes.

Use o procedimento a seguir para atualizar as funções implantadas no AWS Secrets Manager console.

1. Abra o console do Secrets Manager em [https://console.aws.amazon.com/secretsmanager/](https://console.aws.amazon.com/secretsmanager/).

1. Em **AWS Secrets Manager**, selecione **Segredos**. Selecione o segredo que usa a função do Lambda que deseja atualizar.

1. Navegue até a guia **Alternâncias** e selecione a opção **Atualizar configurações de alternância**.

1. Em **Funções de alternância**, escolha **Criar uma nova função** e insira um nome para a função de alternância do Lambda.

   1. (Opcional) Depois que a atualização for concluída, será possível testar a função do Lambda atualizada para confirmar se ela funciona conforme o esperado. Na guia **Alternância**, selecione **Alternar segredo imediatamente** para iniciar uma alternância imediata.

   1. (Opcional) Você pode visualizar seus registros de funções e a versão do Python usada em tempo de execução na Amazon. CloudWatch Para obter mais informações, consulte [Visualização de CloudWatch registros de funções Lambda](https://docs.aws.amazon.com/lambda/latest/dg/monitoring-cloudwatchlogs-view.html#monitoring-cloudwatchlogs-console) no Guia do *AWS Lambda desenvolvedor*.

1. Depois que a nova função de alternância estiver configurada, será possível excluir a função de alternância antiga.

------
#### [ AWS Serverless Application Repository deployments ]

O procedimento a seguir mostra como atualizar as AWS Serverless Application Repository implantações. As funções Lambda implantadas por meio AWS Serverless Application Repository de um banner informando `This function belongs to an application. Click here to manage it.` que inclui um link para o aplicativo Lambda ao qual a função pertence.

**Importante**  
AWS Serverless Application Repository a disponibilidade Região da AWS depende.

Use o procedimento a seguir para atualizar as funções AWS Serverless Application Repository implantadas.

1. Abra o AWS Lambda console em [https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/).

1. Navegue até a guia **Configurações** da função do Lambda que precisa ser atualizada.

   1. Você precisará das seguintes informações sobre sua função ao atualizar o AWS Serverless Application Repository aplicativo implantado. É possível encontrar estas informações no console do Lambda.
     + **Nome da aplicação do Lambda**
       + O nome da aplicação do Lambda pode ser encontrado usando o link no banner. Por exemplo, o banner indica `serverlessrepo-SecretsManagerRedshiftRotationSingleUser`. Neste exemplo, o nome é `SecretsManagerRedshiftRotationSingleUser`.
     + **Nome da função de alternância do Lambda**
     + **Ponto final do Secrets Manager**
       + **O endpoint pode ser encontrado nas guias **Configurações** e **Variáveis de ambiente** atribuídas à variável SECRETS\$1MANAGER\$1ENDPOINT**.

1. Para atualizar o Python, será necessário atualizar a versão semântica da aplicação sem servidor. Consulte [Atualização de aplicações](https://docs.aws.amazon.com/serverlessrepo/latest/devguide/serverlessrepo-how-to-consume-new-version.html#update-applications) no *Guia do desenvolvedor do AWS Serverless Application Repository *.

------
#### [ Custom Lambda rotation functions ]

Se você criou funções personalizadas de alternância do Lambda, precisará atualizar as dependências e os runtimes de cada pacote para essas funções. Para obter mais informações, consulte [Atualização do runtime da função do Lambda para a versão mais recente](https://repost.aws/knowledge-center/lambda-upgrade-function-runtime).

------
#### [ AWS::SecretsManager-2024-09-16 transform macro ]

Se a função do Lambda for implantada por meio dessa transformação, a [atualização das pilhas usando o modelo existente](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-direct.html) permitirá que você use o runtime atualizado do Lambda. 

Use o procedimento a seguir para atualizar a CloudFormation pilha usando o modelo existente.

1. Abra o CloudFormation console em [https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/).

1. Na página **Pilhas**, selecione a pilha que você deseja atualizar.

1. Escolha **Atualizar** no painel de detalhes da pilha.

1. Em **Escolha um método de atualização de modelo**, selecione **Atualização direta**.

1. Na página **Especificar modelo**, selecione **Usar modelo existente**.

1. Deixe todas as outras opções nos valores padrão e escolha **Atualizar pilha**.

Se você tiver problemas para atualizar a pilha, consulte [Determinação da causa de uma falha na pilha](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/determine-root-cause-for-stack-failures.html) no *Guia do usuário do CloudFormation *.

------
#### [ AWS::SecretsManager-2020-07-23 transform macro ]

Recomendamos que você migre para a versão de transformação mais recente se estiver usando o `AWS::SecretsManager-2020-07-23`. Consulte [Apresentando uma versão aprimorada da AWS Secrets Manager transformação:: AWS: SecretsManager -2024-09-16](https://aws.amazon.com/blogs/security/introducing-an-enhanced-version-of-the-aws-secrets-manager-transform-awssecretsmanager-2024-09-16/) no blog de *AWS segurança* para obter mais informações. Se você continuar usando o `AWS::SecretsManager-2020-07-23`, poderá encontrar um erro de incompatibilidade entre sua versão de runtime e os artefatos do código da função do Lambda. Para obter mais informações, consulte [AWS:SecretsManager:: RotationSchedule HostedRotationLambda](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-properties-secretsmanager-rotationschedule-hostedrotationlambda.html#cfn-secretsmanager-rotationschedule-hostedrotationlambda-runtime) na *Referência do CloudFormation modelo*. 

Se você tiver problemas para atualizar a pilha, consulte [Determinação da causa de uma falha na pilha](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/determine-root-cause-for-stack-failures.html) no *Guia do usuário do CloudFormation *.

------

**Verificação da atualização do Python**  
**Para verificar a atualização do Python, abra o console Lambda ([https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/)) e acesse a página Function.** Selecione a função que você atualizou. Na seção **Fonte do código**, revise os arquivos incluídos no diretório e verifique se a versão do arquivo .so do Python é `3.10`.

## AWS Lambda rotação secreta com `PutSecretValue` falha
<a name="troubleshoot_rotation_putsecretvalue"></a>

Se você usa uma função assumida ou uma rotação entre contas com o Secrets Manager e encontra um **RotationFailed** evento CloudTrail com a mensagem: A versão secreta pendente do *VERSION\$1ID * Secret não *SECRET\$1ARN * foi criada pelo *LAMBDA\$1ARN.* Lambda Remova `AWSPENDING` o rótulo de teste e reinicie a rotação, então você precisa atualizar sua função Lambda para usar o parâmetro. `RotationToken`<a name="troubleshoot_rotation_procedure"></a>

## Atualização da função de alternância Lambda para incluir `RotationToken`
<a name="troubleshoot_rotation_procedure"></a>

1. Baixe o código da função do Lambda
   + Abra o console do Lambda
   + Selecione **Funções** no painel de navegação
   + Selecione sua função de alternância de segredos do Lambda em **Nome da função**
   + Em **Download**, escolha um dentre **Códigos de função .zip**, **Arquivo AWS SAM **, **Ambos**
   + Escolha **OK** para salvar a função em sua máquina local.

1. Editar o `Lambda_handler`

   Inclua o parâmetro rotation\$1token na etapa create\$1secret para alternância entre contas:

   ```
   def lambda_handler(event, context):
       """Secrets Manager Rotation Template
   
       This is a template for creating an AWS Secrets Manager rotation lambda
   
       Args:
           event (dict): Lambda dictionary of event parameters. These keys must include the following:
               - SecretId: The secret ARN or identifier
               - ClientRequestToken: The ClientRequestToken of the secret version
               - Step: The rotation step (one of createSecret, setSecret, testSecret, or finishSecret)
               - RotationToken: the rotation token to put as parameter for PutSecretValue call
   
           context (LambdaContext): The Lambda runtime information
   
       Raises:
           ResourceNotFoundException: If the secret with the specified arn and stage does not exist
   
           ValueError: If the secret is not properly configured for rotation
   
           KeyError: If the event parameters do not contain the expected keys
   
       """
       arn = event['SecretId']
       token = event['ClientRequestToken']
       step = event['Step']
       # Add the rotation token
       rotation_token = event['RotationToken']
   
       # Setup the client
       service_client = boto3.client('secretsmanager', endpoint_url=os.environ['SECRETS_MANAGER_ENDPOINT'])
   
       # Make sure the version is staged correctly
       metadata = service_client.describe_secret(SecretId=arn)
       if not metadata['RotationEnabled']:
           logger.error("Secret %s is not enabled for rotation" % arn)
           raise ValueError("Secret %s is not enabled for rotation" % arn)
       versions = metadata['VersionIdsToStages']
       if token not in versions:
           logger.error("Secret version %s has no stage for rotation of secret %s." % (token, arn))
           raise ValueError("Secret version %s has no stage for rotation of secret %s." % (token, arn))
       if "AWSCURRENT" in versions[token]:
           logger.info("Secret version %s already set as AWSCURRENT for secret %s." % (token, arn))
           return
       elif "AWSPENDING" not in versions[token]:
           logger.error("Secret version %s not set as AWSPENDING for rotation of secret %s." % (token, arn))
           raise ValueError("Secret version %s not set as AWSPENDING for rotation of secret %s." % (token, arn))
       # Use rotation_token
       if step == "createSecret":
           create_secret(service_client, arn, token, rotation_token)
   
       elif step == "setSecret":
           set_secret(service_client, arn, token)
       
       elif step == "testSecret":
           test_secret(service_client, arn, token)
           
       elif step == "finishSecret":
           finish_secret(service_client, arn, token)
           
       else:
           raise ValueError("Invalid step parameter")
   ```

1. Edição do código `create_secret`

   Revise a função `create_secret` para aceitar e usar o parâmetro `rotation_token`:

   ```
   # Add rotation_token to the function
   def create_secret(service_client, arn, token, rotation_token):
   """Create the secret
   
   This method first checks for the existence of a secret for the passed in token. If one does not exist, it will generate a
   new secret and put it with the passed in token.
   
   Args:
   service_client (client): The secrets manager service client
   
   arn (string): The secret ARN or other identifier
   
   token (string): The ClientRequestToken associated with the secret version
   
   rotation_token (string): the rotation token to put as parameter for PutSecretValue call
   
   Raises:
   ResourceNotFoundException: If the secret with the specified arn and stage does not exist
   
   """
   # Make sure the current secret exists
   service_client.get_secret_value(SecretId=arn, VersionStage="AWSCURRENT")
   
   # Now try to get the secret version, if that fails, put a new secret
   try:
   service_client.get_secret_value(SecretId=arn, VersionId=token, VersionStage="AWSPENDING")
   logger.info("createSecret: Successfully retrieved secret for %s." % arn)
   except service_client.exceptions.ResourceNotFoundException:
   # Get exclude characters from environment variable
   exclude_characters = os.environ['EXCLUDE_CHARACTERS'] if 'EXCLUDE_CHARACTERS' in os.environ else '/@"\'\\'
   # Generate a random password
   passwd = service_client.get_random_password(ExcludeCharacters=exclude_characters)
   
   # Put the secret, using rotation_token
   service_client.put_secret_value(SecretId=arn, ClientRequestToken=token, SecretString=passwd['RandomPassword'], VersionStages=['AWSPENDING'], RotationToken=rotation_token)
   logger.info("createSecret: Successfully put secret for ARN %s and version %s." % (arn, token))
   ```

1. Transferência do código atualizado da função do Lambda

   Depois de atualizar o código da função do Lambda, [transfira-o para alternar seu segredo](https://docs.aws.amazon.com/lambda/latest/dg/configuration-function-zip.html#configuration-function-update).

## Erro: “Erro ao executar lambda *<arn>* durante a *<a rotation>* etapa”
<a name="concurrency-related-failures"></a>

Se você estiver enfrentando falhas intermitentes de alternância de segredos com sua função do Lambda presa em um loop de conjuntos, por exemplo, entre **CreateSecret** e **SetSecret**, o problema pode estar relacionado às configurações de simultaneidade.

### Etapas da solução de problemas de simultaneidade
<a name="concurrency-troubleshooting-steps"></a>

**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 .

1. Verifique e ajuste as configurações de simultaneidade do Lambda:
   + Verifique se `reserved_concurrent_executions` não está definido como muito baixo (por exemplo, 1)
   + Se estiver usando simultaneidade reservada, defina para pelo menos 10
   + Considere o uso de simultaneidade sem reservas para obter mais flexibilidade

1. Para simultaneidade provisionada:
   + Não defina explicitamente o parâmetro de simultaneidade provisionado (por exemplo, no Terraform).
   + Se você precisar configurá-lo, use um valor de pelo menos 10.
   + Teste minuciosamente para garantir que o valor escolhido funcione para seu caso de uso.

1. Monitore e ajuste a simultaneidade:
   + Calcule a simultaneidade usando esta fórmula: Concorrência = (média de solicitações por segundo) \$1 (duração média da solicitação em segundos). Para obter mais informações, consulte [Estimativa de simultaneidade reservada](https://docs.aws.amazon.com/lambda/latest/dg/configuration-concurrency.html#estimating-reserved-concurrency).
   + Observe e registre os valores durante as alternâncias para determinar as configurações de simultaneidade apropriadas.
   + Tenha cuidado ao definir valores baixos de simultaneidade. Eles podem causar controle de utilização se não houver threads de execução suficientes disponíveis.

Para obter mais informações sobre como configurar a simultaneidade do Lambda, [consulte Configurando a simultaneidade reservada [e Configurando](https://docs.aws.amazon.com/lambda/latest/dg/provisioned-concurrency.html) a](https://docs.aws.amazon.com/lambda/latest/dg/configuration-concurrency.html) simultaneidade provisionada no Guia do desenvolvedor. AWS Lambda 