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

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

场景说明

  • ALB实例未加入安全组时,ALB监听端口默认对所有请求放行。

  • ALB实例加入安全组且未设置任何拒绝策略时,ALB监听端口默认对所有请求放通。如果您需要只允许特定IP访问ALB,请注意添加一条拒绝策略进行兜底。

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

重要

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

当您希望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支持加入的安全组

    • 普通安全组

    • 企业级安全组

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

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

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

    关于普通安全组和企业安全组的介绍,请参见普通安全组与企业级安全组

    ALB不支持加入的安全组

    托管安全组

    关于托管安全组的介绍,请参见托管安全组

前提条件

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

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

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

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

      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

配置流程

image

操作步骤

步骤一:创建服务器组

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

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

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

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

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

    配置

    说明

    服务器组类型

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

    服务器组名称

    输入服务器组名称。

    VPC

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

    选择后端协议

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

    选择调度算法

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

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

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

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

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

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

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

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

    此处仅列出和本文强相关的配置项,其他未列出的配置项使用默认值。关于参数的更多信息,请参见创建应用型负载均衡

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

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

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

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

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

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

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

    配置

    说明

    选择监听协议

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

    监听端口

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

    转发的后端服务器组

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

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

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

    配置

    说明

    选择监听协议

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

    监听端口

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

    转发的后端服务器组

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

步骤三:设置域名解析

复制ALB实例对应的DNS名称,完成以下步骤,为您的自有域名添加1条指向ALB实例DNS名称的CNAME记录。

  1. 登录域名解析控制台

  2. 域名解析页面单击添加域名

  3. 添加域名对话框输入您的主机域名,然后单击确认

    重要

    您的主机域名需已完成TXT记录验证。

  4. 在目标域名的操作列单击解析设置

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

  6. 添加记录面板,配置以下信息完成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

      协议类型

      协议类型选择自定义TCP

      说明

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

      端口范围

      输入端口号81

      授权对象

      选择所有IPv4(0.0.0.0/0)所有IPv6(::/0)

      描述

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

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

测试客户端与ECS实例ECS01和ECS02之间的连通性。本文以任意一台可以访问公网的客户端为例。

  1. 在浏览器输入访问地址和端口号,例如http://访问地址:80,可以看到如下图所示,表示ALB可以访问HTTP协议的80端口。

    image

  2. 在浏览器输入访问地址和端口号,例如http://访问地址:81,可以看到如下图所示,表示ALB可以访问HTTP协议的81端口。

    image

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

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

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

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

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

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

    授权策略

    优先级

    协议类型

    端口范围

    授权对象

    允许

    1

    自定义TCP

    目的:80/80

    源:所有IPv4(0.0.0.0/0)

    允许

    1

    自定义TCP

    目的:80/80

    源:所有IPv6(::/0)

    拒绝

    1

    自定义TCP

    目的:81/81

    源:所有IPv4(0.0.0.0/0)

    拒绝

    1

    自定义TCP

    目的:81/81

    源:所有IPv6(::/0)

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

    1. 在浏览器输入访问地址和端口号,例如http://访问地址:80,可以看到类似下图所示,表示ALB实例可以访问HTTP协议的80端口。

      image

    2. 在浏览器输入访问地址和端口号,例如http://访问地址:81,如果无法访问应用服务,可以打开命令行窗口,执行curl http://访问地址:81,如果出现如下图所示结果,则表示客户端无法访问ALB实例的HTTP监听的81端口,这表明ALB实例的安全组对81端口的访问控制已生效。

      image

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

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

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

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

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

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

    授权策略

    优先级

    协议类型

    端口范围

    授权对象

    拒绝

    1

    自定义TCP

    目的:80/80

    源:所有IPv4(0.0.0.0/0)

    拒绝

    1

    自定义TCP

    目的:80/80

    源:所有IPv6(::/0)

    拒绝

    1

    自定义TCP

    目的:81/81

    源:所有IPv4(0.0.0.0/0)

    拒绝

    1

    自定义TCP

    目的:81/81

    源:所有IPv6(::/0)

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

    1. 打开命令行窗口,执行curl http://访问地址:80,如果出现如下图所示,则表示客户端无法访问ALB实例HTTP监听的80端口,这表明ALB实例的安全组对80端口访问控制已生效。

      image

    2. 打开命令行窗口,执行curl http://访问地址:81,如果出现如下图所示,则表示客户端无法访问ALB实例HTTP监听的81端口,这表明ALB实例的安全组对81端口访问控制已生效。

      image

相关文档