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
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. 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 Alternância gerenciada para segredos do AWS Secrets Manager.
Para visualizar os CloudWatch registros da sua função Lambda
Abra o console do Secrets Manager em https://console.aws.amazon.com/secretsmanager/
. -
Escolha seu segredo e, em seguida, na página de detalhes, em Rotation configuration (Configuração de alternância), escolha a função de alternância do Lambda. Abra o console do Lambda.
-
Na guia Monitorar, escolha Registros e, em seguida, selecione Exibir registros CloudWatch.
O CloudWatch console é aberto e exibe os registros da sua função.
Para interpretar os logs
- Nenhuma atividade após “Found credentials in environment variables” (Credenciais encontradas em variáveis de ambiente)
- Nenhuma atividade após "createSecret”
- Erro: “O acesso a não KMS é permitido”
- Erro: “A chave está ausente do segredoJSON”
- Erro: "setSecret: Não é possível fazer login no banco de dados”
- Erro: “Não é possível importar o módulo ‘lambda_function’"
- Atualize uma função de alternância existente do Python 3.7 para 3.9
- AWS Lambda rotação secreta com PutSecretValue falha
Nenhuma atividade após “Found credentials in environment variables” (Credenciais encontradas em variáveis de ambiente)
Se não houver atividade após “Found credentials in environment variables” (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 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, você pode usar um endpoint público. Para localizar um endpoint, consulte AWS Secrets Manager endpoints.
Se sua função Lambda for executada em uma VPC que não tenha acesso à Internet, recomendamos que você configure os endpoints privados do serviço Secrets Manager dentro do seu. VPC Você VPC pode então interceptar solicitações endereçadas ao endpoint regional público e redirecioná-las para o endpoint privado. Para obter mais informações, consulte Endpoint da VPC.
Como alternativa, você pode habilitar sua função Lambda para acessar um endpoint público do Secrets Manager adicionando um NATgateway ou um gateway de internet ao seuVPC, o que permite que o tráfego do seu chegue VPC ao endpoint público. Isso expõe você VPC a mais riscos, pois um endereço IP do gateway pode ser atacado pela Internet pública.
Nenhuma atividade após "createSecret”
A seguir estão os problemas que podem fazer com que a rotação pare apóscreateSecret:
- A VPC rede ACLs não permite entrada e saída de HTTPS tráfego.
-
Para obter mais informações, consulte Controle o tráfego para sub-redes usando a rede ACLs no Guia VPC do usuário da Amazon.
- A configuração de tempo limite da função Lambda é muito curta para executar a tarefa.
-
Para obter mais informações, consulte Configurar as opções da função Lambda no Guia do desenvolvedor do AWS Lambda .
- O VPC endpoint do Secrets Manager não permite a entrada VPC CIDRs ativa nos grupos de segurança atribuídos.
-
Para obter mais informações, consulte Controle o tráfego para recursos usando grupos de segurança no Guia VPC do usuário da Amazon.
- A política de VPC endpoint do Secrets Manager não permite que o Lambda use VPC o endpoint.
-
Para obter mais informações, consulte Uso de um endpoint da VPC do AWS Secrets Manager.
- O segredo usa rotação alternada de usuários, o segredo do superusuário é gerenciado pela Amazon RDS e a função Lambda não pode acessar o. RDS API
-
Para rodízio de usuários em alternância em que o segredo do superusuário é gerenciado por outro produto da AWS, 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 VPC endpoint para o serviço de banco de dados. Para obter mais informações, consulte:
-
Amazon RDS API e VPC endpoints de interface no Guia do RDS usuário da Amazon.
-
Trabalhando com VPC endpoints no Guia de Gerenciamento do Amazon Redshift.
-
Erro: “O acesso a não KMS é permitido”
Se você verClientError: An error occurred (AccessDeniedException) when calling the
GetSecretValue operation: Access to KMS is not allowed
, a função de rotação não tem permissão para descriptografar o segredo usando a KMS chave que foi 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.
Erro: “A chave está ausente do segredoJSON”
Uma função de rotação Lambda exige que o valor secreto esteja em uma estrutura específicaJSON. Se você ver esse erro, JSON talvez esteja faltando uma chave que a função de rotação tentou acessar. Para obter informações sobre a JSON estrutura de cada tipo de segredo, consulteEstrutura JSON de segredos do AWS Secrets Manager.
Erro: "setSecret: Não é possível fazer login no banco de dados”
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 EC2 instância da Amazon em umVPC, recomendamos que você configure sua função 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 Configurando o VPC acesso.
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õesAWSCURRENT
e do segredo usando o AWS CLI comandoget-secret-value
. - O banco de dados usa
scram-sha-256
para criptografar senhas. -
Se seu banco de dados for o Aurora Postgre SQL versão 13 ou posterior e usado
scram-sha-256
para criptografar senhas, mas a função de rotação usar alibpq
versão 9 ou anterior, que não é compatívelscram-sha-256
, a função de rotação não poderá se conectar ao banco de dados.Para determinar quais usuários do banco de dados usam criptografia
scram-sha-256
-
Consulte Verificação de usuários sem SCRAM senhas no blog SCRAMAutenticação no RDS Postgre SQL 13
.
Para determinar a versão que sua função de alternância
libpq
usa-
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.
-
Usando uma linha de comando, no diretório de trabalho, execute:
readelf -a libpq.so.5 | grep RUNPATH
-
Se você visualizar a string
ou qualquer versão principal inferior à versão 10, a função de alternância não será compatível comPostgreSQL-9.4.x
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]
-
nota
Se você configurou a rotação secreta automática antes de 30 de dezembro de 2021, sua função de
libpq
rotação incluída em uma versão anterior não é compatívelscram-sha-256
. Para oferecer suporte ascram-sha-256
, você precisa recriar sua função de alternância. -
- O banco de dados requer SSL TLS /access.
-
Se seu banco de dados exigir uma TLS conexãoSSL/, 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 rotação da Amazon RDS (exceto Oracle e Db2) e do 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.
nota
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.
Para determinar quando a sua função de alternância foi criada
-
No console do Secrets Manager https://console.aws.amazon.com/secretsmanager/
, abra seu segredo. Na seção Configuração de rotação, em Função de rotação Lambda, você vê a função Lambda, por exemploARN,. arn:aws:lambda:
Copie o nome da função do final doARN, neste exemploaws-region
:123456789012
:function:SecretsManagerMyRotationFunction
SecretsManagerMyRotationFunction
-
No AWS Lambda console 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. -
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.
-
No AWS CloudFormation console https://console.aws.amazon.com/cloudformation
, em Stacks, cole o valor da chave na caixa de pesquisa e escolha Enter. -
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_function’"
Você pode receber esse erro se estiver executando uma função Lambda anterior que foi atualizada automaticamente do Python 3.7 para uma versão mais recente do Python. Para solucionar o erro, você pode 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. Para obter mais informações, consulte Por a rotação da minha função do Lambda do Secrets Manager falhou com o erro “módulo pg não encontrado”?
Atualize uma função de alternância existente do Python 3.7 para 3.9
Algumas funções de alternância criadas antes de novembro de 2022 usavam o Python 3.7. O AWS SDK for Python parou 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
Para descobrir quais funções de alternância do Lambda usam o Python 3.7
Faça login no AWS Management Console e abra o AWS Lambda console em https://console.aws.amazon.com/lambda/
. -
Na lista de Funções, filtre por
SecretsManager
. -
Na lista filtrada de funções, em Runtime, busque o Python 3.7.
Para atualizar para o Python 3.9:
Opção 1: Recriar a função de rotação usando AWS CloudFormation
Quando você usa o console do Secrets Manager para ativar a rotação, o Secrets Manager usa AWS 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 AWS CloudFormation pilha, poderá usar a mesma AWS 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 AWS 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. Veja ao ARN lado aws:cloudformation:stack-id.
O nome da pilha está incorporado noARN, conforme mostrado no exemplo a seguir.
ARN:
arn:aws:cloudformation:us-west-2:408736277230:stack/
SecretsManagerRDSMySQLRotationSingleUser5c2-SecretRotationScheduleHostedRotationLambda
-3CUDHZMDMBO8/79fc9050-2eef-11ed-80f0-021fb13c0537Nome da pilha:
SecretsManagerRDSMySQLRotationSingleUser5c2-SecretRotationScheduleHostedRotationLambda
Para recriar uma função de alternância (AWS CloudFormation)
-
Em AWS 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.
-
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.
-
No Application Composer, faça o seguinte:
-
No código do modelo, em
SecretRotationScheduleHostedRotationLambda
, substitua o valor por"functionName": "SecretsManagerTestRotationRDS"
um novo nome de função, por exemploJSON, em,"functionName": "SecretsManagerTestRotationRDSupdated"
-
Escolha Atualizar modelo.
-
Na caixa de diálogo Prosseguir para AWS CloudFormation, escolha Confirmar e prosseguir para AWS CloudFormation.
-
-
Continue com o fluxo de trabalho da AWS CloudFormation pilha e escolha Enviar.
Opção 2: atualizar o tempo de execução da função de rotação existente usando AWS CloudFormation
Quando você usa o console do Secrets Manager para ativar a rotação, o Secrets Manager usa AWS 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 AWS CloudFormation pilha, poderá usar a mesma AWS CloudFormation pilha para atualizar o tempo de execução da função de rotação.
Para encontrar a AWS 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. Veja ao ARN lado aws:cloudformation:stack-id.
O nome da pilha está incorporado noARN, conforme mostrado no exemplo a seguir.
ARN:
arn:aws:cloudformation:us-west-2:408736277230:stack/
SecretsManagerRDSMySQLRotationSingleUser5c2-SecretRotationScheduleHostedRotationLambda
-3CUDHZMDMBO8/79fc9050-2eef-11ed-80f0-021fb13c0537Nome da pilha:
SecretsManagerRDSMySQLRotationSingleUser5c2-SecretRotationScheduleHostedRotationLambda
Para atualizar o runtime de uma função de alternância (AWS CloudFormation)
-
Em AWS 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.
-
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.
-
No Application Composer, faça o seguinte:
-
No modeloJSON, para
SecretRotationScheduleHostedRotationLambda
, abaixoProperties
, abaixoParameters
, adicione"runtime": "python3.9"
. -
Escolha Atualizar modelo.
-
Na caixa de diálogo Prosseguir para AWS CloudFormation, escolha Confirmar e prosseguir para AWS CloudFormation.
-
-
Continue com o fluxo de trabalho da AWS CloudFormation pilha e escolha Enviar.
Opção 3: Para AWS CDK usuários, atualize a CDK biblioteca
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 atualizando 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.
AWS Lambda rotação secreta com PutSecretValue
falha
Se você usa uma função assumida ou uma rotação entre contas com o Secrets Manager e encontra um RotationFailed evento AWS CloudTrail com a mensagem: A versão secreta pendente do
a rotação, então você precisa atualizar sua função Lambda para usar o parâmetro. VERSION_ID
Secret não SECRET_ARN
foi criada pelo LAMBDA_ARN.
Lambda Remova AWSPENDING
o rótulo de teste e reinicieRotationToken
Atualize a função de rotação Lambda para incluir RotationToken
-
Baixe o código da função Lambda
-
Abra o console Lambda
-
No painel de navegação, escolha Funções
-
Selecione sua função de rotação secreta do Lambda como nome da função
-
Para baixar, escolha um dos códigos de função .zip, AWS SAM file, Both
-
Escolha OK para salvar a função em sua máquina local.
-
-
Editar o
Lambda_handler
Inclua o parâmetro rotation_token na etapa create_secret para rotação 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")
-
Editar
create_secret
códigoRevise a
create_secret
função para aceitar e usar orotation_token
parâmetro:# 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))
-
Faça o upload do código da função Lambda atualizado
Depois de atualizar o código da função Lambda, faça o upload para alternar seu segredo.