原理介绍
介绍安全组相关设计
基本概念
- 安全组缓存:安全组缓存是指向纳管的云平台的一个安全组记录, 一个安全组底下可以有多个安全组缓存, 因此一个安全组可以对应多个平台的多个安全组
背景介绍
- 在没有支持公有云之前,安全组仅支持本地IDC, 且当时并未设计vpc,因此安全组是扁平网络底下的网络隔离
- 在设计公有云安全组时有两种选择:
- 每个公有云账号安全组相互隔离,本地安全组和云上安全组一一对应, 因此不可避免的有以下的一些额外操作步骤
- 需要创建安全组时指定对应的云账号及vpc
- 创建虚拟机支持的安全组必须是同一云账号及相同vpc
- 腾讯云安全组有项目的概念,redis实例不能关联不同项目的安全组, 因此安全组必须记录云上项目id信息
- 部分云平台仅支持允许安全组规则, 在添加安全组规则时,需要根据云平台做规则限制
- 部分云平台优先级数值越大规则优先级越高,也有部分云平台优先级数值越低优先级越高,用户必须了解每个云平台的优先级概念
- 依然沿用本地IDC的安全组设计, 每个本地安全组对应多个云上安全组(安全组缓存), 因此在设计上要有更加灵活的步骤
- 创建虚拟机时指定的本地IDC安全组时,需要根据虚拟机所在的vpc自动找到云上对应的安全组,若没有对应的安全组,需要自动创建安全组
- 到云上创建安全组时,需要根据各个平台对安全组的不同限制进行安全组规则转换(优先级,是否仅支持允许安全组规则)
- 每个公有云账号安全组相互隔离,本地安全组和云上安全组一一对应, 因此不可避免的有以下的一些额外操作步骤
综合考虑第二种方式更具备灵活性,且不会因为各个平台安全组设计不同,使得安全组割裂,安全组同时对用户透明
说明
自v3.10开始,移除了本地安全组规则向云上同步的逻辑,主要原因是有安全隐患, 且实现复杂。
- 不同的云之间由于优先级, 安全组支持的特性不相同(例如ipv6, ip模板, 特殊协议规则)
- 云上同步到本地的安全组本身可能已经丢失了一部分规则, 再往云上同步时会因为优先级的原因会覆盖掉云上的一部分规则
安全组操作涉及的操作
安全组创建
安全组本地创建好之后不会对云上安全组有任何影响,且此时的安全组并没有和云上任何安全组关联
安全组规则增删改
- 安全组规则的变更仅会影响本地IDC的虚拟机, 不会同步到规则到各个云平台
- 若需要支持将本地安全组规则同步至云上可以到云上修改安全组规则, 或者通过以下步骤
- 克隆已有安全组到新的安全组, 并且修改新的安全组规则
- 绑定新的安全组到目标实例
安全组删除
只有未被使用的安全组(未绑定任何虚拟机的安全组)才能被删除
- 安全组删除会依次删除安全组下面缓存所对应的云上安全组,最终删除本地安全组
资源创建时绑定安全组
- 资源(例如虚拟机)创建时绑定的安全组
- 若安全组有对应云上的安全组(安全组缓存), 资源会直接关联云上的安全组, 且不会对云上安全组规则做变更操作
- 若安全组没有有对应云上的安全组(安全组缓存), 首先会创建云上安全组并和本地安全组做关联,同时同步本地规则到云上,资源再绑定当前创建的安全组
云平台安全组到本地的同步
- 若本地未发现云平台到本地安全组的关联关系
- 若开启了安全组自动合并功能,会在本地查找一个和云上安全组规则效果相同的安全组, 并将此安全组和云上安全组做关联
- 若未开启安全组自动合并功能或未在本地找到和云上安全组规则效果相同的安全组, 则会创建一个本地安全组并同步规则,之后再将此安全组和云上安全组关联起来
- 若本地找到了和云平台之间的关联关系, 则根据关联关系找到对应的本地安全组
- 若此安全组有且仅有和一个云上安全组有关联且未关联本地IDC虚拟机,则直接同步云上的安全组规则到本地
- 若此安全组和多个云上安全组有关联或关联了本地IDC虚拟机
- 若关闭自动分离安全组, 则跳过安全组规则同步
- 若开启自动分离安全组, 则比对安全组规则是否一致,若不一致,则会新建安全组并将缓存转移至新的安全组, 资源同步时会自动关联新的安全组
- 默认开启自动分离安全组功能
- 若发现云上安全组已经删除, 则删除本地和云上安全组的关联关系
云账号删除
- 云账号删除时会删除所有本地安全组和此云账号底下的安全组关联记录, 若此账号的某个安全组和本地的安全组是一一对应,并且此本地安全组未关联任何资源,此本地安全组也会被删除, 否则会保留此安全组
问题说明
问: 为什么云上安全组有10个,同步完账号后,本地只能看到5个安全组:
答: 云上安全组在本地保存的形式是安全组缓存, 一个本地安全组可以关联多个云上安全组,请检查安全组缓存信息
问: 改了本地的安全组,云上的安全组并没有改
答: 修改本地安全组,云上的安全组并不会变更
问: 为什么云上安全组有3个,本地同步之后变多了
答: 公有云一般是有多个区域,每个区域不同的vpc又有多个安全组,你可能只看了某一个区域的安全组, 云账号同步时会同步所有区域的安全组