我们在 AWS 上有以下设置:8 个 Elastic Beanstalk 环境(4 个 QA、4 个 PROD)读取和写入数据。通常,1 个环境(API)始终从 DynamoDB 和 RDS 读取数据,而 1 个环境(数据收集器的作业服务器)通常写入数据。
为了提高性能,我们创建了一个可供应用程序逻辑访问的 memcached 服务器。通常,上述 API 服务器会尝试从缓存中读取(如果找不到该项目,则会添加),而作业服务器会使缓存项目无效,以强制 API 从数据库中读取它们。
到目前为止,一切顺利,一切正常。现在的主要问题是安全设置。memcached 需要打开端口 11211,这样全世界都可以通过 telnet 访问它并读取我们的缓存设置。
我首先将 memcached 服务器的安全组设置为仅允许来自我们的 VPN 服务器的传入连接,以便我们的开发机器可以访问它。工作正常,只有 3 个 CIDR。然后我尝试添加 Elastic Beanstalk 环境的安全组来执行相同操作。这似乎不再起作用了我无法从 Elastic Beanstalk 服务器访问 memcached 服务器。我在 CLI 上所做的基本操作
aws ec2 authorize-security-group-ingress --group-name security-group-of-memcached-server --protocol tcp --port 11211 --source-group xxx-rds-associations --group-owner 517999993
其中 xxx-rds-associations 是 Elastic Beanstalk 环境及其实例的安全组。为了避免愚蠢的应用程序配置问题,我还通过 RDP 进入服务器并尝试使用 telnet 访问 memcached 服务器。同样没有用。
我这边是否存在基本误解?向源添加安全组是否不允许具有该组的服务器访问目标服务器?
或者我只是错过了什么?
欢迎大家提出意见。此致 Marco