私有网络VPC

    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,具体配置信息如下所示:

    #!/usr/bin/env python
    #coding=utf-8
    
    #导入Python标准日志模块
    import logging
    
    #从Python SDK导入ACL配置管理模块以及安全认证模块
    from baidubce.bce_client_configuration import BceClientConfiguration
    from baidubce.auth.bce_credentials import BceCredentials
    
    #设置AclClient的Host,Access Key ID和Secret Access Key
    acl_host = "bj.bcebos.com"
    access_key_id = "AK"
    secret_access_key = "SK"
    
    #设置日志文件的句柄和日志级别
    logger = logging.getLogger('baidubce.http.bce_http_client')
    fh = logging.FileHandler("sample.log")
    fh.setLevel(logging.DEBUG)
    
    #设置日志文件输出的顺序、结构和内容
    formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
    fh.setFormatter(formatter)
    logger.setLevel(logging.DEBUG)
    logger.addHandler(fh)
    
    #创建BceClientConfiguration
    config = 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。

    #导入AclClient配置文件
    import acl_sample_conf 
    		
    #导入ACL相关模块
    from baidubce import exception
    from baidubce.services import vpc
    from baidubce.services.vpc.acl_client import AclClient
    	
    #新建AclClient
    acl_client = AclClient(acl_sample_conf.config)

    配置HTTPS协议访问ACL

    您可以通过如下两种方式在ACL Python SDK中使用HTTPS访问ACL服务:

    • 在endpoint中指定HTTPS:
    config = bce_client_configuration.BceClientConfiguration(
        credentials = bce_credentials.BceCredentials(
            access_key_id = 'your-ak',
      	    secret_access_key = 'your-sk'
        ),
        endpoint = 'https://bj.bcebos.com'
    )
    client = acl_client.AclClient(config)
    • 通过在protocol中指定https来设置HTTPS协议:
    config = bce_client_configuration.BceClientConfiguration(
        credentials = bce_credentials.BceCredentials(
            access_key_id = 'your-ak',
    	    secret_access_key = 'your-sk'
        ),
        endpoint = 'bj.bcebos.com',
        protocol = baidubce.protocol.HTTPS
    )
    client = 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:

    acl_rule_list = [{
        'subnetId':'$subnetId',
    	'protocol':'udp',
    	'sourceIpAddress':'10.0.0.0/16',
    	'destinationIpAddress':'172.16.0.0/24',
    	'sourcePort':'80',
    	'destinationPort':'80',
    	'position':3,
    	'direction':'ingress',
    	'action':'allow',
    	'description':'test'
    }]
    acl_client = AclClient(acl_sample_conf.config)
    response = acl_client.create_acl(rule_list=acl_rule_list)
    print (response)

    create_acl参数包括rule_list:list类型,可以包含多条acl规则。acl规则参数如下:

    参数名称 类型 是否必需 描述
    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范围内。

    列举ACL

    列举ACL可以分为两个纬度,分别为列举vpc内所有ACL规则和subnet内所有ACL规则。

    列举vpc内所有ACL

    如下代码可以列举某个vpc内所有的ACL规则:

    acl_client = AclClient(acl_sample_conf.config)
    response = acl_client.list_acl_entrys(vpc_id='$vpc_id')
    print (response.acl_entrys)

    list_acl_entrys参数包括vpc_id,填写要列举ACL规则的vpc ID。

    注意: 返回信息包含acl_entrys,acl_entrys是一个list列表,包含vpc内不同子网的ACL规则。

    列举subnet内所有ACL

    如下代码可以列举某个subnet内所有的ACL规则:

    response = acl_client.list_subnet_acl(subnet_id='$subnet_id')
    for acl_rule in response.acl_rules:
        print (acl_rule)

    list_subnet_acl参数包括subnet_id,填写要列举ACL规则的subnet ID。

    更新ACL

    如下代码可以更新ACL规则:

    response = acl_client.update_acl(acl_rule_id='$acl_rule_id', source_ip_address='10.10.0.0/16')
    print (response)

    update_acl参数包括acl_rule_id和Acl规则的各个字段。acl_rule_id指定要更新的ACL,其他字段指定要更新的规则内容。字段内容可见新建ACL参数列表,除去subnetId其他字段均可更新。

    注意: 更新ACL规则字段时,依然要符合各个字段的填写要求。

    删除ACL

    如下代码可以删除ACL规则:

    response = acl_client.delete_acl(acl_rule_id='ar-fzfvhxdzrkxn')
    print (response)

    delete_acl参数主要包括acl_rule_id,确定要删除的ACL规则。

    注意: acl_rule_id可以通过列举ACL获取,其中默认ACL规则不显示acl_rule_id,不能对默认ACL规则进行更新和删除。

    上一篇
    安全组
    下一篇
    路由