在 AWS 中分离生产环境和测试环境的最佳实践是什么?
我可以想到 2 个选项(假设我的网站名为:blue-sky.com)
创建 2 个 AWS 账户:blue-sky 和 test-blue-sky(在 Test Account 下创建一个 Test User,在 Prod Account 下创建一个 Prod User)。
创建 1 个 AWS 账户:blue-sky。创建 2 个用户,产品和测试。测试用户可以访问测试服务器,而产品用户可以访问产品服务器。
哪个更好?任何替代方法?
上述两种情况都有相同的缺点。假设我们的发布经理可以访问测试和生产服务器。他想炸毁测试服务器,因为他拥有两种环境的凭据,他错误地使用 Prod 凭据登录并删除了 Prod Server。
如果你想做正确的事,那就更进一步。
首先关于您的用户帐户。
拥有 3 个帐户 - login、test和prod。您的所有IAM 用户都仅在登录帐户中,并且他们都启用了 MFA 以确保安全。
在test和prod账户中,您只有IAM角色,可以从登录账户中承担。
查看跨账户访问以获取更多详细信息。
接下来是您的部署。
不要担心使用Prod凭据进行测试- 您的Prod 部署应该通过 CI/CD 完全自动化,并且您永远不需要登录到 Prod 帐户来手动进行部署。
将 CloudFormation与AWS CodePipeline、 CodeBuild和CodeDeploy结合使用来自动化您的构建和部署。或者使用其他一些工具,如Jenkins、GoCD等,只要对 Test 和 Prod的部署是从同一个 CI/CD 管道完成的,这并不重要。
事实上,在 Test中会有一些情况,您必须登录到控制台来测试某些东西、调试某些东西等。但这将在 Test通过您的自动化升级为 Prod之前确定。
这样,您将拥有100% 一致且可复制的部署,并且您不必担心犯下会导致生产环境崩溃的错误。
希望有帮助:)
简短的一般回答:每个环境一个帐户可以降低风险,减少达到限制的机会,并提供最佳隔离。
--
更长的答案:这个问题没有一个答案,但这里有几个选项:
每个环境每个应用程序一个帐户。工作负载和用户的最佳隔离、最低风险、最小的测试账户最大化和达到 AWS 限制的机会。保护和监控一切需要付出更多努力,并且网络成本可能更高。
每个应用程序一个帐户,每个 VPC 一个环境。良好的应用程序间隔离,但应用程序容易受到用户问题、限制等的影响。您可以使用标签和策略解决用户访问问题,但工作量更大。关于成本的评论与上述相同,但略少。
每个应用程序或每个环境每个应用程序一个帐户,一个 VPC。易于设置,需要更多工作才能做好隔离。达到极限的风险更高。
一个账号,一个VPC,多个应用。你可以看到这是怎么回事——基本上又是更高的风险。
在所有情况下,粗心的用户都有删除错误资源的风险。像 MLu 建议的自动化部署是减轻这种风险的一种方法。
对任何服务器/云的任何重要部署都应该有一个好的备份策略。一些金融法规要求存储在云中的所有数据必须存储在第二个位置,例如组织拥有的数据中心的本地。对于我自己的个人部署,我每晚备份到 S3,将 S3 同步到我的 PC,并进行异地存储的增量备份。