我们正在探索SQS以提高某些异步作业队列的可靠性。我正在尝试确定最佳的SQS部署策略,以支持多个队列和环境(服务器场群集,开发人员沙箱,开发人员笔记本电脑等)。我们以前的作业队列为每个环境使用单独的队列服务器,这提供了良好的隔离。由于SQS是一个全球资源,我还没有看到安全/隔离和维护的最佳途径。
在更糟糕的情况下,我认为我们需要创建数千个单独的SQS队列来处理作业类型(例如报告,ETL等)和环境(生产,演示,开发人员沙箱等)的每种组合。我们可以在每个环境中使用单个队列,但这似乎限制了我们根据作业控制行为的能力。相反,我们可以为每个作业使用全局队列,但这使得无法隔离环境。
这看起来有点像维护和安全负担,所以我想知道其他客户如何在大量环境和队列有效负载类型中成功利用SQS。
答案 0 :(得分:2)
我会将每个环境(prod / demo /等)拆分为单独的AWS账户,以提供环境隔离。
我建议使用CloudFormation或Teraform之类的东西来创建和管理所有队列(以及其他AWS资源),这样可以减少您的维护和安全负担。
答案 1 :(得分:1)
虽然使用完全独立的帐户是一种合适的最佳做法,如Mark B的回答所述,但它并不是唯一的。您可以在同一个AWS账户中拥有多个环境,并在不同的级别实现隔离。
要隔离您需要将命名标准应用于资源的不同环境,您可以使用IAM将某些访问密钥和角色限制为仅具有与该环境关联的资源(例如:SQS队列)的权限。 / p>
例如,您可以拥有以下队列:
然后,您可以将最低权限应用于访问这些队列的角色,以仅允许每个环境的相应应用程序访问它们。如果您使用的是CloudFormation,则可以将资源名称的环境部分指定为堆栈的参数。
也就是说,在账户层面隔离提供了更强有力的保障。根据您可接受的风险级别和合规性政策,您可能需要遵守单独的帐户,以提供一些额外的保护。混合方法也是可能的,例如仅为沙箱开发创建一个单独的帐户,但将您的预生产和生产资源集中在一个帐户中。如果您最终使用单个帐户,那么命名约定确实是关键,并且使用Jenkins和CloudFormation等工具进行自动化可以帮助实现这一目标。