将ECS从多业务实例共用安全组迁移至独立安全组
应用场景
当多种不同用途的实例共用同一个安全组时,由于各实例的安全隔离需求不同,这种共用模式不仅无法满足网络隔离和安全管控的要求,还会增加安全组规则的复杂性,增加后续的业务维护难度。因此为保障网络安全、提升管理效率,建议您将不同用途的业务实例拆分至独立安全组。您可以参考本文提供的方法,完成安全组的迁移和分离,实现各实例专属安全组配置,从而提升网络管理的灵活性和安全性。
方案架构
在本示例中,VPC-A的子网Subnet-A01中部署了云服务器实例ECS-01和数据库实例RDS-01,二者目前共用安全组Sg-A。然而,由于ECS-01需要与公网通信,而RDS-01仅需与内网通信,为确保数据库的安全性,并简化后续的业务维护管理,计划将ECS-01从安全组Sg-A中移出,并为其创建独立的安全组Sg-X,从而实现云服务器实例与数据库实例的安全组策略分离。
本示例更换安全组时,需要在新的安全组内创建好规则,并将ECS-01切换过去,整个迁移过程中不会中断ECS的网络流量。

约束与限制
- ECS实例可以更换安全组,RDS实例创建完成后不支持更换安全组。
- 安全组的更多使用限制,具体请参见安全组的使用限制。
资源规划说明

以下资源规划详情仅为示例,您可以根据需要自行修改。
资源类型 |
资源数量 |
说明 |
---|---|---|
虚拟私有云VPC和子网 |
VPC:1 子网:1 |
|
弹性云服务器ECS |
1 |
本示例中,1个ECS,配置说明如下:
|
数据库RDS |
1 |
|
安全组 |
2 |
|
迁移后新建的安全组,本示例为安全组Sg-X。 迁移后:ECS-01的安全组Sg-X,安全组规则如表4所示。 |
方向 |
策略 |
类型 |
协议端口 |
源地址/目的地址 |
描述 |
---|---|---|---|---|---|
入方向 |
允许 |
IPv4 |
TCP: 22 |
源地址:用户本地PC的公网IP地址,本示例为11.13.XX.XX/32 入方向源地址如果设置为0.0.0.0/0表示允许所有外部IP远程登录安全组内实例,由于本示例的ECS-01需要和公网通信,如果将22端口暴露到公网,可能存在网络安全风险,建议此处设置为已知IP地址。 |
放通安全组内实例的SSH(22)端口,用于远程登录Linux ECS。 |
入方向 |
允许 |
IPv4 |
ICMP: 全部 |
IP地址:0.0.0.0/0 |
放通外部实例ping安全组内实例的流量,比如验证用户本地PC和安全组内实例的网络连接情况。 |
入方向 |
允许 |
IPv4 |
全部 |
源地址:当前安全组Sg-A |
针对IPv4,用于安全组内实例之间网络互通。 |
入方向 |
允许 |
IPv6 |
全部 |
源地址:当前安全组Sg-A |
针对IPv6,用于安全组内实例之间网络互通。 |
出方向 |
允许 |
IPv4 |
全部 |
目的地址:0.0.0.0/0 |
针对IPv4,用于安全组内实例访问外部,允许流量从安全组内实例流出。 |
出方向 |
允许 |
IPv6 |
全部 |
目的地址:::/0 |
针对IPv6,用于安全组内实例访问外部,允许流量从安全组内实例流出。 |
方向 |
策略 |
类型 |
协议端口 |
源地址/目的地址 |
描述 |
---|---|---|---|---|---|
入方向 |
允许 |
IPv4 |
TCP: 3306 |
源地址按照以下情况配置,二选一即可:
|
放通安全组内实例的3306端口,用于访问MySQL数据库服务。 |
入方向 |
允许 |
IPv4 |
ICMP: 全部 |
IP地址:0.0.0.0/0 |
放通外部实例ping安全组内实例的流量,比如验证ECS和RDS的网络连接情况。 |
入方向 |
允许 |
IPv4 |
全部 |
源地址:当前安全组Sg-A |
针对IPv4,用于安全组内实例之间网络互通。 |
入方向 |
允许 |
IPv6 |
全部 |
源地址:当前安全组Sg-A |
针对IPv6,用于安全组内实例之间网络互通。 |
出方向 |
允许 |
IPv4 |
全部 |
目的地址:0.0.0.0/0 |
针对IPv4,用于安全组内实例访问外部,允许流量从安全组内实例流出。 |
出方向 |
允许 |
IPv6 |
全部 |
目的地址:::/0 |
针对IPv6,用于安全组内实例访问外部,允许流量从安全组内实例流出。 |
方向 |
策略 |
类型 |
协议端口 |
源地址/目的地址 |
描述 |
---|---|---|---|---|---|
入方向 |
允许 |
IPv4 |
TCP: 22 |
源地址:用户本地PC的公网IP地址,本示例为11.13.XX.XX/32 |
放通安全组内实例的SSH(22)端口,用于远程登录Linux ECS。 |
入方向 |
允许 |
IPv4 |
ICMP: 全部 |
IP地址:0.0.0.0/0 |
放通外部实例ping安全组内实例的流量,比如验证用户本地PC和安全组内ECS的网络连接情况。 |
入方向 |
允许 |
IPv4 |
全部 |
源地址:当前安全组Sg-X |
针对IPv4,用于安全组内实例之间网络互通。 |
入方向 |
允许 |
IPv6 |
全部 |
源地址:当前安全组Sg-X |
针对IPv6,用于安全组内实例之间网络互通。 |
出方向 |
允许 |
IPv4 |
全部 |
目的地址:0.0.0.0/0 |
针对IPv4,用于安全组内实例访问外部,允许流量从安全组内实例流出。 |
出方向 |
允许 |
IPv6 |
全部 |
目的地址:::/0 |
针对IPv6,用于安全组内实例访问外部,允许流量从安全组内实例流出。 |
迁移前资源创建指导(可选)
以下是迁移前资源创建的指导。如果您需要参考本文进行安全组迁移演练,可根据以下指导搭建迁移前的环境。
- 创建1个VPC和1个子网。
具体方法请参见创建虚拟私有云和子网。
- 创建1个安全组Sg-A,并参考表2配置安全组规则。
- 创建1个RDS实例和1个ECS实例,并且确保ECS上的MySQL客户端可正常连接RDS实例。
具体方法请参见购买并通过MySQL客户端连接RDS for MySQL实例。
步骤一:将ECS添加至新的安全组
- 创建1个安全组Sg-X,并参考表4配置安全组规则。
-
ECS有多种登录方法,具体请参见登录弹性云服务器。
- 执行以下命令,通过ECS-01登录数据库RDS-01。
mysql -h RDS-01的内网地址 -P RDS-01的数据库端口 -u 管理员账号 -p
命令示例:
mysql -h 192.168.0.242 -P 3306 -u root -p
登录成功后,在本次迁移过程中,需要持续观察数据库登录情况。
- 在原有安全组Sg-A中添加表5中访问数据库的规则(TCP: 3306),具体方法请参见添加安全组规则。
迁移前,RDS-01和ECS-01位于同一个安全组中,安全组内实例网络互通,因此不需要额外放通3306端口。迁移后,将ECS-01迁移至安全组Sg-X,为确保ECS-01可正常访问RDS-01,则需要在RDS-01所在的安全组Sg-A中放通3306端口。
- 在新建安全组Sg-X中添加ECS-01,具体方法请参见在安全组中添加实例。
- 在原有安全组Sg-A中移出ECS-01,具体方法请参见在安全组中移出实例。
在安全组移出ECS的同时,持续观察数据库登录情况。
- 如果数据库登录没有断开,则说明安全组Sg-A中3306端口配置正常,可继续执行7。
- 如果数据库登录断开,则需要快速恢复环境,在安全组Sg-A中重新添加ECS-01。
- 通过本地PC远程登录ECS-01,验证安全组Sg-X中22端口配置。
以使用PuTTY工具远程登录ECS-01为例,Host Name (or IP address)中输入ECS-01的EIP地址,本示例为1.92.XX.XX。
图3 PuTTY配置 - 执行以下命令,在本地PC ping ECS-01,验证安全组Sg-X中ICMP端口配置。
命令示例:
ping 1.92.XX.XX
步骤二:删除原有安全组中的废弃规则
迁移完成后,待ECS和RDS上的业务正常运行一段时间后,执行以下操作,删除原有安全组中的废弃规则,即ECS使用的规则。
- 删除原有安全组Sg-A中ECS使用的规则,具体方法请参见删除安全组规则。
- 通过本地PC远程登录ECS-01,再次确认ECS-01可正常登录。
以使用PuTTY工具远程登录ECS-01为例,Host Name (or IP address)中输入ECS-01的EIP地址,本示例为1.92.XX.XX。
图4 PuTTY配置 - 执行以下命令,通过ECS-01登录数据库RDS-01,再次确认ECS-01和RDS-01网络连接正常。
mysql -h RDS-01的内网地址 -P RDS-01的数据库端口 -u 管理员账号 -p
命令示例:
mysql -h 192.168.0.242 -P 3306 -u root -p