当您使用ALB Ingress对外暴露服务时,您可以使用访问控制ACL,设置特定IP地址的客户端访问服务请求的允许或拒绝规则。本文介绍如何通过AlbConfig创建、修改访问控制条目以及关联已有访问控制策略组。
工作原理
ALB Ingress通过将访问控制策略组关联到监听,并配置白名单或者黑名单,从而对特定IP地址的客户端请求进行精细化控制。访问控制策略组包含一组IP地址段条目。当您为AlbConfig中的监听关联策略组后,监听会使用策略组中的条目对访问后端服务的请求的源IP进行匹配,使用以下两种方式进行访问控制:
白名单:只允许匹配策略组的源IP访问后端服务。
黑名单:拒绝匹配策略组的源IP访问后端服务。
ACL仅支持使用IPv4地址进行访问控制。
您可参照下图,理解ACL的工作原理。
配置方式
您可以使用以下两种方法为监听关联策略组:
对比项 | ||
ALB Ingress Controller版本 | 在2.7.0及之后的版本支持该字段。 | 所有版本都支持。 |
能否关联已有策略组 | 使用已有策略组的ID进行关联。 | 2.7.0及之后的版本不支持关联已有策略组。 |
创建策略组的方式 | 使用前需要在ALB控制台中手动创建策略组。 | 通过AlbConfig直接创建策略组。 |
适用场景 | 适用于有频繁变更策略组IP条目的需求,希望低成本维护的场景。 | 适用于监听和策略组条目较少,希望快速实现访问控制的情况。 |
ACL配置中的
aclIds
和aclEntries
字段是互斥的,同一个监听只能选择一种方式来配置ACL。如果同时使用两种方式会出现报错。ALB Ingress Controller在2.7.0及之后的版本中,只支持监听使用
aclIds
字段复用已存在的策略组。
前提条件
已创建AlbConfig,并完成AlbConfig中的监听配置。aclConfig
作为监听的属性,需要关联到监听上使用。
使用aclIds字段为监听关联策略组
步骤一:创建访问控制策略组
在配置访问控制之前,您需要先创建访问控制策略组。
- 登录应用型负载均衡ALB控制台。
在顶部菜单栏,选择所属地域。
在左侧导航栏,选择 。
在访问控制页面,单击创建访问控制策略组。
在创建访问控制策略组对话框,完成以下配置,然后单击确定。
配置
说明
策略组名称
输入自定义策略组名称。
所属资源组
选择一个资源组。
标签
设置标签键和标签值。
设置标签后,您可以在访问控制页面使用标签筛选访问控制策略组。
步骤二:添加IP条目
创建访问控制策略组后,您需要为每个策略组添加IP条目。IP条目是访问ALB实例的源IP。每个策略组可添加多个IP地址条目或IP地址段条目。
在访问控制页面,找到目标访问控制策略组,然后单击访问策略组ID或在操作列单击管理访问控制策略组。
在访问控制详情页的条目页签,您可以通过以下两种方式添加策略组条目。
单个添加策略组条目
单击添加条目,在添加策略组条目对话框,输入地址/地址段和备注,单击添加。
批量添加策略组条目
单击批量添加条目,在添加策略组条目对话框,按照界面提示批量添加IP地址或IP地址段、备注,单击添加。
说明批量添加IP条目时请注意:
每个条目一行,以回车分隔。
每个条目中IP地址或IP地址段与备注之间用竖线(|)分隔,例如192.168.1.0/24|备注。
单次最多支持添加20个条目。
添加完策略组条目后,您可以根据需要执行以下操作。
添加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
的参数说明如下。
参数 | 说明 |
| 用于设置监听的ACL为黑名单或白名单。取值为Black或White。 |
| 关联的访问控制策略组的ID。 重要 每个监听最多可以关联3个策略组。 |
步骤四:效果验证
您可以使用一台公网IP不在黑名单内,或在白名单内的客户端机器尝试访问后端服务,验证ACL配置的效果。
以ALB Ingress快速入门中创建的资源为例。
当客户端机器的访问被允许时,能正常访问后端服务:
(可选)步骤五:解除关联策略组
如下方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
的参数说明如下。
参数 | 说明 |
| 用于设置访问控制条目IP地址段,且IP地址段必须是完整的CIDR地址,例如127.0.0.1/32。 |
| 用于设置监听的ACL为黑名单或白名单。取值为Black或White。 |
| 用于设置访问控制策略组的名称。 |
步骤二:效果验证
您可以使用一台公网IP不在黑名单内,或在白名单内的客户端机器尝试访问后端服务,验证ACL配置的效果。
以ALB Ingress快速入门中创建的资源为例。
当客户端机器的访问被允许时,能正常访问后端服务:
(可选)步骤三:移除访问控制策略
如下方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控制台进行删除。