AWS、Beanstalk + Worker Tier + Cron 和任务 URL 中的安全性

Posted

技术标签:

【中文标题】AWS、Beanstalk + Worker Tier + Cron 和任务 URL 中的安全性【英文标题】:AWS, Beanstalk + Worker Tier + Cron and security in the Task URLs 【发布时间】:2017-06-25 00:29:00 【问题描述】:

我正在改造我的网络应用程序以使其适应 Beanstalk 和 Workers 希望我定义 cron 任务的方式:

http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/using-features-managing-env-tiers.html#worker-periodictasks

我知道我必须实现一个执行任务的 URL

在我看来这是一个很大的安全漏洞,任何了解任务 URL 的人都可以调用该任务。

将一些安全包装器添加到这些任务 URL 的常用模式是什么?

【问题讨论】:

【参考方案1】:

我回来时也经历过同样的事情。但是,如果您查看文档,您会发现它谈到了以下内容(第三点除外)。

    确保该 URL 只接受来自 localhost 和 IP 的请求。 使该 URL 只接受 POST 请求 最后但并非最不重要的数据应符合您选择的任何格式。我认为 JSON 是默认的。

因为它只接受来自本地主机的请求,所以它是安全的。如果您想实现额外的安全性,您也可以检查标头以仅允许某些代理。

【讨论】:

我正在向这些端点添加一个安全步骤,例如request.host == "localhost"。但我有一个顾虑:我可以模拟我的笔记本电脑请求来自localhost 并用/etc/hosts 技巧欺骗服务器吗? 还可以添加IP限制,只允许localhost IP 127.0.0.1。【参考方案2】:

您应该能够简单地锁定分配给 Elastic Beanstalk 工作程序层环境的安全组,以便它只接受来自工作程序层中其他 EC2 实例的传入请求。换句话说,安全组应该有一个单一的入站规则,源类型为“自定义”,源值是安全组的 ID。然后,您可以确定只有工作层守护进程可以发布到工作层任务 URL。

【讨论】:

问题是相同的代码将部署到我的生产网络应用程序实例中,并且必须具有公共访问权限。 安全组是 AWS 网络级别设置。这不是代码更改。所以每个EB环境下的代码应该是一样的。 我的意思是任务 URL 也将在我的生产服务器中公开(因为代码相同)并且在该服务器上我无法限制访问。 啊,我明白你现在在说什么了。我真的不希望该 URL 完全暴露在非工作服务器上。您能否以某种方式更改服务器配置以仅基于环境变量启用该端点?在不了解您使用的编程语言和服务器的更多信息的情况下,我不知道如何推荐更具体的内容。 我正在测试@nicholasnet's solution 我认为Make sure that URL only accepts request from localhost 会成功

以上是关于AWS、Beanstalk + Worker Tier + Cron 和任务 URL 中的安全性的主要内容,如果未能解决你的问题,请参考以下文章

AWS Elastic Beanstalk Worker 队列行为

AWS Elastic Beanstalk Worker - 根据可用队列消息的数量进行扩展

AWS Elastic Beanstalk Worker 无法连接到 SQS

AWS beanstalk中的worker-tier和web-tier有啥区别

AWS Beanstalk - nginx 强制 SSL 配置更改后,Worker env 不处理后台作业

AWS Elastic Beanstalk Worker 在长时间计算期间不活动后超时