原理介绍

介绍安全组相关设计

基本概念

  • 安全组缓存:安全组缓存是指向纳管的云平台的一个安全组记录, 一个安全组底下可以有多个安全组缓存, 因此一个安全组可以对应多个平台的多个安全组

背景介绍

  1. 在没有支持公有云之前,安全组仅支持本地IDC, 且当时并未设计vpc,因此安全组是扁平网络底下的网络隔离
  2. 在设计公有云安全组时有两种选择:
    • 每个公有云账号安全组相互隔离,本地安全组和云上安全组一一对应, 因此不可避免的有以下的一些额外操作步骤
      • 需要创建安全组时指定对应的云账号及vpc
      • 创建虚拟机支持的安全组必须是同一云账号及相同vpc
      • 腾讯云安全组有项目的概念,redis实例不能关联不同项目的安全组, 因此安全组必须记录云上项目id信息
      • 部分云平台仅支持允许安全组规则, 在添加安全组规则时,需要根据云平台做规则限制
      • 部分云平台优先级数值越大规则优先级越高,也有部分云平台优先级数值越低优先级越高,用户必须了解每个云平台的优先级概念
    • 依然沿用本地IDC的安全组设计, 每个本地安全组对应多个云上安全组(安全组缓存), 因此在设计上要有更加灵活的步骤
      • 创建虚拟机时指定的本地IDC安全组时,需要根据虚拟机所在的vpc自动找到云上对应的安全组,若没有对应的安全组,需要自动创建安全组
      • 修改安全组规则时,需要根据各个平台对安全组的不同限制进行安全组规则转换(优先级,是否仅支持允许安全组规则)

综合考虑第二种方式更具备灵活性,且不会因为各个平台安全组设计不同,使得安全组割裂,安全组同时对用户透明

安全组操作涉及的操作

安全组创建

安全组本地创建好之后不会对云上安全组有任何影响,且此时的安全组并没有和云上任何安全组关联

安全组规则增删改

  • 安全组规则的变更会影响所有跟此安全组关联的云上安全组(安全组缓存)
  • 安全组的规则的同步是依据规则效果同步, 隐藏像入方向的安全组规则都放开的情况下,再次添加一条放通规则,也不会对云上的安全组规则做修改
  • 若检查到本地安全组规则和云上安全组规则差异较大(同时需要增删10条规则以上), 此时将不会对云上安全组进行变更,但会记录错误日志
  • 若此安全组对应云上多个安全组,需要对每一个云上安全组做比对,若云上的多个安全组规则效果相同,才进行云上安全组规则变更(待开发)

资源创建时指定安全组

  • 资源(例如虚拟机)创建时指定的安全组
    • 若安全组有对应云上的安全组(安全组缓存), 资源会直接关联云上的安全组, 且不会对云上安全组规则做变更操作
    • 若安全组没有有对应云上的安全组(安全组缓存), 首先会创建云上安全组并和本地安全组做关联,同时同步本地规则到云上,资源再绑定当前创建的安全组

云平台安全组到本地的同步

  • 若本地未发现云平台到本地安全组的关联关系
    • 若开启了安全组自动合并功能,会在本地查找一个和云上安全组规则效果相同的安全组, 并将此安全组和云上安全组做关联
    • 若未开启安全组自动合并功能或未在本地找到和云上安全组规则效果相同的安全组, 则会创建一个本地安全组并同步规则,之后再将此安全组和云上安全组关联起来
  • 若本地找到了和云平台之间的关联关系, 则根据关联关系找到对应的本地安全组
    • 若此安全组有且仅有和一个云上安全组有关联,则直接同步云上的安全组规则到本地
    • 若此安全组和多个云上安全组有关联,则跳过安全组规则同步
  • 若发现云上安全组已经删除, 则删除本地和云上安全组的关联关系

云账号删除

  • 云账号删除时会删除所有本地安全组和此云账号底下的安全组关联记录, 若此账号的某个安全组和本地的安全组是一一对应,并且此本地安全组未关联任何资源,此本地安全组也会被删除, 否则会保留此安全组

问题说明

  • 问: 为什么云上安全组有10个,同步完账号后,本地只能看到5个安全组:

  • 答: 云上安全组在本地保存的形式是安全组缓存, 一个本地安全组可以关联多个云上安全组,请检查安全组缓存信息

  • 问: 改了本地的安全组,云上的安全组并没有改

  • 答: 首先看此安全组的缓存是否和云上的安全组有映射,其次看修改的安全组规则会对原先的安全组规则效果有影响

  • 问: 为什么云上安全组有3个,本地同步之后变多了

  • 答: 公有云一般是有多个区域,每个区域不同的vpc又有多个安全组,你可能只看了某一个区域的安全组, 云账号同步时会同步所有区域的安全组