SEC11-BP06 Implementación de software mediante programación
Siempre que sea posible, lleve a cabo las implementaciones de software mediante programación. Con este enfoque se reduce la probabilidad de que se produzca un error en la implementación o de que surja un problema inesperado debido a un error humano.
Resultado deseado: la versión de la carga de trabajo que se prueba es la versión que implementa, y la implementación se realiza de forma coherente en todo momento. Externaliza la configuración de su carga de trabajo, lo que ayuda a realizar la implementación en diferentes entornos sin cambios. Emplea la firma criptográfica de los paquetes de software para verificar que no ha cambiado nada entre entornos.
Patrones comunes de uso no recomendados:
-
Implementar manualmente el software en producción.
-
Hacer cambios manualmente en el software para adaptarlo a distintos entornos.
Beneficios de establecer esta práctica recomendada:
-
Mayor confianza en el proceso de lanzamiento de software.
-
Reducción del riesgo de que un cambio erróneo afecte a las funciones de la empresa.
-
Aumento de la cadencia de lanzamiento debido al menor riesgo del cambio.
-
Capacidad de reversión automática en caso de imprevistos durante la implementación.
-
Capacidad para demostrar criptográficamente que el software probado es el software implementado.
Nivel de riesgo expuesto si no se establece esta práctica recomendada: alto
Guía para la implementación
Para mantener una infraestructura de aplicaciones sólida y fiable, aplique prácticas de implementación seguras y automatizadas. Esta práctica implica eliminar el acceso humano persistente de los entornos de producción, utilizar herramientas de CI/CD para las implementaciones y externalizar los datos de configuración específicos del entorno. Si utiliza esta estrategia, puede mejorar la seguridad, reducir el riesgo de errores humanos y agilizar el proceso de implementación.
Puede crear su estructura de Cuenta de AWS para eliminar el acceso humano persistente de los entornos de producción. Esta práctica minimiza el riesgo de cambios no autorizados o modificaciones accidentales, lo que mejora la integridad de los sistemas de producción. En lugar del acceso humano directo, puede utilizar herramientas de CI/CD como AWS CodeBuild
Para mejorar aún más la seguridad y la trazabilidad, puede firmar los paquetes de aplicaciones después de probarlos y validar estas firmas durante la implementación. Para ello, utilice herramientas criptográficas como AWS Signer o AWS Key Management Service (AWS KMS)
Asimismo, su equipo puede diseñar la carga de trabajo para que los datos de configuración específicos del entorno se obtengan de una fuente externa, como el Almacén de parámetros de AWS Systems Manager. Esta práctica separa el código de la aplicación de los datos de configuración, lo que ayuda a administrar y actualizar las configuraciones de forma independiente sin modificar el código de la aplicación en sí.
Para agilizar el aprovisionamiento y la administración de la infraestructura, puede plantearse utilizar herramientas de infraestructura como código (IaC), por ejemplo, AWS CloudFormation
Plantéese usar las implementaciones canario para validar la implementación correcta de su software. Las implementaciones canario suponen implementar cambios en un subconjunto de instancias o usuarios antes de implementarlas en todo el entorno de producción. Luego, puede monitorear el impacto de los cambios y revertirlos si es necesario, lo que minimiza el riesgo de que los problemas se generalicen.
Siga las recomendaciones descritas en el documento técnico Organizing Your AWS Environment Using Multiple Accounts. Este documento técnico proporciona orientación sobre cómo separar los entornos (como los de desarrollo, ensayo y producción) en distintas Cuentas de AWS, lo que mejora aún más la seguridad y el aislamiento.
Pasos para la implementación
-
Configure la estructura de la Cuenta de AWS:
-
Siga las instrucciones del documento técnico Organizing Your AWS Environment Using Multiple Accounts para crear Cuentas de AWS separadas para diferentes entornos (por ejemplo, de desarrollo, ensayo y producción).
-
Configure los controles de acceso y los permisos adecuados para cada cuenta a fin de restringir el acceso humano directo a los entornos de producción.
-
-
Implemente un proceso de CI/CD:
-
Configure una canalización de CI/CD utilizando servicios como AWS CodeBuild
y AWS CodePipeline . -
Configure la canalización para compilar, probar e implementar automáticamente el código de la aplicación en los entornos respectivos.
-
Integre los repositorios de código con la canalización de CI/CD para el control de versiones y la administración del código.
-
-
Firme y verifique los paquetes de aplicaciones:
-
Utilice AWS Signer o AWS Key Management Service (AWS KMS)
para firmar los paquetes de aplicaciones después de haberlos probado y validado. -
Configure el proceso de implementación para verificar las firmas de los paquetes de aplicaciones antes de implementarlos en los entornos de destino.
-
-
Externalice los datos de configuración:
-
Guarde los datos de configuración específicos del entorno en el almacén de parámetros de AWS Systems Manager.
-
Modifique el código de la aplicación para recuperar los datos de configuración del almacén de parámetros durante la implementación o el tiempo de ejecución.
-
-
Implemente Infraestructura como código (IaC):
-
Utilice herramientas de IaC, como AWS CloudFormation
o AWS CDK , para definir y administrar su infraestructura como código. -
Cree plantillas de CloudFormation o scripts de CDK para aprovisionar y configurar los recursos de AWS necesarios para su aplicación.
-
Integre el IaC con la canalización de CI/CD para implementar automáticamente los cambios en la infraestructura junto con los cambios en el código de las aplicaciones.
-
-
Despliegue implementaciones canario:
-
Configure su proceso de implementación para que sea compatible con las implementaciones canario, en las que los cambios se implementan en un subconjunto de instancias o usuarios antes de implementarlos en todo el entorno de producción.
-
Utilice servicios como AWS CodeDeploy
o AWSECS para gestionar las implementaciones canario y monitorear el impacto de los cambios. -
Implemente mecanismos de reversión para volver a la versión estable anterior si se detectan problemas durante la implementación canario.
-
-
Monitoree y audite:
-
Configure mecanismos de supervisión y registro para llevar un seguimiento de las implementaciones, el rendimiento de las aplicaciones y los cambios en la infraestructura.
-
Utilice servicios como Amazon CloudWatch
y AWS CloudTrail para recopilar y analizar registros y métricas. -
Implemente comprobaciones de auditoría y conformidad para verificar el cumplimiento de las prácticas recomendadas de seguridad y los requisitos normativos.
-
-
Mejore continuamente:
-
Revise y actualice periódicamente las prácticas de implementación e incorpore los comentarios y las lecciones aprendidas de las implementaciones anteriores.
-
Automatice la mayor parte posible del proceso de implementación para reducir la intervención manual y los posibles errores humanos.
-
Colabore con equipos multifuncionales (por ejemplo, de operaciones o seguridad) para adaptar y mejorar continuamente las prácticas de implementación.
-
Si sigue estos pasos, puede desplegar prácticas de implementación seguras y automatizadas en su entorno de AWS, lo que mejora la seguridad, reduce el riesgo de errores humanos y agiliza el proceso de implementación.
Recursos
Prácticas recomendadas relacionadas:
Documentos relacionados:
Videos relacionados:
Ejemplos relacionados: