Permisos del rol de ejecución de la función de rotación de Lambda para AWS Secrets Manager - AWS Secrets Manager

Permisos del rol de ejecución de la función de rotación de Lambda para AWS Secrets Manager

Para Rotación con función de Lambda, cuando Secrets Manager utiliza una función de Lambda para rotar un secreto, Lambda asume un rol de ejecución de IAM y proporciona esas credenciales al código de la función de Lambda. Consulte las instrucciones sobre cómo configurar la rotación automática en los siguientes recursos:

En los ejemplos siguientes se muestran políticas insertadas para roles de ejecución de la función de rotación de Lambda. Para crear un rol de ejecución y adjuntar una política de permisos, consulte Rol de ejecución de AWS Lambda.

Política para el rol de ejecución de una función de rotación de Lambda

La siguiente política de ejemplo permite a la función de rotación lo siguiente:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "secretsmanager:DescribeSecret", "secretsmanager:GetSecretValue", "secretsmanager:PutSecretValue", "secretsmanager:UpdateSecretVersionStage" ], "Resource": "SecretARN" }, { "Effect": "Allow", "Action": [ "secretsmanager:GetRandomPassword" ], "Resource": "*" }, { "Action": [ "ec2:CreateNetworkInterface", "ec2:DeleteNetworkInterface", "ec2:DescribeNetworkInterfaces", "ec2:DetachNetworkInterface" ], "Resource": "*", "Effect": "Allow" } ] }

Instrucción de política para una clave administrada por el cliente

Si el secreto está cifrado con una clave KMS distinta de la Clave administrada de AWS aws/secretsmanager, tiene que conceder permiso al rol de ejecución de Lambda para utilizar la clave. Puede utilizar el contexto de cifrado SecretARN para limitar el uso de la función de descifrado, de modo que el rol de la función de rotación solo tenga acceso para descifrar el secreto que es responsable de rotar. En el ejemplo siguiente, se muestra una instrucción que se debe agregar a la política del rol de ejecución para descifrar el secreto con una clave de KMS.

{ "Effect": "Allow", "Action": [ "kms:Decrypt", "kms:DescribeKey", "kms:GenerateDataKey" ], "Resource": "KMSKeyARN" "Condition": { "StringEquals": { "kms:EncryptionContext:SecretARN": "SecretARN" } } }

Si desea utilizar la función de rotación para varios secretos cifrados con una clave administrada por el cliente, agregue una sentencia como la del siguiente ejemplo para permitir que el rol de ejecución descifre el secreto.

{ "Effect": "Allow", "Action": [ "kms:Decrypt", "kms:DescribeKey", "kms:GenerateDataKey" ], "Resource": "KMSKeyARN" "Condition": { "StringEquals": { "kms:EncryptionContext:SecretARN": [ "arn1", "arn2" ] } } }

Instrucción de política para la estrategia de usuarios alternativos

Para obtener información sobre la estrategia de rotación de usuarios alternativos, consulte Estrategias de rotación de la función de Lambda.

Para un secreto que contenga credenciales de Amazon RDS, si utiliza la estrategia de usuarios alternativos y Amazon RDS administra el secreto del superusuario, entonces también debe permitir que la función de rotación llame a las API de solo lectura de Amazon RDS para que pueda obtener la información de conexión de la base de datos. Recomendamos que adjunte la política administrada por AWS AmazonRDSReadOnlyAccess.

La siguiente política de ejemplo permite a la función:

  • Ejecutar operaciones de Secrets Manager para SecretARN.

  • Recuperar las credenciales del secreto de superusuario. Secrets Manager utiliza las credenciales del secreto de superusuario para actualizar las credenciales en el secreto rotado.

  • Crear una contraseña.

  • Establecer la configuración requerida si la base de datos o el servicio se ejecutan en una VPC. Para obtener más información, consulte Configuración de una función de Lambda para obtener acceso a los recursos en una VPC.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "secretsmanager:DescribeSecret", "secretsmanager:GetSecretValue", "secretsmanager:PutSecretValue", "secretsmanager:UpdateSecretVersionStage" ], "Resource": "SecretARN" }, { "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue" ], "Resource": "SuperuserSecretARN" }, { "Effect": "Allow", "Action": [ "secretsmanager:GetRandomPassword" ], "Resource": "*" }, { "Action": [ "ec2:CreateNetworkInterface", "ec2:DeleteNetworkInterface", "ec2:DescribeNetworkInterfaces", "ec2:DetachNetworkInterface" ], "Resource": "*", "Effect": "Allow" } ] }