SEC11-BP06 以编程方式部署软件 - AWS Well-Architected 框架

SEC11-BP06 以编程方式部署软件

尽可能以编程方式部署软件。通过采取这种做法,可以降低由于人为错误导致部署失败或引入意外问题的可能性。

期望结果:您测试的工作负载版本就是您部署的版本,每次都一致地执行部署。您可以将工作负载的配置外部化,这有助于您无需更改即可部署到不同的环境。您使用软件包的加密签名来验证环境之间没有任何变化。

常见反模式:

  • 手动将软件部署到生产环境中。

  • 手动对软件进行更改,以适应不同的环境。

建立此最佳实践的好处:

  • 增强对软件发布过程的信心。

  • 降低了失败的更改对业务功能造成影响的风险。

  • 由于更改风险降低,从而加快了发布节奏。

  • 针对部署过程中的意外事件的自动回滚功能。

  • 能够以加密方式证明所测试的软件是部署的软件。

在未建立这种最佳实践的情况下暴露的风险等级:

实施指导

要维护稳健且可靠的应用程序基础设施,应实施安全和自动化的部署实践。这种做法涉及从生产环境中移除持久的人员访问权限,使用 CI/CD 工具进行部署,以及将特定于环境的配置数据外部化。通过采用这种方法,您可以增强安全性,降低人为错误的风险,并简化部署流程。

您可以构建自己的 AWS 账户结构,以便从生产环境中移除持久的人员访问权限。这种做法可以最大限度地降低未经授权的更改或意外修改的风险,从而提高生产系统的完整性。您可以使用 AWS CodeBuildAWS CodePipeline 之类的 CI/CD 工具来执行部署,而不是使用直接人员访问权限。您可以使用这些服务来自动执行构建、测试和部署流程,从而减少手动干预并提高一致性。

为了进一步增强安全性和可追溯性,您可以在测试应用程序包后对其进行签名,并在部署期间验证这些签名。为此,请使用诸如 AWS SignerAWS Key Management Service(AWS KMS)之类的加密工具。通过对软件包进行签名和验证,您可以确保仅将经过授权和验证的代码部署到您的环境中。

此外,您的团队可以适当地设计工作负载,以便从外部源(例如 AWS Systems Manager Parameter Store)获得特定于环境的配置数据。这种做法可将应用程序代码与配置数据分开,这有助于您独立管理和更新配置,而无需修改应用程序代码本身。

为简化基础设施的预置和管理,可以考虑使用基础设施即代码(IaC)工具,例如 AWS CloudFormationAWS CDK。可以使用这些工具来定义基础设施即代码,从而提高不同环境中部署的一致性和可重复性。

考虑使用金丝雀部署来验证软件是否成功部署。金丝雀部署涉及在部署到整个生产环境之前,先对一部分实例或用户推出更改。然后,您可以监控更改的影响并在必要时进行回滚,从而最大限度地降低出现广泛问题的风险。

按照 Organizing Your AWS Environment Using Multiple Accounts 白皮书中列出的建议进行操作。本白皮书提供了有关将环境(例如开发、暂存和生产)分离到不同 AWS 账户的指导,这种划分可以进一步增强安全性和隔离性。

实施步骤

  1. 设置 AWS 账户结构

    • 按照 Organizing Your AWS Environment Using Multiple Accounts 白皮书中的指导,为不同的环境(例如开发、暂存和生产)创建单独的 AWS 账户。

    • 为每个账户配置适当的访问控制和权限,以限制人员对生产环境的直接访问权限。

  2. 实施 CI/CD 管道

    • 使用 AWS CodeBuildAWS CodePipeline 之类的服务设置 CI/CD 管道。

    • 将管道配置为自动构建、测试应用程序代码,并将其部署到相应的环境。

    • 将代码存储库与 CI/CD 管道相集成,以实现版本控制和代码管理。

  3. 签署并验证应用程序包

  4. 使配置数据外部化

    • 将特定于环境的配置数据存储在 AWS Systems Manager Parameter Store 中。

    • 修改应用程序代码,以便在部署或运行时期间从 Parameter Store 检索配置数据。

  5. 实施基础设施即代码(IaC)

    • 使用 AWS CloudFormationAWS CDK 之类的 IaC 工具来定义和管理基础设施即代码。

    • 创建 CloudFormation 模板或 CDK 脚本,来为应用程序预置和配置必要的 AWS 资源。

    • 将 IaC 与 CI/CD 管道集成,以便在应用程序代码更改的同时自动部署基础设施变更。

  6. 实施金丝雀部署

    • 将您的部署流程配置为支持金丝雀部署,也即,在将更改部署到整个生产环境之前,先向一部分实例或用户推出这些更改。

    • 使用诸如 AWS CodeDeployAWS ECS 之类的服务来管理金丝雀部署并监控更改的影响。

    • 实施回滚机制,如果在金丝雀部署期间检测到问题,则还原到之前的稳定版本。

  7. 监控和审计

    • 设置监控和日志记录机制,来跟踪部署、应用程序性能和基础设施更改。

    • 使用诸如 Amazon CloudWatchAWS CloudTrail 之类的服务来收集和分析日志和指标。

    • 实施审计和合规性检查,以验证对安全最佳实践和监管要求的遵守情况。

  8. 持续改进:

    • 定期审查和更新您的部署实践,并纳入从以前的部署中吸取的反馈和经验教训。

    • 尽可能地实现部署过程自动化,以减少手动干预和潜在的人为错误。

    • 与跨职能团队(例如运营或安全)合作,来协调并持续改进部署实践。

通过执行这些步骤,可以在 AWS 环境中实施安全的自动化部署实践,从而增强安全性,降低人为错误的风险,并简化部署过程。

资源

相关最佳实践:

相关文档:

相关视频:

相关示例: