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有啥区别