ALB配置安全组实现基于监听/端口粒度的访问控制

为了提高云上流量入口安全性,如果您需要对ALB进行基于协议/端口/IP的访问控制,可以通过为ALB实例配置安全组来实现。相较于ACL,ALB通过安全组能实现更全面的访问控制,不仅能配置基于协议/端口的访问控制,而且支持IPv6地址类型的访问控制策略。

场景说明

当您的ALB实例有访问控制的诉求,希望控制ALB实例的入流量时,您可以选择为ALB实例添加安全组,同时可基于业务设置相应的安全组规则。

重要
  • 负载均衡的出方向流量为用户请求的回包。为了保证您的业务正常运行,ALB的安全组对出流量不做限制,您无需额外配置安全组出方向规则。

  • ALB实例创建完成后,系统会在实例所在的VPC网络下自动生成一个托管安全组,由ALB实例进行管理,您只有查看权限,没有操作权限。ALB托管安全组包括以下2类安全组规则:

    • 优先级为1的规则:默认放通Local IP(用于与后端服务器通信)。

      新增安全组规则时,建议您避免对ALBLocal IP添加优先级为1的拒绝策略,以确保新增的安全组规则不会与ALB托管安全组策略冲突,因为这可能会影响ALB与您后端服务之间的正常通信。您可以登录应用型负载均衡ALB控制台,在实例详情页面查看Local IP。

    • 优先级为100的规则:默认放通所有IP,即ALB加入安全组且未设置任何拒绝策略时,ALB监听端口默认对所有请求放通。

      普通安全组或企业安全组的默认访问控制规则(不可见)中存在1条拒绝其他任何流量的规则,此时,ALB托管安全组的默认放通规则会优先生效。

本文从以下三种场景来说明ALB实例加入安全组对端口的访问控制,以ALB实例配置HTTP 80监听和HTTP 81监听为例说明。

场景

安全组规则

预期效果

相关链接

ALB实例未加入安全组

ALB监听端口默认对所有请求放行

  • 允许客户端访问ALB实例的HTTP 80端口

  • 允许客户端访问ALB实例的HTTP 81端口

步骤五:ALB未加入安全组并验证结果

ALB实例加入安全组

拒绝访问HTTP协议的81端口

说明

此处仅列出与本文强相关的安全组规则,其余默认规则未列出。

  • 允许客户端访问ALB实例的HTTP 80端口

  • 拒绝客户端访问ALB实例的HTTP 81端口

步骤六:ALB实例加入安全组并验证结果

修改ALB实例加入的安全组

  • 拒绝访问HTTP协议的80端口

  • 拒绝访问HTTP协议的81端口

说明

此处仅列出与本文强相关的安全组规则,其余默认规则未列出。

  • 拒绝客户端访问ALB实例的HTTP 80端口

  • 拒绝客户端访问ALB实例的HTTP 81端口

步骤七:修改安全组并验证结果

使用限制

重要

ALB升级实例支持通过安全组或ACL来管理访问流量。升级前的ALB实例,仅支持通过ACL来进行访问控制。若您需要使用安全组,请新建实例或向商务经理申请存量实例的升级。

分类

安全组类型

说明

ALB支持加入的安全组

  • 普通安全组

  • 企业级安全组

  • 要求安全组为专有网络类型,且安全组和ALB实例属于同一个专有网络VPC(Virtual Private Cloud)。

  • ALB实例可加入的安全组数量及可关联的安全组规则数量,均遵循ECS安全组相关配额的限制:

  • 同一个ALB实例加入的安全组类型需保持一致,即不支持同时加入普通安全组和企业级安全组。

    某个ALB实例已加入普通安全组,如果需要加入企业级安全组,可解绑当前ALB实例的所有普通安全组后再行操作,反之亦然。

普通安全组和企业安全组详情请参见普通安全组与企业级安全组

ALB不支持加入的安全组

托管安全组

托管安全组详情请参见托管安全组

前提条件

  • 您已创建了专有网络VPC1。具体操作,请参见创建和管理专有网络

  • 您已在VPC1中创建ECS01ECS02实例,ECS01ECS02实例作为ALB实例的后端服务器,且ECS01ECS02实例中部署了2个不同的应用服务。

    • 关于如何创建ECS实例,请参见自定义购买实例

      如果您需要测试ALB配置安全组对IPv6地址访问控制能力,请确保ECS01ECS02支持IPv6通信

    • 本文ECS01ECS02部署测试应用服务示例如下:

      ECS01服务部署命令

      yum install -y nginx
      systemctl start nginx.service
      cd /usr/share/nginx/html/
      echo "Hello World ! This is ECS01." > index.html

      ECS02服务部署命令

      yum install -y nginx
      systemctl start nginx.service
      cd /usr/share/nginx/html/
      echo "Hello World ! This is ECS02." > index.html

操作步骤

步骤一:创建服务器组

  1. 登录应用型负载均衡ALB控制台
  2. 在顶部菜单栏,选择服务器组所属的地域。本文选择华东1(杭州)

  3. 在左侧导航栏,选择应用型负载均衡ALB > 服务器组

  4. 服务器组页面,单击创建服务器组

  5. 创建服务器组对话框中,完成以下配置,然后单击创建

    此处仅列出与本文强相关的配置项,其余部分参数可保持默认值。更多信息,请参见创建和管理服务器组

    配置

    说明

    服务器组类型

    选择一种服务器组类型。本文选择服务器类型

    服务器组名称

    输入服务器组名称。

    VPC

    VPC下拉列表中选择一个VPC。本文选择已创建的VPC1。

    选择后端协议

    选择一种后端协议。本文选择HTTP

    选择调度算法

    选择一种调度算法。本文选择加权轮询

  6. 服务器组创建成功对话框中单击添加后端服务器

  7. 后端服务器页签单击添加后端服务器

  8. 添加后端服务器面板,选择已创建的ECS01ECS02实例,然后单击下一步

  9. 为已添加的服务器设置端口和权重,然后单击确定

步骤二:创建ALB实例并配置监听

  1. 登录应用型负载均衡ALB控制台
  2. 实例页面,单击创建应用型负载均衡

  3. 在购买页面,完成以下配置。

    此处仅列出和本文强相关的配置项,其他未列出的配置项使用默认值。关于参数的更多信息,请参见创建和管理ALB实例

    • 地域:本文选择华东1(杭州)

    • 实例网络类型:本文选择公网

    • VPC:本文选择已创建的VPC1。

    • 协议版本:默认为IPv4,如需同时支持客户端使用IPv4IPv6地址访问,请选择双栈

  4. 单击立即购买,然后根据控制台提示完成实例开通。

  5. 返回实例页面,找到已创建的ALB实例,单击该ALB实例ID。

  6. 单击监听页签,然后单击快速创建监听

  7. 快速创建监听对话框中,配置以下参数,完成HTTP 80监听的创建,然后单击确定

    配置

    说明

    选择监听协议

    选择监听的协议类型。本文选择HTTP

    监听端口

    输入监听端口。本文输入80

    转发的后端服务器组

    服务器类型下选择目标服务器组。本文选择已创建的服务器组。

  8. 监听页签,单击快速创建监听

  9. 快速创建监听对话框中,配置以下参数,完成HTTP 81监听的创建,然后单击确定

    配置

    说明

    选择监听协议

    选择监听的协议类型。本文选择HTTP

    监听端口

    输入监听端口。本文输入81

    转发的后端服务器组

    服务器类型下选择目标服务器组。本文选择已创建的服务器组。

步骤三:设置域名解析

实际业务场景中,建议您使用自有域名,通过CNAME解析的方式将自有域名指向ALB实例域名。

  1. 在左侧导航栏,选择应用型负载均衡 ALB > 实例

  2. 实例页面,复制已创建的ALB实例的DNS名称。

  3. 执行以下步骤添加CNAME解析记录。

    说明

    对于非阿里云注册域名,需先将域名添加到云解析控制台,才可以进行域名解析设置。具体操作,请参见域名管理。如果您是阿里云注册的域名,请直接执行以下步骤。

    1. 登录域名解析控制台

    2. 权威域名解析页面,找到目标域名,在操作列单击解析设置

    3. 解析设置页面,单击添加记录

    4. 添加记录面板,配置以下信息完成CNAME解析配置,然后单击确定

      配置

      说明

      记录类型

      在下拉列表中选择CNAME

      主机记录

      您的域名的前缀。本文输入@

      说明

      创建域名为根域名时,主机记录为@

      解析请求来源

      选择默认。

      记录值

      输入域名对应的CNAME地址,即您复制的ALB实例的DNS名称。

      TTL

      全称Time To Live,表示DNS记录在DNS服务器上的缓存时间,本文使用默认值。

步骤四:创建安全组

ALB实例加入安全组前,您需要先至ECS管理控制台创建安全组。

  1. 登录ECS管理控制台

  2. 在左侧导航栏,选择网络与安全 > 安全组

  3. 在顶部菜单栏,选择安全组所属的地域。本文选择华东1(杭州)

  4. 安全组页面,单击创建安全组

  5. 创建安全组页面,设置安全组的基本信息参数。

    此处仅列出和本文强相关的配置项,其余参数的配置请参见创建安全组

    • 网络:本文选择已创建的专有网络VPC。

    • 安全组类型:本文选择普通安全组

  6. 在默认的安全组规则上,重复以下步骤,分别配置新增的安全组访问规则,然后单击确定创建

    1. 规则配置区域单击增加规则

    2. 新建安全组规则对话框,配置新增的安全组规则,然后单击确定

    配置

    规则1:拒绝所有IPv4地址对81端口的访问

    (可选)规则2:拒绝所有IPv6地址对81端口的访问

    (可选)规则3:允许所有IPv6地址对80端口的访问

    授权策略

    选择拒绝

    选择允许

    优先级

    优先级保持默认值1

    协议

    协议类型选择自定义TCP

    说明

    在设置QUIC监听的安全组规则时,协议类型选择自定义UDP

    访问来源

    选择IPv4并选择0.0.0.0/0(任何位置)

    选择IPv6并选择::/0(任何位置)

    选择IPv6并选择::/0(任何位置)

    访问目的(本实例)

    输入端口号81

    选择端口号HTTP(80)

    描述

    输入安全组规则描述信息。

步骤五:ALB未加入安全组并验证结果

测试客户端与ECS01ECS02之间的连通性。

本文以任意一台可以访问公网的客户端为例。如果您需要测试ALB配置安全组对IPv6地址访问控制能力,请确保该客户端支持IPv6公网通信

  1. 打开命令行窗口,执行curl -4 http://<自有域名>:80,可以看到如下图所示,表示IPv4客户端可通过ALB访问HTTP协议80端口。

    未加入安全组-IPv4访问80

  2. 执行curl -4 http://<自有域名>:81,可以看到如下图所示,表示IPv4客户端可通过ALB访问HTTP协议81端口。

    未加入安全组-IPv4访问81

  3. (可选)执行curl -6 http://<自有域名>:80,可以看到如下图所示,表示IPv6客户端可通过ALB访问HTTP协议80端口。

    未加入安全组-IPv6访问80

  4. (可选)执行curl -6 http://<自有域名>:81,可以看到如下图所示,表示IPv6客户端可通过ALB访问HTTP协议81端口。

    未加入安全组-IPv6访问81

步骤六:ALB实例加入安全组并验证结果

ALB实例加入安全组,并验证安全组规则是否对ALB实例的端口的访问控制生效。

  1. 登录应用型负载均衡ALB控制台
  2. ALB实例页面,找到目标ALB实例,单击实例ID,在实例详情页面单击安全组页签。

  3. 安全组页签,单击添加安全组,在弹出的ALB实例加入安全组对话框中,选择步骤四:创建安全组创建的安全组,然后单击确定

  4. 在左侧列表框单击目标安全组ID,可单击入方向出方向页签分别查看安全组规则。

    此处仅列出与本文强相关的安全组入方向规则。此时ALB实例的安全组规则如下:

    授权策略

    优先级

    协议

    访问来源

    访问目的

    允许

    1

    自定义TCP

    IPv4任何位置(0.0.0.0/0)

    端口HTTP(80)

    允许

    1

    自定义TCP

    IPv6任何位置(0::/0)

    端口HTTP(80)

    拒绝

    1

    自定义TCP

    IPv4任何位置(0.0.0.0/0)

    端口81/81

    拒绝

    1

    自定义TCP

    IPv6任何位置(0::/0)

    端口81/81

  5. ALB实例加入安全组后,测试访问结果。

    1. 在客户端的命令行窗口,执行curl -4 http://<自有域名>:80,可以看到如下图所示,表示IPv4客户端可通过ALB访问HTTP协议80端口。

      加入安全组-IPv4访问80

    2. (可选)执行curl -6 http://<自有域名>:80,可以看到如下图所示,表示IPv6客户端可通过ALB访问HTTP协议80端口。

      加入安全组-IPv6访问80

    3. 执行curl -4 http://<自有域名>:81,可以看到如下图所示,IPv4客户端无法访问HTTP协议的81端口,表示ALB实例的安全组对81端口的访问控制已生效。

      加入安全组-IPv4访问81

    4. (可选)执行curl -6 http://<自有域名>:81,可以看到如下图所示,IPv6客户端无法访问HTTP协议的81端口,表示ALB实例的安全组对81端口的访问控制已生效。

      加入安全组-IPv6访问81

步骤七:修改安全组并验证结果

修改安全组规则,并验证修改后的安全组规则是否对ALB实例的端口访问控制生效。

  1. 返回ALB实例页面,找到目标ALB实例,单击实例ID。在实例详情页签,单击安全组页签。

  2. 基本信息区域单击安全组ID,或在安全组页签右上角单击前往ECS控制台编辑,进入安全组规则页面修改安全组规则。

  3. 安全组规则页面,找到允许访问TCP协议80端口的规则,在操作列单击编辑,修改授权策略拒绝,单击确定

    此处仅列出与本文强相关的安全组规则。修改后的安全组规则如下:

    授权策略

    优先级

    协议

    访问来源

    访问目的

    拒绝

    1

    自定义TCP

    IPv4任何位置(0.0.0.0/0)

    端口HTTP(80)

    拒绝

    1

    自定义TCP

    IPv6任何位置(0::/0)

    端口HTTP(80)

    拒绝

    1

    自定义TCP

    IPv4任何位置(0.0.0.0/0)

    端口81/81

    拒绝

    1

    自定义TCP

    IPv6任何位置(0::/0)

    端口81/81

  4. 修改ALB实例加入的安全组规则后,测试访问结果。

    1. 在客户端的命令行窗口,执行curl -4 http://<自有域名>:80,如果出现如下图所示,IPv4客户端无法访问HTTP协议的80端口,表示ALB实例的安全组对80端口访问控制已生效。

      修改安全组-IPv4访问80

    2. (可选)执行curl -6 http://<自有域名>:80,如果出现如下图所示,IPv6客户端无法访问HTTP协议的80端口,表示ALB实例的安全组对80端口访问控制已生效。

      修改安全组-IPv6访问80

    3. 执行curl -4 http://<自有域名>:81,如果出现如下图所示,IPv4客户端无法访问HTTP协议的81端口,表示ALB实例的安全组对81端口访问控制已生效。

      修改安全组-IPv4访问81

    4. (可选)执行curl -6 http://<自有域名>:81,如果出现如下图所示,IPv6客户端无法访问HTTP协议的81端口,表示ALB实例的安全组对81端口的访问控制已生效。

      修改安全组-IPv6访问81

相关文档

控制台操作文档

API文档