如何允许ECS任务访问RDS

Posted

技术标签:

【中文标题】如何允许ECS任务访问RDS【英文标题】:how to allow ECS task access to RDS 【发布时间】:2017-01-17 22:55:34 【问题描述】:

我有一个从 Lambda 函数执行的 ECS 任务。此任务将在运行 mysql 的 RDS 实例上执行一些基本的 SQL 操作(例如 SELECT、INSERT、UPDATE)。管理从 ECS 任务到 RDS 的访问的正确方法是什么?

我目前正在使用安全组规则连接到 RDS,其中端口 3306 允许来自特定 IP 地址(EC2 实例所在的位置)的连接。

我正在将此功能从 EC2 转移到 ECS 任务。我查看了 IAM 策略,但这些操作似乎用于管理 AWS CLI RDS 操作,并且可能不是这里的解决方案。谢谢!

【问题讨论】:

您目前如何管理来自 EC2 实例的 RDS 访问?您必须以某种方式指定 MySQL 用户名/密码。您是正确的,IAM 不用于管理对 MySQL 服务器实例的访问。 我有一个 mysqlclient(python 库)连接,我提供 un/pw。这部分连接在我的 ECS 任务中将保持不变。我还通过 IP 地址限制对该 EC2 实例的访问,这是我在 ECS 实施中尝试解决的部分。不过,如果有某种方法我可以使用 IAM 角色解决这个问题,那就太好了。 【参考方案1】:

IAM 角色和安全组是两个完全不同的东西,用于不同的目的。您必须打开安全组以允许任何网络流量访问 RDS 服务器。您应该将入站安全组列入白名单,而不是将 IP 地址列入白名单。

比如RDS服务器在安全组1,ECS服务器在安全组2,你可以在安全组1的入站访问规则中输入安全组2的ID,那么你就没有担心服务器更改 IP 地址。

【讨论】:

我遇到了一个问题,我想做同样的事情,但 ECS 集群位于不同的区域,都连接回以写入 ap-southeast-2 中的主 RDS Db 实例.我读到您不能将来自另一个区域的安全组分配为入站组。您有什么建议可以实现这个标志吗? @Chris 如果您使用跨区域 VPC 对等互连,则可以将私有子网 IP 范围列入白名单。 谢谢马克,我会调查的。欣赏它。

以上是关于如何允许ECS任务访问RDS的主要内容,如果未能解决你的问题,请参考以下文章

允许 ECS 任务从 Kinesis 数据流中读取

nodejs中如何访问ecs任务定义环境变量?

ECS 任务。如何在容器中使用 AWS CLI

使用 CloudFormation 在 ECS 服务上定义多个任务

如何用ecs访问rds linux命令

拒绝对 S3 的 ECS 任务访问