SEC11-BP06 以编程方式部署软件
尽可能以编程方式部署软件。通过采取这种做法,可以降低由于人为错误导致部署失败或引入意外问题的可能性。
期望结果:您测试的工作负载版本就是您部署的版本,每次都一致地执行部署。您可以将工作负载的配置外部化,这有助于您无需更改即可部署到不同的环境。您使用软件包的加密签名来验证环境之间没有任何变化。
常见反模式:
-
手动将软件部署到生产环境中。
-
手动对软件进行更改,以适应不同的环境。
建立此最佳实践的好处:
-
增强对软件发布过程的信心。
-
降低了失败的更改对业务功能造成影响的风险。
-
由于更改风险降低,从而加快了发布节奏。
-
针对部署过程中的意外事件的自动回滚功能。
-
能够以加密方式证明所测试的软件是部署的软件。
在未建立这种最佳实践的情况下暴露的风险等级:高
实施指导
要维护稳健且可靠的应用程序基础设施,应实施安全和自动化的部署实践。这种做法涉及从生产环境中移除持久的人员访问权限,使用 CI/CD 工具进行部署,以及将特定于环境的配置数据外部化。通过采用这种方法,您可以增强安全性,降低人为错误的风险,并简化部署流程。
您可以构建自己的 AWS 账户结构,以便从生产环境中移除持久的人员访问权限。这种做法可以最大限度地降低未经授权的更改或意外修改的风险,从而提高生产系统的完整性。您可以使用 AWS CodeBuild
为了进一步增强安全性和可追溯性,您可以在测试应用程序包后对其进行签名,并在部署期间验证这些签名。为此,请使用诸如 AWS Signer 或 AWS Key Management Service(AWS KMS)
此外,您的团队可以适当地设计工作负载,以便从外部源(例如 AWS Systems Manager Parameter Store)获得特定于环境的配置数据。这种做法可将应用程序代码与配置数据分开,这有助于您独立管理和更新配置,而无需修改应用程序代码本身。
为简化基础设施的预置和管理,可以考虑使用基础设施即代码(IaC)工具,例如 AWS CloudFormation
考虑使用金丝雀部署来验证软件是否成功部署。金丝雀部署涉及在部署到整个生产环境之前,先对一部分实例或用户推出更改。然后,您可以监控更改的影响并在必要时进行回滚,从而最大限度地降低出现广泛问题的风险。
按照 Organizing Your AWS Environment Using Multiple Accounts 白皮书中列出的建议进行操作。本白皮书提供了有关将环境(例如开发、暂存和生产)分离到不同 AWS 账户的指导,这种划分可以进一步增强安全性和隔离性。
实施步骤
-
设置 AWS 账户结构:
-
按照 Organizing Your AWS Environment Using Multiple Accounts 白皮书中的指导,为不同的环境(例如开发、暂存和生产)创建单独的 AWS 账户。
-
为每个账户配置适当的访问控制和权限,以限制人员对生产环境的直接访问权限。
-
-
实施 CI/CD 管道:
-
使用 AWS CodeBuild
和 AWS CodePipeline 之类的服务设置 CI/CD 管道。 -
将管道配置为自动构建、测试应用程序代码,并将其部署到相应的环境。
-
将代码存储库与 CI/CD 管道相集成,以实现版本控制和代码管理。
-
-
签署并验证应用程序包:
-
在应用程序包经过测试和验证后,使用 AWS Signer 或 AWS Key Management Service(AWS KMS)
对其进行签名。 -
在将应用程序包部署到目标环境之前,配置部署过程来验证应用程序包的签名。
-
-
使配置数据外部化:
-
将特定于环境的配置数据存储在 AWS Systems Manager Parameter Store 中。
-
修改应用程序代码,以便在部署或运行时期间从 Parameter Store 检索配置数据。
-
-
实施基础设施即代码(IaC):
-
使用 AWS CloudFormation
或 AWS CDK 之类的 IaC 工具来定义和管理基础设施即代码。 -
创建 CloudFormation 模板或 CDK 脚本,来为应用程序预置和配置必要的 AWS 资源。
-
将 IaC 与 CI/CD 管道集成,以便在应用程序代码更改的同时自动部署基础设施变更。
-
-
实施金丝雀部署:
-
将您的部署流程配置为支持金丝雀部署,也即,在将更改部署到整个生产环境之前,先向一部分实例或用户推出这些更改。
-
使用诸如 AWS CodeDeploy
或 AWS ECS 之类的服务来管理金丝雀部署并监控更改的影响。 -
实施回滚机制,如果在金丝雀部署期间检测到问题,则还原到之前的稳定版本。
-
-
监控和审计:
-
设置监控和日志记录机制,来跟踪部署、应用程序性能和基础设施更改。
-
使用诸如 Amazon CloudWatch
和 AWS CloudTrail 之类的服务来收集和分析日志和指标。 -
实施审计和合规性检查,以验证对安全最佳实践和监管要求的遵守情况。
-
-
持续改进:
-
定期审查和更新您的部署实践,并纳入从以前的部署中吸取的反馈和经验教训。
-
尽可能地实现部署过程自动化,以减少手动干预和潜在的人为错误。
-
与跨职能团队(例如运营或安全)合作,来协调并持续改进部署实践。
-
通过执行这些步骤,可以在 AWS 环境中实施安全的自动化部署实践,从而增强安全性,降低人为错误的风险,并简化部署过程。
资源
相关最佳实践:
相关文档:
相关视频:
相关示例: