在 AWS 中分离环境

Ada*_*dam 2 amazon-web-services amazon-sns amazon-dynamodb aws-lambda

是否有关于在 AWS 中分离环境的最佳实践?

我有一个使用以下服务的解决方案:

  • 拉姆达
  • 社交网络
  • 质量标准
  • 动态数据库
  • API网关
  • S3
  • 我是

我们还没有生活,但我们已经接近了。到我们上线时,我想要一个适当的生产、测试​​和开发环境,它们之间有“合理”的隔离度。

  1. 每个环境的单独帐户
  2. 每个环境的单个账户和单独的 VPC

我阅读了Charity Majors的文章AWS 网络、环境和你。我对通过 VPC 进行分段感到失望,但我不知道我的堆栈中的所有服务都是 VPC 范围的?以下是我的一些要求:

  • 限制服务名称冲突(针对非全局服务)
  • 在环境之间建立非常清晰的界限
  • 最后,在环境级别授予权限

我正在使用 AWS 组织。

PS 抱歉,如果这不是问题的正确论坛。如果有更好的东西,请告诉我,我会移动它。

Mik*_*scu 8

我建议每个环境使用一个 AWS 账户。原因不分先后:

  1. 安全性:管理复杂的 IAM 策略以在单个帐户内创建边界非常困难;相反,默认情况下每个环境一个帐户会强制边界:您可以启用跨帐户访问,但您必须非常谨慎
  2. 当所有活动都发生在同一个帐户中时,审核对不同环境的访问会更加困难
  3. 性能:一些服务在 VPC 和非 VPC 中运行时没有相同的性能特征(即 Lambda 冷启动在 VPC 中运行时增加了延迟)
  4. 命名:您必须为账户中的所有资源添加前缀或后缀,而不是使用 AWS 账户 ID 来标识您正在操作的环境 - 这是一个偏好问题,但仍然如此..
  5. 合规性:如果您需要遵守某些合规性标准,例如 HIPAA,该标准对您可以保留数据的时间和谁可以访问数据施加了严格的限制,那么证明哪些数据是生产数据以及哪些数据是测试数据变得非常困难等.(这可以追溯到上面的#1 和#2)
  6. 成本控制:在开发、测试、暂存环境中,您可能希望授予人们相当广泛的权限来启动新资源,但设置较低的支出上限以防止意外使用高峰;相反,在生产帐户中,您需要有限的资源启动能力,但需要更高的支出上限;通过单独的帐户易于实施 - 在同一个帐户中没有那么多

我错过了什么吗?可能!但这就是我使用单独帐户的原因。

顺便说一句 - 我主张反对使用 VPC。它们存在是有原因的,您绝对应该使用 VPC 进行网络隔离。我想争辩的是,任何还使用其他服务(例如 DynamoDb、Lambda、SQS、S3 等)的人 - VPC 并不是真正隔离资源的方式,IMO。

如果您使用的工具不够灵活,无法部署到不同的帐户,那么我能想到的每个阶段一个帐户的缺点主要是持续部署。

最后,有些人喜欢将计费视为一个可能的问题,但实际上,您不想知道您在生产、分期和开发上花了多少钱?!