Limitar el acceso a los secretos - AWS Guía prescriptiva

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Limitar el acceso a los secretos

La seguridad es la máxima prioridad en AWS. En el AWS Well-Architected Framework, la práctica recomendada de almacenar y usar los secretos de forma segura recomienda limitar el acceso a los secretos, registrarlos y auditarlos, y obtener acceso a través de una API en lugar de conceder el acceso a una persona. Esto está relacionado con la generación de contraseñas aleatorias mediante el uso AWS Secrets Manager, que se analizó anteriormente en esta guía.

En el pasado, las credenciales utilizadas para autenticarse en bases de datos, datos de terceros APIs, símbolos y otros datos secretos podían estar incrustadas en el código fuente o en los archivos del entorno. En muchas organizaciones, los administradores de bases de datos aún pueden acceder a todas las credenciales de usuario de la base de datos. Sin embargo, es más seguro si no lo hacen. Le recomendamos que haga lo siguiente:

  • Limite el acceso a Secrets Manager mediante una política AWS Identity and Access Management (IAM) asociada a una función de AWS servicio o a una función de IAM para los usuarios.

  • Amplíe el acceso programático a los secretos de Secrets Manager únicamente mediante llamadas a la API a Secrets Manager.

  • Evite el uso de secretos codificados de forma rígida.

  • No transfiera valores de credenciales a las variables.

  • Asegúrese de que los secretos los utilice directamente la aplicación o la infraestructura, y no un usuario humano.

El siguiente ejemplo de código muestra un enfoque que puede utilizar para proteger los datos confidenciales al crear una base de datos. Al crear la base de datos, puede solicitar que el usuario introduzca una contraseña y, a continuación, rotar la contraseña, o puede utilizar una contraseña aleatoria desde el principio. Generar una contraseña aleatoria desde el principio puede ayudarle a gestionar y gestionar las credenciales de forma más segura.

El siguiente fragmento de código crea un recurso de base de datos y password = local.passwddata obtiene la contraseña de una variable local.

resource "aws_db_instance" "default" { count = var.createdb == true ? 1 : 0 allocated_storage = 20 identifier = var.identifier db_name = var.databasename engine = "mysql" engine_version = "8.0.32" instance_class = "db.t3.micro" username = "admin" password = local.passwddata skip_final_snapshot = true publicly_accessible = false vpc_security_group_ids = [aws_security_group.db.id] db_subnet_group_name = aws_db_subnet_group.db.0.name }

El siguiente fragmento de código crea una contraseña aleatoria o acepta la contraseña proporcionada por el usuario. Terraformalmacena esta contraseña como una variable local para que pueda utilizarla más adelante en el código.

locals { passwddata = var.passwddata != null ? var.passwddata : data.aws_secretsmanager_random_password.test.random_secrets }