安全组
初始化
确认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
新建BccClient
BccClient是安全组服务的客户端,为开发者与安全组服务进行交互提供了一系列的方法。
新建BccClient时,需要先使用Endpoint、AK、SK对BccConfigs进行配置,再使用BccConfigs实例对BccClient进行配置,配置示例如下:
$BccConfigs = array(
'credentials' => array(
'ak' => '',
'sk' => '',
),
'endpoint' => 'bcc.bj.baidubce.com', //bj
);
$BccClient = new BccClient($BccConfigs)
安全组管理
- 创建BCC实例时,可以选择默认安全组或者自定义安全组。
- 每个BCC实例必须选择一个安全组。
- 每个BCC实例最多只能与10个安全组关联,如果某个BCC实例关联了多个安全组,则此BCC实例生效的规则是已关联安全组所有规则的合集。
- 用户可以允许所有与此安全组关联的BCC实例彼此之间进行通信,或是与其他安全组关联的实例和与此安全组关联的实例之间进行通信。默认与同一安全组关联的BCC实例彼此间可进行通信。
- 不支持在安全组维度下关联BCC实例,仅可通过BCC实例加入安全组。
- 默认安全组不可删除,可以增、删、改规则。仅默认安全组提供一键恢复初始设置按钮。
默认安全组的规则:
- 入站:允许访问所有端口,即允许外部所有IP的流量进入关联BCC的所有端口。
- 出站:允许访问所有端口,即允许关联BCC的所有端口访问外部所有IP的所有端口。
新建安全组
可以使用createSecurityGroup函数创建安全组,函数定义如下:
public function createSecurityGroup($name, $rules, $vpcId=null, $desc=null, $clientToken=null, $options = array()) {
......
}
createSecurityGroup参数如下:
参数名称 | 类型 | 是否必需 | 描述 |
---|---|---|---|
name | String | 是 | 创建的安全组的名字,支持大小写字母、数字、中文以及-_ /.特殊字符,必须以字母开头,长度1-65。 |
rules | [SecurityGroupRuleModel] | 是 | 创建安全组时绑定的安全组规则列表 |
vpc_id | String | 否 | 创建安全组时指定vpc |
desc | String | 否 | 对所创建的安全组的描述信息 |
clientToken | String | 否 | 幂等性Token,是一个长度不超过64位的ASCII字符串,详见ClientToken幂等性。 |
参数rules是list
参数名称 | 类型 | 描述 | 是否必须 |
---|---|---|---|
remark | String | 备注 | 否 |
direction | String | 入站/出站,取值ingress或egress。 | 否 |
ethertype | String | 网络类型,取值IPv4或IPv6。值为空时表示默认取值IPv4。 | 否 |
portRange | String | 端口范围,可以指定80等单个端口,值为空时默认取值1-65535。 | 否 |
protocol | String | 协议类型,tcp、udp或icmp,值为空时默认取值all。 | 否 |
sourceGroupId | String | 源安全组ID | 否 |
sourceIp | String | 源IP地址,与sourceGroupId不能同时设定值。 | 否 |
destGroupId | String | 目的安全组ID | 否 |
destIp | String | 目的IP地址,与destGroupId不能同时设定值。 | 否 |
securityGroupId | String | 安全组ID | 否 |
使用示例如下:
$securityGroupName = 'test'
$rule = new SecurityGroupRuleModel('test_rule', 'ingress', null, '1-65535', 'tcp', '', '');
$rules = array($rule);
$resp = $this->client->createSecurityGroup($securityGroupName, $rules, null);
print_r($resp);
列举安全组列表
可以使用listSecurityGroups函数列举安全组列表,函数定义如下:
public function listSecurityGroups($instanceId=null, $vpcId=null, $marker=null, $maxKeys=null, $options = array()){
......
}
listSecurityGroups参数如下:
参数名称 | 类型 | 是否必需 | 描述 |
---|---|---|---|
instanceId | String | 否 | 实例id,可查询实例关联的安全组列表。如需查询所有创建的安全组信息,不填写此参数。 |
vpcId | String | 否 | vpc实例id,可查询实例关联的安全组列表。 |
marker | String | 否 | 批量获取列表的查询的起始位置,是一个由系统生成的字符串 |
maxKeys | int | 否 | 每页包含的最大数量,最大数量通常不超过1000。缺省值为1000 |
使用示例如下:
$resp = $this->client->listSecurityGroups($this->instanceId);
print_r($resp);
删除安全组
可以使用deleteSecurityGroup函数删除安全组,函数定义如下:
public function deleteSecurityGroup($securityGroupId, $options = array()) {
......
}
deleteSecurityGroup参数主要包括securityGroupId,确定要删除的安全组。
注意: securityGroupId可以通过列举安全组获取。
使用示例如下:
$resp = $this->client->deleteSecurityGroup($this->securityGroupId);
print_r($resp);
授权安全组规则
可以使用authorizeSecurityGroupRule函数在安全组中授权新的安全组规则,函数定义如下:
public function authorizeSecurityGroupRule($securityGroupId, $rule, $clientToken=null, $options = array()) {
......
}
authorizeSecurityGroupRule参数如下:
参数名称 | 类型 | 是否必需 | 描述 |
---|---|---|---|
securityGroupId | String | 是 | 授权新安全组规则的安全组id |
rule | SecurityGroupRuleModel | 是 | 待授权安全组规则 |
clientToken | String | 否 | 幂等性Token,是一个长度不超过64位的ASCII字符串,详见ClientToken幂等性。 |
注意: 同一安全组中的规则以remark、protocol、direction、portRange、sourceIp | destIp、sourceGroupId | destGroupId六元组作为唯一性索引,若安全组中已存在相同的规则将报错。
使用示例如下:
$direction = 'ingress';
$portRange = '80-90';
$protocol = 'tcp';
$rule = new SecurityGroupRuleModel(null, $direction, null, $portRange, $protocol);
$resp = $this->client->authorizeSecurityGroupRule($this->securityGroupId, $rule);
print_r($resp);
撤销安全组规则
可以使用revokeSecurityGroupRule函数在安全组中撤销安全组规则,函数定义如下:
public function revokeSecurityGroupRule($securityGroupId, $rule, $clientToken=null, $options = array()){
......
}
revokeSecurityGroupRule参数如下:
参数名称 | 类型 | 是否必需 | 描述 |
---|---|---|---|
securityGroupId | String | 是 | 待撤销安全组规则的安全组id |
rule | SecurityGroupRuleModel | 是 | 待撤销的安全组规则 |
clientToken | String | 否 | 幂等性Token,是一个长度不超过64位的ASCII字符串,详见ClientToken幂等性。 |
注意: 同一安全组中的规则以remark、protocol、direction、portRange、sourceIp | destIp、sourceGroupId | destGroupId六元组作为唯一性索引,若安全组中已存在相同的规则将报错。
使用示例如下:
$direction = 'ingress';
$portRange = '80-90';
$protocol = 'tcp';
$rule = new SecurityGroupRuleModel(null, $direction, null, $portRange, $protocol);
$resp = $this->client->revokeSecurityGroupRule($this->securityGroupId, $rule);
print_r($resp);