Quiero crear una función de AWS Lambda para un secreto de AWS Secrets Manager. Mi base de datos o servicio no admite la función de rotación automática.
Solución
Requisito previo: Instala y configura la Interfaz de la línea de comandos de AWS (AWS CLI).
Nota: Si se muestran errores al poner en marcha comandos de AWS CLI, consulta Solución de errores de AWS CLI. Además, asegúrate de utilizar la versión más reciente de la AWS CLI.
Creación del código para la función de rotación de Lambda
Para obtener instrucciones, consulta Configuración de la rotación automática para los secretos de AWS Secrets Manager que no son de bases de datos.
Creación de un conjunto de cambios de AWS CloudFormation basado en la plantilla de función de rotación genérica
- Ejecuta el comando create-cloud-formation-change-set de la AWS CLI.
- Sustituye --stack-name por el nombre de la pila de CloudFormation.
- Sustituye --parameter-overrides por los puntos de enlace regionales de Secrets Manager para tu región de AWS y el nombre de la función de rotación de Lambda que crea la plantilla.
Ejemplo del comando create-cloud-formation-change-set de la AWS CLI:
aws serverlessrepo create-cloud-formation-change-set --application-id arn:aws:serverlessrepo:us-east-1:297356227824:applications/SecretsManagerRotationTemplate --stack-name MyLambdaCreationStack --parameter-overrides Name=endpoint,Value=https://secretsmanager.REGION.amazonaws.com Name=functionName,Value=MySecretsManagerRotationFunction --capabilities CAPABILITY_IAM CAPABILITY_RESOURCE_POLICY
Nota: Asegúrate de utilizar el ARN de arn:aws:serverlessrepo:us-east-1:297356227824:applications/SecretsManagerRotationTemplate exactamente como se muestra.
Uso del conjunto de cambios de CloudFormation para actualizar una pila
El comando create-cloud-formation-change-set devuelve los valores ApplicationId, ChangeSetId, SemanticVersion y StackId.
Sigue estos pasos:
- Sustituye change-set-name por el valor ChangeSetId cuando ejecutes el comando execute-change-set.
- Ejecuta el comando execute-change-set de la AWS CLI:
aws cloudformation execute-change-set --change-set-name arn:aws:cloudformation:region:123456789012:changeSet/EXAMPLE1-90ab-cdef-fedc-ba987EXAMPLE/EXAMPLE2-90ab-cdef-fedc-ba987EXAMPLE
La pila de CloudFormation crea la función de Lambda y un rol de AWS Identity and Access Management (IAM). El rol de IAM tiene los permisos necesarios para la función de Lambda.
Verificación de la creación de la función de Lambda
Ejecuta el comando list-functions de la AWS CLI:
aws lambda list-functions
Output
{
...
"FunctionName": "MySecretsManagerRotationFunction",
...
"FunctionArn": "arn:aws:lambda:region:123456789012:function:MySecretsManagerRotationFunction",
...
}
Nota: El valor FunctionName coincide con el nombre de la función que has especificado en la opción --parameter-overrides.
Configuración del acceso de la función de Lambda a una nube privada virtual de Amazon
Si tu base de datos o servicio se encuentra en una Amazon Virtual Private Cloud (Amazon VPC), ejecuta el comando update-function-configuration para configurar la función de rotación de Lambda para que se ejecute en la Amazon VPC. Asegúrate de proporcionar los ID de subred de VPC y los ID del grupo de seguridad. Para obtener más información, consulta Otorgamiento a las funciones de Lambda de acceso a los recursos de una Amazon VPC.
Nota: Si tu base de datos o servicio no se encuentran en una Amazon VPC, omite este paso.
Ejemplo del comando update-function-configuration de la AWS CLI:
$ aws lambda update-function-configuration --function-name your-lambda-function \
--vpc-config SubnetIds=subnet-076c28105d486f3bd,subnet-0af00c796ccdc725f,SecurityGroupIds=sg-0aed64f81acc4c037
Creación de un punto de enlace de Amazon VPC para Secrets Manager
Si la Amazon VPC con tu base de datos o servicio y la función de rotación de Lambda no tiene acceso a Internet, crea un punto de enlace de Amazon VPC. Configura un punto de enlace de servicio privado en la Amazon VPC para acceder a Secrets Manager y activa la función de rotación en un punto de enlace dentro de la VPC. Ejecuta el comando create-vpc-endpoint de la AWS CLI.
Nota: Si tu base de datos o servicio no se encuentran en una Amazon VPC, omite este paso.
$ 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-0bacf4bbed67e4df5
Configuración de la conectividad de red entre la función de Lambda y la base de datos o servicio
Confirma que la función de Lambda pueda enrutar tu base de datos o servicio a través de los puertos de red requeridos. Los requisitos de puertos y enrutamiento varían según la base de datos o el servicio y su configuración de VPC asociada.
Nota: Si tu base de datos o servicio no se encuentran en una Amazon VPC, omite este paso.
Personalización de la función de rotación para tu caso de uso
La plantilla de rotación implementa automáticamente los pasos de createSecret y finishSecret. Debes modificar la función de Lambda para implementar los pasos de setSecret y testSecret para tu caso de uso y base de datos. Para obtener más información, consulta Cuatro pasos en una función de rotación.
Activación de la rotación de tu secreto
Especifica el número de días entre rotaciones con los parámetros --rotation-rules y AutomaticallyAfterDays.
aws secretsmanager rotate-secret --secret-id production/MyAwesomeAppSecret --rotation-lambda-arn arn:aws:lambda:region:123456789012:function:MySecretsManagerRotationFunction --rotation-rules AutomaticallyAfterDays=7
Para obtener más información, consulta Rotación de secretos de AWS Secrets Manager.
Información relacionada
Plantillas de funciones de rotación de AWS Secrets Manager
Cómo conectarse al servicio de AWS Secrets Manager dentro de una nube virtual privada
Servicios de AWS que utilizan los secretos de AWS Secrets Manager