ACL
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 |
获取密钥
要使用百度智能云ACL,您需要拥有一个有效的 AK(Access Key ID)和SK(Secret Access Key)用来进行签名认证。AK/SK是由系统分配给用户的,均为字符串,用于标识用户,为访问BOS做签名验证。 可以通过如下步骤获得并了解您的AK/SK信息: 注册百度智能云账号 创建AK/SK
新建AclClient
AclClient是ACL服务的客户端,为开发者与ACL服务进行交互提供了一系列的方法。
通过AK/SK方式访问ACL
1.在新建AclClient之前,需要先创建配置文件对AclClient进行配置,以下将此配置文件命名为acl_sample_conf.py,具体配置信息如下所示:
1#!/usr/bin/env python
2#coding=utf-8
3
4#导入Python标准日志模块
5import logging
6
7#从Python SDK导入ACL配置管理模块以及安全认证模块
8from baidubce.bce_client_configuration import BceClientConfiguration
9from baidubce.auth.bce_credentials import BceCredentials
10
11#设置AclClient的Host,Access Key ID和Secret Access Key
12acl_host = "bj.bcebos.com"
13access_key_id = "AK"
14secret_access_key = "SK"
15
16#设置日志文件的句柄和日志级别
17logger = logging.getLogger('baidubce.http.bce_http_client')
18fh = logging.FileHandler("sample.log")
19fh.setLevel(logging.DEBUG)
20
21#设置日志文件输出的顺序、结构和内容
22formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
23fh.setFormatter(formatter)
24logger.setLevel(logging.DEBUG)
25logger.addHandler(fh)
26
27#创建BceClientConfiguration
28config = BceClientConfiguration(credentials=BceCredentials(access_key_id, secret_access_key), endpoint = acl_host)
注意: 针对日志文件,Logging有如下级别:DEBUG,INFO,WARNING,ERROR,CRITICAL。
在上面代码中,access_key_id对应控制台中的“Access Key ID”,secret_access_key对应控制台中的“Access Key Secret”,获取方式请参考《操作指南 管理ACCESSKEY》。
上面的方式用户需要自己指定BOS的服务的域名,可以通过赋值给bos_host变量来指定。不指定时无需传入endpoint参数,默认为北京区域http://bos.bj.bcebos.com。
2.在完成上述配置之后,参考如下代码新建一个AclClient。
1#导入AclClient配置文件
2import acl_sample_conf
3
4#导入ACL相关模块
5from baidubce import exception
6from baidubce.services import vpc
7from baidubce.services.vpc.acl_client import AclClient
8
9#新建AclClient
10acl_client = AclClient(acl_sample_conf.config)
配置HTTPS协议访问ACL
您可以通过如下两种方式在ACL Python SDK中使用HTTPS访问ACL服务:
- 在endpoint中指定HTTPS:
1config = bce_client_configuration.BceClientConfiguration(
2 credentials = bce_credentials.BceCredentials(
3 access_key_id = 'your-ak',
4 secret_access_key = 'your-sk'
5 ),
6 endpoint = 'https://bj.bcebos.com'
7)
8client = acl_client.AclClient(config)
- 通过在protocol中指定https来设置HTTPS协议:
1config = bce_client_configuration.BceClientConfiguration(
2 credentials = bce_credentials.BceCredentials(
3 access_key_id = 'your-ak',
4 secret_access_key = 'your-sk'
5 ),
6 endpoint = 'bj.bcebos.com',
7 protocol = baidubce.protocol.HTTPS
8)
9client = acl_client.AclClient(config)
注意: 如果您在指定了endpoint的scheme的同时指定了protocol参数,则以endpoint为准。
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
创建acl规则,用于对应子网的访问控制,单次最多可添加20条规则,可以通过如下示例函数实现创建功能:
函数声明
1def create_acl(self, rule_list, client_token=None, config=None):
参数含义
请参考OpenAPI文档 创建ACL参数说明
返回值
-
操作成功:
无返回值
-
操作失败:
抛出异常,异常列表参考 ACL异常列表
代码示例
具体代码示例参考:example_create_acl_rule.py
列举ACL
查询对应vpc下所有的acl,可以通过如下示例函数实现acl查询功能:
函数声明
1def list_acl_entrys(self, vpc_id, config=None):
参数含义
请参考OpenAPI文档 列举ACL参数说明
返回值
-
操作成功:
Plain Text1{ 2 "metadata":"公共返回metadata结构参看附录", 3 "vpcId": "vpc-0d7urd9fyxxx", 4 "vpcName": "v11", 5 "vpcCidr": "192.168.0.0/16", 6 "aclEntrys": [ 7 { 8 "subnetId": "sbn-nfqvsskw93zi", 9 "subnetName": "sbn-22", 10 "subnetCidr": "192.168.1.0/24", 11 "aclRules": [ 12 { 13 "id": "ar-621tcndunsce", 14 "subnetId": "sbn-nfqvsskw93zi", 15 "description": "", 16 "protocol": "tcp", 17 "sourceIpAddress": "192.168.1.0/24", 18 "destinationIpAddress": "1.2.3.4/32", 19 "sourcePort": "0-65535", 20 "destinationPort": "80", 21 "position": 100, 22 "direction": "egress", 23 "ipVersion": 4, 24 "action": "deny" 25 } 26 ] 27 } 28 ] 29}
-
操作失败:
抛出异常,异常列表参考 ACL异常列表
代码示例
具体代码示例参考:example_list_acl.py
列举ACL规则
查询对应子网的所有acl规则,可以通过如下示例函数实现acl规则查询功能:
函数声明
1def list_subnet_acl(self, subnet_id, marker=None, max_keys=None, config=None):
参数含义
请参考OpenAPI文档 列举ACL规则参数说明
返回值
-
操作成功:
Plain Text1{ 2 "metadata":"公共返回metadata结构参看附录", 3 "maxKeys": 1000, 4 "isTruncated": false, 5 "aclRules": [ 6 { 7 "id": "ar-jjxp7g3dihfk", 8 "subnetId": "sbn-0317afqpxw41", 9 "description": "", 10 "protocol": "tcp", 11 "sourceIpAddress": "2400:da00:e003:4c11::/64", 12 "destinationIpAddress": "1::/64", 13 "sourcePort": "0-65535", 14 "destinationPort": "80", 15 "position": 12, 16 "direction": "egress", 17 "ipVersion": 6, 18 "action": "allow" 19 } 20 ] 21}
-
操作失败:
抛出异常,异常列表参考 ACL异常列表
代码示例
具体代码示例参考:example_list_acl_rules.py
更新ACL
更新对应acl规则的具体内容,支持源目的ip,源目的端口等参数的变更,可以通过如下示例函数实现acl更新功能:
函数声明
1def update_acl(self, acl_rule_id, description=None,
2 protocol=None, source_ip_address=None,
3 destination_ip_address=None, source_port=None,
4 destination_port=None,
5 position=None, action=None,
6 client_token=None, config=None):
参数含义
请参考OpenAPI文档 更新ACL参数说明
返回值
-
操作成功:
无返回值
-
操作失败:
抛出异常,异常列表参考 ACL异常列表
代码示例
具体代码示例参考:example_update_acl_rule.py
删除ACL
删除对应acl规则,可以通过如下示例函数实现删除acl功能:
函数声明
1def delete_acl(self, acl_rule_id, client_token=None, config=None):
参数含义
请参考OpenAPI文档 删除ACL参数说明
返回值
-
操作成功:
无返回值
-
操作失败:
抛出异常,异常列表参考 ACL异常列表
代码示例
具体代码示例参考:example_delete_acl_rule.py