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.
Prácticas recomendadas de seguridad
Administrar adecuadamente la autenticación, los controles de acceso y la seguridad es fundamental para un uso seguro del Terraform Provider. AWS En esta sección se describen las mejores prácticas en torno a:
-
Funciones y permisos de IAM para el acceso con privilegios mínimos
-
Proteger las credenciales para evitar el acceso no autorizado a las cuentas y los recursos AWS
-
Cifrado remoto de estado para ayudar a proteger los datos confidenciales
-
Escaneo de infraestructura y código fuente para identificar errores de configuración
-
Controles de acceso para el almacenamiento de estado remoto
-
Aplicación de políticas centinela para implementar barreras de gobernanza
Seguir estas prácticas recomendadas le ayudará a reforzar su postura de seguridad cuando utilice Terraform para gestionar la infraestructura. AWS
Siga el principio del mínimo privilegio
El privilegio mínimo es un principio de seguridad fundamental que se refiere a conceder solo los permisos mínimos necesarios para que un usuario, proceso o sistema desempeñe las funciones previstas. Es un concepto fundamental del control de acceso y una medida preventiva contra el acceso no autorizado y las posibles violaciones de datos.
En esta sección se hace hincapié en el principio del mínimo privilegio porque está directamente relacionado con la forma en que Terraform autentica y emprende acciones contra los proveedores de servicios en la nube, por ejemplo. AWS
Cuando utilizas Terraform para aprovisionar y administrar AWS recursos, actúa en nombre de una entidad (usuario o función) que requiere los permisos adecuados para realizar llamadas a la API. No respetar el mínimo privilegio conlleva importantes riesgos de seguridad:
-
Si Terraform tiene permisos excesivos más allá de lo necesario, un error de configuración no intencionado podría provocar cambios o eliminaciones no deseados.
-
Las concesiones de acceso excesivamente permisivas aumentan el alcance del impacto si los archivos estatales o las credenciales de Terraform se ven comprometidos.
-
No respetar el más mínimo privilegio va en contra de las mejores prácticas de seguridad y de los requisitos de cumplimiento normativo a la hora de conceder el acceso mínimo requerido.
Uso de roles de IAM
Utilice funciones de IAM en lugar de usuarios de IAM siempre que sea posible para mejorar la seguridad con Terraform AWS Provider. Los roles de IAM proporcionan credenciales de seguridad temporales que se cambian automáticamente, lo que elimina la necesidad de administrar las claves de acceso a largo plazo. Los roles también ofrecen controles de acceso precisos a través de las políticas de IAM.
Otorgue el acceso con privilegios mínimos mediante políticas de IAM
Elabore cuidadosamente las políticas de IAM para garantizar que los roles y los usuarios solo tengan el conjunto mínimo de permisos necesarios para su carga de trabajo. Comience con una política vacía y añada de forma iterativa los servicios y acciones permitidos. Para lograrlo:
-
Habilite IAM Access Analyzer para evaluar las políticas y destacar los permisos no utilizados que se pueden eliminar.
-
Revise manualmente las políticas para eliminar cualquier funcionalidad que no sea esencial para la responsabilidad prevista del puesto.
-
Utilice las variables y etiquetas de las políticas de IAM para simplificar la administración de permisos.
Las políticas bien diseñadas otorgan el acceso justo para cumplir con las responsabilidades de la carga de trabajo y nada más. Defina las acciones a nivel operativo y permita las llamadas solo cuando se requieran APIs recursos específicos.
Seguir esta mejor práctica reduce el alcance del impacto y sigue los principios de seguridad fundamentales de la separación de funciones y el acceso con privilegios mínimos. Inicie el acceso estricto y abierto gradualmente según sea necesario, en lugar de empezar de forma abierta e intentar restringir el acceso más adelante.
Asuma las funciones de IAM para la autenticación local
Cuando ejecute Terraform de forma local, evite configurar claves de acceso estáticas. En su lugar, utilice las funciones de IAM para conceder un acceso privilegiado de forma temporal sin exponer las credenciales a largo plazo.
En primer lugar, cree un rol de IAM con los permisos mínimos necesarios y añada una relación de confianza
Ejemplo de política de relaciones de confianza:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/terraform-execution" }, "Action": "sts:AssumeRole" } ] }
A continuación, ejecute el AWS CLI comando aws sts assume-role para recuperar las credenciales efímeras del rol. Estas credenciales suelen ser válidas durante una hora.
AWS CLI ejemplo de comando:
aws sts assume-role --role-arn arn:aws:iam::111122223333:role/terraform-execution --role-session-name terraform-session-example
El resultado del comando contiene una clave de acceso, una clave secreta y un token de sesión que puede usar para autenticarse AWS en:
{ "AssumedRoleUser": { "AssumedRoleId": "AROA3XFRBF535PLBIFPI4:terraform-session-example", "Arn": "arn:aws:sts::111122223333:assumed-role/terraform-execution/terraform-session-example" }, "Credentials": { "SecretAccessKey": " wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", "SessionToken": " AQoEXAMPLEH4aoAH0gNCAPyJxz4BlCFFxWNE1OPTgk5TthT+FvwqnKwRcOIfrRh3c/LTo6UDdyJwOOvEVPvLXCrrrUtdnniCEXAMPLE/IvU1dYUg2RVAJBanLiHb4IgRmpRV3zrkuWJOgQs8IZZaIv2BXIa2R4OlgkBN9bkUDNCJiBeb/AXlzBBko7b15fjrBs2+cTQtpZ3CYWFXG8C5zqx37wnOE49mRl/+OtkIKGO7fAE", "Expiration": "2024-03-15T00:05:07Z", "AccessKeyId": "ASIAIOSFODNN7EXAMPLE" } }
El AWS proveedor también puede encargarse automáticamente de asumir el rol
Ejemplo de configuración del proveedor para asumir una función de IAM:
provider "aws" { assume_role { role_arn = "arn:aws:iam::111122223333:role/terraform-execution" session_name = "terraform-session-example" } }
Esto otorga privilegios elevados estrictamente durante la sesión de Terraform. Las claves temporales no se pueden filtrar porque caducan automáticamente después de la duración máxima de la sesión.
Las principales ventajas de esta práctica recomendada son la mejora de la seguridad en comparación con las claves de acceso de larga duración, los controles de acceso detallados sobre el rol con menos privilegios y la posibilidad de revocar fácilmente el acceso modificando los permisos del rol. Al utilizar las funciones de IAM, también se evita tener que almacenar los secretos directamente de forma local en scripts o en el disco, lo que permite compartir la configuración de Terraform de forma segura con todo el equipo.
Utilice funciones de IAM para la autenticación de Amazon EC2
Cuando ejecute Terraform desde instancias de Amazon Elastic Compute Cloud (Amazon EC2), evite almacenar localmente las credenciales de larga duración. En su lugar, usa roles de IAM y perfiles de instancia para conceder automáticamente los permisos con privilegios mínimos.
En primer lugar, cree un rol de IAM con los permisos mínimos y asígnelo al perfil de la instancia. El perfil de instancia permite a EC2 las instancias heredar los permisos definidos en el rol. A continuación, lanza las instancias especificando ese perfil de instancia. La instancia se autenticará a través del rol adjunto.
Antes de ejecutar cualquier operación de Terraform, verifica que el rol esté presente en los metadatos de la instancia para confirmar que las credenciales se heredaron correctamente.
TOKEN=$(curl -s -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600") curl -H "X-aws-ec2-metadata-token: $TOKEN" -s http://169.254.169.254/latest/meta-data/iam/security-credentials/
Este enfoque evita codificar AWS las claves permanentes en los scripts o en la configuración de Terraform dentro de la instancia. Las credenciales temporales se ponen a disposición de Terraform de forma transparente a través del rol y el perfil de la instancia.
Los principales beneficios de esta mejor práctica incluyen una mayor seguridad en comparación con las credenciales a largo plazo, una reducción de la sobrecarga de administración de credenciales y la coherencia entre los entornos de desarrollo, prueba y producción. La autenticación de roles de IAM simplifica las ejecuciones de Terraform desde las EC2 instancias y, al mismo tiempo, impone el acceso con menos privilegios.
Utilice credenciales dinámicas para los espacios de trabajo de HCP Terraform
HCP Terraform es un servicio gestionado HashiCorp que ayuda a los equipos a utilizar Terraform para aprovisionar y gestionar la infraestructura en varios proyectos y entornos. Cuando ejecute Terraform en HCP Terraform, utilice credenciales dinámicas
Los beneficios incluyen una rotación de secretos más sencilla, una gestión centralizada de las credenciales en todos los espacios de trabajo, los permisos con los mínimos privilegios y la eliminación de las claves codificadas. Confiar en claves efímeras cifradas mejora la seguridad en comparación con las claves de acceso de larga duración.
Utilice las funciones de IAM en AWS CodeBuild
En AWS CodeBuild, ejecuta tus compilaciones con una función de IAM asignada al CodeBuild proyecto. Esto permite que cada compilación herede automáticamente las credenciales temporales del rol en lugar de utilizar claves de larga duración.
Ejecute GitHub acciones de forma remota en HCP Terraform
Configure los flujos de trabajo de GitHub Actions para ejecutar Terraform de forma remota en los espacios de trabajo de HCP Terraform. Confíe en las credenciales dinámicas y en el bloqueo remoto del estado en lugar de en la gestión de secretos. GitHub
Utilice GitHub las acciones con el OIDC y configure la AWS acción Credenciales
Utilice el estándar OpenID Connect (OIDC) para federar GitHub la identidad de Actions a través
Úselo GitLab con el OIDC y el AWS CLI
Utilice el estándar OIDC para federar GitLab identidades a través
Utilice usuarios de IAM exclusivos con herramientas de automatización antiguas
Si dispone de scripts y herramientas de automatización que no admiten de forma nativa el uso de funciones de IAM, puede crear usuarios de IAM individuales para conceder acceso mediante programación. Se sigue aplicando el principio del privilegio mínimo. Minimice los permisos de las políticas y utilice funciones distintas para cada proceso o secuencia de comandos. A medida que vaya migrando a herramientas o scripts más modernos, comience a desempeñar las funciones de soporte de forma nativa y vaya pasando gradualmente a ellas.
aviso
Los usuarios de IAM tienen credenciales de larga duración, lo que supone un riesgo para la seguridad. Para ayudar a mitigar este riesgo, le recomendamos que brinde a estos usuarios únicamente los permisos que necesitan para realizar la tarea y que los elimine cuando ya no los necesiten.
Utilice el complemento Jenkins Credentials AWS
Usa el complemento AWS Credentials
Supervise, valide y optimice continuamente los privilegios mínimos
Con el tiempo, es posible que se concedan permisos adicionales que pueden superar las políticas mínimas requeridas. Analice continuamente el acceso para identificar y eliminar cualquier derecho innecesario.
Supervise continuamente el uso de las claves de acceso
Si no puede evitar el uso de claves de acceso, utilice los informes de credenciales de IAM para encontrar las claves de acceso no utilizadas que tengan más de 90 días de antigüedad y revoque las claves inactivas tanto en las cuentas de usuario como en las funciones de la máquina. Avise a los administradores para que confirmen manualmente la retirada de las claves de los empleados y sistemas activos.
Supervisar el uso de las claves le ayuda a optimizar los permisos, ya que puede identificar y eliminar los derechos no utilizados. Si sigue esta práctica recomendada con la rotación de claves de acceso, se limita la vida útil de las credenciales y se impone el acceso con privilegios mínimos.
AWS proporciona varios servicios y funciones que puede utilizar para configurar alertas y notificaciones para los administradores. Estas son algunas de las opciones:
-
AWS Config
: Puede usar AWS Config reglas para evaluar los ajustes de configuración de sus AWS recursos, incluidas las claves de acceso de IAM. Puede crear reglas personalizadas para comprobar si hay condiciones específicas, como claves de acceso no utilizadas que tengan una antigüedad superior a un número específico de días. Cuando se infringe una regla, AWS Config puede iniciar una evaluación para corregirla o enviar notificaciones a un tema del Amazon Simple Notification Service (Amazon SNS). -
AWS Security Hub
: Security Hub ofrece una visión completa del estado de seguridad de tu AWS cuenta y puede ayudarte a detectar y notificarte posibles problemas de seguridad, incluidas las claves de acceso de IAM no utilizadas o inactivas. Security Hub puede integrarse con Amazon EventBridge y Amazon SNS o Amazon Q Developer en aplicaciones de chat para enviar notificaciones a los administradores. -
AWS Lambda
: Las funciones Lambda se pueden llamar mediante varios eventos, incluidos Amazon CloudWatch Events o AWS Config reglas. Puede escribir funciones Lambda personalizadas para evaluar el uso de las claves de acceso de IAM, realizar comprobaciones adicionales y enviar notificaciones mediante servicios como Amazon SNS o Amazon Q Developer en aplicaciones de chat.
Valide continuamente las políticas de IAM
Utilice IAM Access Analyzer para evaluar las políticas asociadas a las funciones e identificar los servicios no utilizados o las acciones excesivas que se hayan otorgado. Implemente revisiones de acceso periódicas para verificar manualmente que las políticas cumplan con los requisitos actuales.
Compare la política existente con la política generada por IAM Access Analyzer y elimine los permisos innecesarios. También debe proporcionar informes a los usuarios y revocar automáticamente los permisos no utilizados tras un período de gracia. Esto ayuda a garantizar que las políticas mínimas permanezcan en vigor.
La revocación proactiva y frecuente del acceso obsoleto minimiza las credenciales que podrían estar en riesgo en caso de producirse una infracción. La automatización proporciona una optimización sostenible y a largo plazo de la higiene de las credenciales y los permisos. Seguir esta mejor práctica limita el alcance del impacto al aplicar de forma proactiva el mínimo privilegio en todas AWS las identidades y los recursos.
Almacenamiento remoto seguro
El almacenamiento de estado remoto
Si no se protege el estado remoto, se pueden producir problemas graves, como la pérdida de datos de estado, la imposibilidad de gestionar la infraestructura, la eliminación accidental de recursos y la exposición de información confidencial que podría estar presente en el archivo de estado. Por esta razón, proteger el almacenamiento remoto remoto es crucial para el uso de Terraform a nivel de producción.
Habilite el cifrado y los controles de acceso
Utilice el cifrado del lado del servidor (SSE) de Amazon Simple Storage Service (Amazon S3) para cifrar el estado remoto en reposo.
Limite el acceso directo a los flujos de trabajo colaborativos
-
Estructure los flujos de trabajo de colaboración en HCP Terraform o en una canalización de CI/CD dentro de su repositorio de Git para limitar el acceso directo al estado.
-
Confíe en las solicitudes de incorporación de datos, las aprobaciones de ejecución, las comprobaciones de políticas y las notificaciones para coordinar los cambios.
Seguir estas pautas ayuda a proteger los atributos confidenciales de los recursos y evita conflictos con los cambios de los miembros del equipo. El cifrado y las estrictas protecciones de acceso ayudan a reducir la superficie de ataque, y los flujos de trabajo de colaboración aumentan la productividad.
Utilice AWS Secrets Manager
Hay muchos recursos y fuentes de datos en Terraform que almacenan valores secretos en texto plano en el archivo estatal. Evite almacenar los secretos en el estado AWS Secrets Manager; utilícelos en su lugar.
En lugar de intentar cifrar manualmente los valores confidenciales
Escanee continuamente la infraestructura y el código fuente
Escanee proactivamente la infraestructura y el código fuente de forma continua para detectar riesgos, como credenciales expuestas o errores de configuración, a fin de reforzar su postura de seguridad. Aborde los hallazgos rápidamente reconfigurando o parcheando los recursos.
Utilice los AWS servicios de escaneo dinámico
Usa herramientas AWS nativas como Amazon Inspector AWS Security Hub
Realice un análisis estático
Integre analizadores estáticos como Checkov
Garantice una pronta reparación
En el caso de todos los resultados del análisis, asegúrese de que se corrijan rápidamente actualizando la configuración de Terraform, aplicando parches o reconfigurando los recursos manualmente, según proceda. Reduzca los niveles de riesgo abordando las causas fundamentales.
Al utilizar tanto el escaneo de infraestructura como el escaneo de códigos, se obtiene información detallada sobre las configuraciones de Terraform, los recursos aprovisionados y el código de la aplicación. Esto maximiza la cobertura del riesgo y el cumplimiento mediante controles preventivos, de detección y reactivos, al tiempo que incorpora la seguridad en una fase más temprana del ciclo de vida del desarrollo del software (SDLC).
Aplique controles de políticas
Utilice marcos de código, como las políticas de HashiCorp Sentinel
Las políticas de Sentinel pueden definir los requisitos o restricciones de la configuración de Terraform para alinearlos con los estándares y las mejores prácticas de la organización. Por ejemplo, puede usar las políticas de Sentinel para:
-
Exija etiquetas en todos los recursos.
-
Restrinja los tipos de instancias a una lista aprobada.
-
Aplica las variables obligatorias.
-
Impedir la destrucción de los recursos de producción.
La integración de las comprobaciones de políticas en los ciclos de vida de la configuración de Terraform permite la aplicación proactiva de los estándares y las directrices de arquitectura. Sentinel proporciona una lógica de políticas compartida que ayuda a acelerar el desarrollo y, al mismo tiempo, evita prácticas no aprobadas.