通过AlbConfig配置ACL实现访问控制

当您使用ALB Ingress对外暴露服务时,您可以使用访问控制ACL,设置特定IP地址的客户端访问服务请求的允许或拒绝规则。本文介绍如何通过AlbConfig创建、修改访问控制条目以及关联已有访问控制策略组。

工作原理

ALB Ingress通过将访问控制策略组关联到监听,并配置白名单或者黑名单,从而对特定IP地址的客户端请求进行精细化控制。访问控制策略组包含一组IP地址段条目。当您为AlbConfig中的监听关联策略组后,监听会使用策略组中的条目对访问后端服务的请求的源IP进行匹配,使用以下两种方式进行访问控制:

  • 白名单:只允许匹配策略组的源IP访问后端服务。

  • 黑名单:拒绝匹配策略组的源IP访问后端服务。

重要

ACL仅支持使用IPv4地址进行访问控制。

您可参照下图,理解ACL的工作原理。

image

配置方式

您可以使用以下两种方法为监听关联策略组:

对比项

使用aclIds字段(推荐)

使用aclEntries字段

ALB Ingress Controller版本

在2.7.0及之后的版本支持该字段。

所有版本都支持。

能否关联已有策略组

使用已有策略组的ID进行关联。

2.7.0及之后的版本不支持关联已有策略组。

创建策略组的方式

使用前需要在ALB控制台中手动创建策略组。

通过AlbConfig直接创建策略组。

适用场景

适用于有频繁变更策略组IP条目的需求,希望低成本维护的场景。

适用于监听和策略组条目较少,希望快速实现访问控制的情况。

重要
  • ACL配置中的aclIdsaclEntries字段是互斥的,同一个监听只能选择一种方式来配置ACL。如果同时使用两种方式会出现报错。

  • ALB Ingress Controller在2.7.0及之后的版本中,只支持监听使用aclIds字段复用已存在的策略组。

前提条件

已创建AlbConfig,并完成AlbConfig中的监听配置。aclConfig作为监听的属性,需要关联到监听上使用。

使用aclIds字段为监听关联策略组

步骤一:创建访问控制策略组

在配置访问控制之前,您需要先创建访问控制策略组。

  1. 登录应用型负载均衡ALB控制台
  2. 在顶部菜单栏,选择所属地域。

  3. 在左侧导航栏,选择应用型负载均衡ALB > 访问控制

  4. 访问控制页面,单击创建访问控制策略组

  5. 创建访问控制策略组对话框,完成以下配置,然后单击确定

    配置

    说明

    策略组名称

    输入自定义策略组名称。

    所属资源组

    选择一个资源组。

    标签

    设置标签键标签值

    设置标签后,您可以在访问控制页面使用标签筛选访问控制策略组。

步骤二:添加IP条目

创建访问控制策略组后,您需要为每个策略组添加IP条目。IP条目是访问ALB实例的源IP。每个策略组可添加多个IP地址条目或IP地址段条目。

  1. 访问控制页面,找到目标访问控制策略组,然后单击访问策略组ID或在操作列单击管理访问控制策略组

  2. 在访问控制详情页的条目页签,您可以通过以下两种方式添加策略组条目。

    • 单个添加策略组条目

      单击添加条目,在添加策略组条目对话框,输入地址/地址段备注,单击添加

    • 批量添加策略组条目

      单击批量添加条目,在添加策略组条目对话框,按照界面提示批量添加IP地址或IP地址段、备注,单击添加

      说明

      批量添加IP条目时请注意:

      • 每个条目一行,以回车分隔。

      • 每个条目中IP地址或IP地址段与备注之间用竖线(|)分隔,例如192.168.1.0/24|备注

      • 单次最多支持添加20个条目。

  3. 添加完策略组条目后,您可以根据需要执行以下操作。

    • 添加IP条目或IP地址段后,您可以在条目列表中查看IP条目信息。

    • 如果需要删除条目,在目标条目操作列单击删除,或选中目标条目,然后在列表下方单击删除

    • 如果需要导出条目,在条目列表右上角单击下载导出全部条目,或选中目标条目后单击下载导出目标条目。

步骤三:关联策略组

如下方YAML所示,在已有AlbConfig中添加spec.listeners.aclConfig字段,将创建的访问控制策略组ID(例如acl-wtg***)添加到aclIds列表中完成关联。

apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
  name: default
spec:
  config:
  #...
  listeners:
    - port: #...
      protocol: #...
      aclConfig:
        aclType: White # 白名单模式
        aclIds:  
          - acl-wtg***	# 将已有的访问控制策略组ID(acl-wtg***)添加到ACL配置中。
	#...

aclConfig的参数说明如下。

参数

说明

aclType

用于设置监听的ACL为黑名单或白名单。取值为BlackWhite

aclIds

关联的访问控制策略组的ID。

重要

每个监听最多可以关联3个策略组。

步骤四:效果验证

您可以使用一台公网IP不在黑名单内,或在白名单内的客户端机器尝试访问后端服务,验证ACL配置的效果。

创建ALB Ingress中创建的资源为例。

当客户端机器的访问被允许时,能正常访问后端服务:

image

(可选)步骤五:解除关联策略组

如下方YAML所示,如果您需要解除已经关联的访问控制策略组,只需将该策略组对应的ID从aclIds列表中移除,或将aclIds修改为null

apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
  name: default
spec:
  config:
   #...
  listeners:
    - port: #...
      protocol: #...
      aclConfig:
        aclType: White
        aclIds: null  # 将已有的访问控制策略组ID(acl-wtg***)解除。
  #...
说明

在AlbConfig中无法删除策略组,如有需要,您可以登录应用型负载均衡ALB控制台进行删除。

使用aclEntries字段创建访问控制条目

重要
  • ALB Ingress Controller在2.7.0及之后的版本中不再支持使用aclName字段关联已有策略组。每一次对aclName字段中参数的更新,都会创建并关联一个新的策略组。

  • ALB Ingress Controller在2.6.0及之前的版本中,支持一种称为“回写操作”的机制。回写操作的检查条件如下:

    • 如果AlbConfig中的aclConfig字段未填入参数,则会将监听关联的策略组条目回写到AlbConfig。

    • 如果aclConfig字段中已填入参数(或已被回写),则不会对AlbConfig做任何修改。

    在Ingress资源发生变更时,ALB Ingress Controller会使用AlbConfig中的配置覆盖控制台侧的ACL配置。您需要自行维护配置的一致性。

步骤一:配置访问控制策略条目

如下方YAML所示,在已有AlbConfig中添加或修改spec.listeners.aclConfig字段,在aclEntries字段中填入IP地址段。如果在aclName字段中填入了参数,则会以这个参数为名创建新的策略组;如果未填入参数,则会使用acl-{albName}-{port}的规则自动生成参数。

apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
  name: default
spec:
  config:
   #...
  listeners:
    - port: #...
      protocol: #...
      aclConfig:
        aclEntries: 
          - 192.168.XX.XX/16
          - 172.10.XX.XX/16
        aclType: White # 白名单模式
        aclName: "acl-test" # 会创建并关联名为acl-test的新策略组
  #...

aclConfig的参数说明如下。

参数

说明

aclEntries

用于设置访问控制条目IP地址段,且IP地址段必须是完整的CIDR地址,例如127.0.0.1/32。

aclType

用于设置监听的ACL为黑名单或白名单。取值为BlackWhite

aclName

用于设置访问控制策略组的名称。

步骤二:效果验证

您可以使用一台公网IP不在黑名单内,或在白名单内的客户端机器尝试访问后端服务,验证ACL配置的效果。

创建ALB Ingress中创建的资源为例。

当客户端机器的访问被允许时,能正常访问后端服务:

image

(可选)步骤三:移除访问控制策略

如下方YAML所示,访问控制策略条目的移除可以通过变更AlbConfig资源来实现。如下代码已经移除了172.10.XX.XX/16的白名单策略。在AlbConfig中对aclEntries的更新会同步到关联的策略组(本示例为“acl-test”策略组)。aclEntries字段留空时,策略组中的条目会全部移除。

apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
  name: default
spec:
  config:
   #...
  listeners:
    - port: #...
      protocol: #...
      aclConfig:
        aclEntries: 
          - 192.168.XX.XX/16
        aclType: White
        aclName: "acl-test" # acl-test策略组中的172.10.XX.XX/16条目也会被移除
  #...
说明

在AlbConfig中无法删除策略组,如有需要,您可以登录应用型负载均衡ALB控制台进行删除。

相关文档