Eu tentei alternar um segredo do AWS Secrets Manager para um serviço da AWS no Amazon Virtual Private Cloud (Amazon VPC). No entanto, a operação falhou e o Amazon CloudWatch Logs mostra que a tarefa do AWS Lambda excedeu o tempo limite.
Breve descrição
O Secrets Manager não é capaz de alternar segredos para serviços da AWS que são executados em sub-redes privadas no Amazon VPC, porque essas sub-redes não possuem acesso à Internet.
Resolução
Importante: Antes de começar, certifique-se de ter instalado e configurado a AWS Command Line Interface (AWS CLI).
Observação: se você receber erros ao executar comandos da AWS CLI, consulte Solução de problemas da AWS CLI. Além disso, verifique se você está utilizando a versão mais recente da AWS CLI.
Siga estas instruções para configurar um endpoint de interface Amazon VPC a fim de acessar sua função do Lambda do Secrets Manager e sua instância privada do Amazon Relational Database Service (Amazon RDS). No exemplo a seguir, uma instância privada do Aurora RDS no Amazon VPC chamada vpc-0abb11f5a28a8abe7 está sendo utilizada.
Crie SGs para o endpoint da VPC do Secrets Manager, como também para a instância RDS e a função de alternância do Lambda
Siga estas instruções para criar grupos de segurança (SGs) utilizando a AWS CLI.
1. SG para o endpoint da VPC do Amazon Secrets Manager:
Observação: Substitua vpc-id vpc-0abb11f5a28a8abe7 pelo ID VPC.
$ aws ec2 create-security-group --vpc-id vpc-0abb11f5a28a8abe7 --group-name SMVPCEndpointSG --description "secretsmanager VPCEndpoint SG"
{
"GroupId": "sg-vpc-endpoint"
}
2. Grupo de segurança para função de alternância do Lambda:
$ aws ec2 create-security-group --vpc-id vpc-0abb11f5a28a8abe7 --group-name LambdaFunctionSG --description "Lambda Rotation Function SG"
{
"GroupId": "sg-lambda-function"
}
3. (Opcional) Crie um SG para a instância RDS:
Observação: Essa etapa será necessária caso a instância RDS utilize somente o grupo de segurança padrão.
$ aws ec2 create-security-group --vpc-id vpc-0abb11f5a28a8abe7 --group-name RDSInstanceSG --description "RDS Instance SG"
{
"GroupId": "sg-rds-instance"
}
Defina regras para o endpoint da VPC do Amazon e para os SGs da instância RDS
1. Obtenha o bloco CIDR para a VPC:
$ aws ec2 describe-vpcs --vpc-ids vpc-0a05c93c7ef7a8a1c --query 'Vpcs[].CidrBlock' --output text
10.0.0.0/16
2. Configure as regras do grupo de segurança para o endpoint da VPC do Amazon, assim permitirá o tráfego de entrada na porta 443 a partir da sua VPC:
$ aws ec2 authorize-security-group-ingress --group-id sg-vpc-endpoint --protocol tcp --port 443 --cidr 10.0.0.0/16
3. Configure o SG da instância RDS para permitir conexões de entrada provenientes do grupo de segurança da função do Lambda:
Observação:
- Substitua your-rds-security-group pelo seu SG (um SG existente ou o SG opcional da instância RDS).
- Substitua your-db-port pela porta que seu banco de dados está configurado para utilizar.
$ aws ec2 authorize-security-group-ingress --group-id your-rds-security-group --protocol tcp --port your-db-port --source-group sg-lambda-function
Vincule os SGs aos recursos da AWS
1. Se você criou o SG opcional da instância RDS, então modifique a configuração da instância RDS:
Observação: Substitua your-existing-rds-security-groups pelo grupo ou grupos anexados à instância RDS.
$ aws rds modify-db-instance --db-instance-identifier your-rds-instance --vpc-security-group-ids sg-rds-instance your-existing-rds-security-groups
2. Siga as instruções para atualizar a configuração da função do Lambda:
$ aws lambda update-function-configuration --function-name your-lambda-function \
--vpc-config SubnetIds=subnet-076c28105d486f3bd,subnet-0af00c796ccdc725f,SecurityGroupIds=sg-lambda-function
Crie um endpoint de interface Amazon VPC para o serviço Secrets Manager e o associe a um SG
Siga as instruções para criar um endpoint de interface:
Observação: Substitua your-region com a sua região da AWS e com IDs de sub-rede utilizados para sua instância RDS.
$ aws ec2 create-vpc-endpoint --vpc-id vpc-0abb11f5a28a8abe7 --vpc-endpoint-type Interface \
--service-name com.amazonaws.your-region.secretsmanager --subnet-ids subnet-076c28105d486f3bd subnet-0af00c796ccdc725f \
--security-group-ids sg-vpc-endpoint
Importante: Seu Amazon VPC deverá ter os nomes de host DNS e também os atributos de resolução de DNS ativados. Para mais informações, consulte Visualizar e atualizar o suporte DNS para o VPC.
Verifique se o Secrets Manager pode alternar o segredo
1. Siga as instruções para rotacionar os segredos do Secrets Manager:
Observação: Substitua your-secret pelo seu segredo do Secrets Manager.
$ aws secretsmanager rotate-secret --secret-id your-secret
O Secrets Manager repetirá a alternância anterior.
Observação: Como as tentativas anteriores de alternar a senha não tiveram êxito, você pode receber um resultado semelhante à seguinte:
An error occurred (InvalidRequestException) when calling the RotateSecret operation: A previous rotation isn't complete. That rotation will be reattempted.
2. Monitore a função no console do AWS Lambda. Caso a alternância seja bem-sucedida, os fluxos de log do Amazon CloudWatch conterão uma entrada semelhante à seguinte:
[INFO] 2019-10-22T07:59:32.627Z 96179023-5b67-4e98-a057-885f68bc69f2 finishSecret: Successfully set AWSCURRENT stage to version 175b5e38-341f-4cd0-8c58-2b1e49769642 for secret arn:aws:secretsmanager:your-region:your-account:secret:your-secret
3. Recupere o segredo do Secrets Manager para confirmar se ele foi rotacionado com sucesso:
Observação: Substitua your-secret-arn pelo o ARN secreto do Secrets Manager.
aws secretsmanager get-secret-value --secret-id your-secret-arn
Observação: A função de alternância do Secrets Manager é executada de forma não simultânea em segundo plano. A função de alternância poderá levar vários minutos até ser concluída.