ACL
初始化
确认Endpoint
在确认您使用SDK,需要配置Endpoint时,理解Endpoint相关的概念。 百度智能云目前开放了多区域支持,请参考区域选择说明。 目前支持“华北-北京”、“华南-广州”、"华东-苏州"、"香港"、"金融华中-武汉"和"华北-保定"六个区域。对应Endpoint信息为:
访问区域 | 对应Endpoint |
---|---|
华北-北京 | bcc.bj.baidubce.com |
华南-广州 | bcc.gz.baidubce.com |
华东-苏州 | bcc.su.baidubce.com |
香港 | bcc.hkg.baidubce.com |
金融华中-武汉 | bcc.fwh.baidubce.com |
华北-保定 | bcc.bd.baidubce.com |
获取密钥
要使用百度智能云安全组,您需要拥有一个有效的 AK(Access Key ID)和SK(Secret Access Key)用来进行签名认证。AK/SK是由系统分配给用户的,均为字符串,用于标识用户,为访问BOS做签名验证。 可以通过如下步骤获得并了解您的AK/SK信息: 注册百度智能云账号 创建AK/SK
新建AclClient
AclClient是ACL服务的客户端,为开发者与ACL服务进行交互提供了一系列的方法。
新建AclClient时,需要先使用Endpoint、AK、SK对AclClientConfiguration类型config实例进行配置,再使用config实例对AclClient进行配置,配置示例如下:
static final String HOST = "";
static final String AK = "";
static final String SK = "";
AclClientConfiguration config = new AclClientConfiguration();
config.setCredentials(new DefaultBceCredentials(AK, SK));
config.setEndpoint(HOST);
AclClient aclClient = new AclClient(config);
ACL管理
访问控制列表ACL(Access Control List)是VPC内的防火墙组件,用于控制子网级别的安全策略,灵活设置一个或多个子网的流量,满足用户不同网络部署的安全需求。 ACL管理前,需要关注下列内容:
条目 | ACL规则 |
---|---|
ACL范围 | ACL隶属于VPC,生效对象为该VPC下的子网 |
控制实例类型 | ACL访问控制策略生效于子网下的所有实例,包括BCC、DCC、BBC、RDS、SCS等实例 |
默认ACL规则 | 系统为每个子网创建了默认的ACL,该ACL中有一条默认规则,允许所有规则。默认规则不可以编辑 |
入站或出站 | 入站、出站的方向是指,站在子网下实例角度看到的方向 |
规则最大限制 | 对于同一个ACL下的规则,每个方向支持最多256个规则 |
规则触发 | 流量一旦匹配了ACL中某条规则,即触发访问控制策略(允许或拒绝),不会继续和其他的规则进行匹配 |
ACL状态 | ACL是无状态的,只对一条数据流的指定方向流量做访问控制,不会自动对该条数据流的返回流量做控制。 |
新建ACL
可以使用createAcl函数创建ACL规则,函数定义如下:
public void createAcl(CreateAclRequest createAclRequest) {
......
}
createAcl参数如下:
参数名称 | 类型 | 是否必需 | 描述 |
---|---|---|---|
subnetId | String | 是 | 子网的ID |
protocol | String | 是 | 协议,包括all tcp udp icmp |
sourceIpAddress | String | 是 | 源IP |
destinationIpAddress | String | 是 | 目的IP |
sourcePort | String | 是 | 源端口,例如1-65535,或8080 |
destinationPort | String | 是 | 目的端口,例如1-65535,或8080 |
position | Integer | 是 | 优先级 1-5000且不能与已有条目重复。数值越小,优先级越高,规则匹配顺序为按优先级由高到低匹配 |
direction | String | 是 | 规则的入站ingress 规则的出站egress |
action | String | 是 | 策略,包括allow和deny |
description | String | 否 | 备注 |
注意:
- ACL规则按优先级由高到低匹配,例如优先级50的规则会优先于顺序为100的规则。
- 优先级输入范围是1-32768,作为典型实践,建议上下两条规则的优先级数值区间要大,便于后期调整,如100,200,300等。
- 在同样入站/出站的方向下,不同规则的优先级不能相同。
- 设置ingress规则,需要destinationIpAddress在subnet cidr范围内;设置egress规则,需要sourceIpAddress在subnet cidr范围内。
使用示例如下:
AclRule aclRule = new AclRule();
aclRule.setSubnetId("$subnetId");
aclRule.setDescription("test");
aclRule.setProtocol("tcp");
aclRule.setSourceIpAddress("all");
aclRule.setDestinationIpAddress("all");
aclRule.setSourcePort("8080");
aclRule.setDestinationPort("8080");
aclRule.setPosition(3);
aclRule.setDirection("ingress");
aclRule.setAction("allow");
List<AclRule> aclRules = new ArrayList<AclRule>();
aclRules.add(aclRule);
aclClient.createAcl(aclRules);
列举ACL
列举ACL可以分为两个纬度,分别为列举vpc内所有ACL规则和subnet内所有ACL规则。
列举vpc内所有ACL
可以使用getAcl函数列举vpc内所有ACL,函数定义如下:
public GetAclResponse getAcl(GetAclRequest getAclRequest) {
......
}
使用示例如下:
toJsonPrettyString("get acl Results", aclClient.getAcl("$vpc_id"));
列举subnet内所有ACL
可以使用listAclRules函数列举subnet内所有ACL,函数定义如下:
public ListAclResponse listAclRules(ListAclRequest listAclRequest) {
......
}
使用示例如下:
toJsonPrettyString("list aclRuls Results", aclClient.listAclRules("$subnetId"));
更新ACL
可以使用modifyAclRuleAttributes函数更新ACL规则,函数定义如下:
public void modifyAclRuleAttributes(ModifyAclRuleAttributesRequest modifyAclRuleAttributesRequest) {
......
}
modifyAclRuleAttributes参数包括aclRuleId和AclRule。aclRuleId指定要更新的ACL,AclRule指定要更新的规则内容。字段内容可见新建ACL参数列表,除去subnetId其他字段均可更新。
注意: 更新ACL规则字段时,依然要符合各个字段的填写要求。
使用示例如下:
AclRule aclRule = new AclRule();
aclRule.setSubnetId("$subnetId");
aclRule.setDescription("desc");
aclRule.setProtocol("all");
aclRule.setSourceIpAddress("all");
aclRule.setDestinationIpAddress("all");
aclRule.setSourcePort("8085");
aclRule.setDestinationPort("8085");
aclRule.setPosition(10);
aclRule.setDirection("ingress");
aclRule.setAction("allow");
aclClient.modifyAclRuleAttributes("$aclId", aclRule);
删除ACL
可以使用deleteAcl函数删除ACL规则,函数定义如下:
public void deleteAcl(DeleteAclRequest deleteAclRequest) {
......
}
deleteAcl参数主要包括aclRuleId,确定要删除的ACL规则。
注意: aclRuleId可以通过列举ACL获取,其中默认ACL规则不显示aclRuleId,不能对默认ACL规则进行更新和删除。
使用示例如下:
aclClient.deleteAcl("$aclId");