本教程详细介绍如何使用Alibaba Cloud SDK for Java更新安全组规则。

前提条件

在使用本教程之前,请确保已完成以下操作:

  • 使用Alibaba Cloud SDK for Java,您需要一个阿里云账号和访问密钥(AccessKey)。 请在阿里云控制台中的AccessKey管理页面上创建和查看您的AccessKey。
  • 确保您已经安装了Alibaba Cloud SDK for Java,准确的SDK版本号,请参见 阿里云开发工具包(SDK)
    <dependencies>     <!-- https://mvnrepository.com/artifact/com.aliyun/aliyun-java-sdk-core --&gt;     <dependency&gt;         <groupId>com.aliyun</groupId>         <artifactId>aliyun-java-sdk-core</artifactId>         <version>4.4.3</version>     </dependency>     <!-- https://mvnrepository.com/artifact/com.aliyun/aliyun-java-sdk-ecs-->     <dependency>         <groupId>com.aliyun</groupId>         <artifactId>aliyun-java-sdk-ecs</artifactId>         <version>4.17.4</version>     </dependency> </dependencies>

代码示例

本文操作示例主要以代码形式体现,具体代码如下:

import com.aliyuncs.DefaultAcsClient; import com.aliyuncs.IAcsClient; import com.aliyuncs.ecs.model.v20140526.*; import com.aliyuncs.exceptions.ClientException; import com.aliyuncs.profile.DefaultProfile; import com.google.gson.Gson; import java.util.List;  /**  * 以下是本文所需要的各API接口  * DescribeSecurityGroups    查询您创建的安全组的基本信息集合  * DescribeSecurityGroupAttribute    查询一个安全组的详情  * AuthorizeSecurityGroup    增加一条安全组入方向规则  * RevokeSecurityGroup    删除一条安全组入方向规则  */ public class UpdataSecurityGroup {      public static void main(String[] args) {         // 初始化公共请求参数         IAcsClient client = Initialization();         // 查询安全组基本信息集合         List<DescribeSecurityGroupsResponse.SecurityGroup> securityGroups = DescribeSecurityGroups(client);         if (securityGroups.size() != 0) {             // 获取您所需要的安全组对象             DescribeSecurityGroupsResponse.SecurityGroup securityGroup = securityGroups.get(0);             String securityGroupId = securityGroup.getSecurityGroupId();             // 查询其中一个安全组详情             DescribeSecurityGroupAttribute(client, securityGroupId);             // 增加一条安全组入方向规则             AuthorizeSecurityGroup(securityGroupId, client);             // 删除一条安全组入方向规则             RevokeSecurityGroup(client, securityGroupId);         }     }      /**      * RevokeSecurityGroup    删除一条安全组入方向规则      * 必须有以下参数才能定位到一条安全组规则,进行精确删除      * IpProtocol、PortRange、(可选)SourcePortRange、NicType、Policy、DestCidrIp 和 (可选)SourceCidrIp      */     private static void RevokeSecurityGroup(IAcsClient client, String securityGroupId) {         RevokeSecurityGroupRequest request = new RevokeSecurityGroupRequest();         // 传输层协议。参数值大小写敏感。取值范围:         // icmp         // gre         // tcp         // udp         // all:支持所有协议         request.setIpProtocol("udp");         // 目的端安全组开放的传输层协议相关的端口范围。取值范围:         // TCP/UDP协议:取值范围为1~65535。使用斜线(/)隔开起始端口和终止端口。正确示范:1/200;错误示范:200/1。         // ICMP协议:-1/-1。         // GRE协议:-1/-1。         // all:-1/-1。         request.setPortRange("1/200");         // 网卡类型。取值范围:         // internet:公网网卡。         // intranet:内网网卡。         // 当撤销安全组之间互相访问时,即指定了SourceGroupId且没有指定SourceCidrIp时,参数NicType取值只能为intranet。 默认值:internet         request.setNicType("intranet");         // 访问权限。取值范围:         // accept:接受访问。         // drop:拒绝访问,不发回拒绝信息。         // 默认值:accept         request.setPolicy("accept");         // 目的端IP地址范围。支持CIDR格式和IPv4格式的IP地址范围。默认值:0.0.0.0/0         request.setDestCidrIp("127.30.XX.XX");         // 源端IP地址范围。支持CIDR格式和IPv4格式的IP地址范围。默认值:0.0.0.0/0         request.setSourceCidrIp("10.X.X.X");         // 目的端安全组ID。         request.setSecurityGroupId(securityGroupId);         try {             RevokeSecurityGroupResponse response = client.getAcsResponse(request);             System.out.println("--------------------入方向安全组删除成功--------------------");             System.out.println(new Gson().toJson(response));         } catch (ClientException e) {             System.out.println("ErrCode:" + e.getErrCode());             System.out.println("ErrMsg:" + e.getErrMsg());             System.out.println("RequestId:" + e.getRequestId());         }     }      /**      * 增加一条安全组入方向规则      */     private static void AuthorizeSecurityGroup(String securityGroupId, IAcsClient client) {         AuthorizeSecurityGroupRequest request = new AuthorizeSecurityGroupRequest();         // 目标安全组ID。         request.setSecurityGroupId(securityGroupId);         // 传输层协议。取值大小写敏感。取值范围:tcp udp icmp gre all:支持所有协议。         request.setIpProtocol("udp");         // SecurityGroupId方开放的传输层协议相关的端口范围。取值范围。         // TCP/UDP协议:取值范围为1~65535。使用斜线(/)隔开起始端口和终止端口。正确示范:1/200;错误示范:200/1。         // ICMP协议:-1/-1。         // GRE协议:-1/-1。         // IpProtocol取值为all:-1/-1。         request.setPortRange("1/200");         // 网卡类型。取值范围:         // internet:公网网卡。         // intranet:内网网卡。         request.setNicType("intranet");         // 设置访问权限。取值范围:         // accept(默认):接受访问。         // drop:拒绝访问,不返回拒绝信息。         request.setPolicy("accept");         // 安全组规则优先级。取值范围:1~100。         request.setPriority("1");         // 源端IPv4 CIDR地址段。支持CIDR格式和IPv4格式的IP地址范围。         // 需要设置访问权限的源端安全组ID。至少设置一项SourceGroupId或者SourceCidrIp参数。         // 如果指定了SourceGroupId没有指定参数SourceCidrIp,则参数NicType取值只能为intranet。         // 如果同时指定了SourceGroupId和SourceCidrIp,则默认以SourceCidrIp为准。         request.setSourceCidrIp("10.X.X.X");         try {             AuthorizeSecurityGroupResponse response = client.getAcsResponse(request);             System.out.println("--------------------入方向安全组新增成功--------------------");             System.out.println(new Gson().toJson(response));         } catch (ClientException e) {             System.out.println("ErrCode:" + e.getErrCode());             System.out.println("ErrMsg:" + e.getErrMsg());             System.out.println("RequestId:" + e.getRequestId());         }     }      /**      * 查询一个安全组的详情。      */     private static void DescribeSecurityGroupAttribute(IAcsClient client, String securityGroupId) {         DescribeSecurityGroupAttributeRequest request = new DescribeSecurityGroupAttributeRequest();         request.setSecurityGroupId(securityGroupId);         // 网卡类型 取值范围:         // internet:公网;         // intranet:内网;         // 默认值:internet         request.setNicType("internet");         // 安全组规则授权方向。取值范围:         // egress:安全组出方向         // ingress:安全组入方向         // all:不区分方向         // 默认值:all         request.setDirection("ingress");         try {             DescribeSecurityGroupAttributeResponse response = client.getAcsResponse(request);             System.out.println("--------------------查询一个安全组的详情--------------------");             System.out.println(new Gson().toJson(response));         } catch (ClientException e) {             System.out.println("ErrCode:" + e.getErrCode());             System.out.println("ErrMsg:" + e.getErrMsg());             System.out.println("RequestId:" + e.getRequestId());             throw new RuntimeException();         }      }      /**      * DescribeSecurityGroups    查询您创建的安全组的基本信息集合      */     private static List<DescribeSecurityGroupsResponse.SecurityGroup> DescribeSecurityGroups(IAcsClient client) {         DescribeSecurityGroupsRequest request = new DescribeSecurityGroupsRequest();         // 网络类型         request.setNetworkType("vpc");         // 安全组名称         request.setSecurityGroupName("sg-bp168k8XXXXX");         try {             DescribeSecurityGroupsResponse response = client.getAcsResponse(request);             List<DescribeSecurityGroupsResponse.SecurityGroup> securityGroups = response.getSecurityGroups();             System.out.println("--------------------查询安全组列表--------------------");             System.out.println(new Gson().toJson(response));             return securityGroups;         } catch (ClientException e) {             System.out.println("ErrCode:" + e.getErrCode());             System.out.println("ErrMsg:" + e.getErrMsg());             System.out.println("RequestId:" + e.getRequestId());             throw new RuntimeException();         }     }      /**      * Initialization  初始化公共请求参数      */     private static IAcsClient Initialization() {         // 初始化请求参数         DefaultProfile profile = DefaultProfile.getProfile(                 "<your-region-id>", // 您的可用区ID                 "<your-access-key-id>", // 您的AccessKey ID                 "<your-access-key-secret>"); // 您的AccessKey Secret         return new DefaultAcsClient(profile);     } }

执行结果

正确的返回结果类似如下:

--------------------查询安全组列表-------------------- {     "requestId": "4D1E9065-C874-451D-9FC0-CD37CEA125EC",      "regionId": "cn-hangzhou",      "totalCount": 1,      "pageNumber": 1,      "pageSize": 10,      "securityGroups": [         {             "securityGroupId": "sg-bp168k8dwrx9b7c5b483",              "description": "System created security group.",              "securityGroupName": "sg-bp168k8XXXXX",              "vpcId": "vpc-bp1m7vXXXXXX",              "creationTime": "2019-04-08T00:07:28Z",              "resourceGroupId": "",              "tags": [...]         }     ] } --------------------查询一个安全组的详情-------------------- {     "requestId": "D8894C74-1779-4DF4-A272-792D14DF25AE",      "regionId": "cn-hangzhou",      "securityGroupId": "sg-bp168k8XXXXX",      "description": "System created security group.",      "securityGroupName": "sg-bp168kXXXXX",      "vpcId": "vpc-bp1m7vXXXXX",      "innerAccessPolicy": "Accept",      "permissions": [         {             "ipProtocol": "TCP",              "portRange": "22/22",              "sourcePortRange": "",              "sourceGroupId": "sg-bp156XXXXX",              "sourceGroupName": "TEST",              "sourceCidrIp": "",              "policy": "Accept",              "nicType": "intranet",              "sourceGroupOwnerAccount": "",              "destGroupId": "",              "destGroupName": "",              "destCidrIp": "",              "destGroupOwnerAccount": "",              "priority": "1",              "direction": "ingress",              "description": "XXXXXX",              "createTime": "2019-08-16T05:20:48Z"         },          {             "ipProtocol": "TCP",              "portRange": "80/80",              "sourcePortRange": "",              "sourceGroupId": "sg-bp156XXXXX",              "sourceGroupName": "TEST",              "sourceCidrIp": "",              "policy": "Accept",              "nicType": "intranet",              "sourceGroupOwnerAccount": "",              "destGroupId": "",              "destGroupName": "",              "destCidrIp": "",              "destGroupOwnerAccount": "",              "priority": "1",              "direction": "ingress",              "description": "XXXXXX",              "createTime": "2019-08-10T07:22:01Z"         }     ] } --------------------入方向安全组新增成功-------------------- {"requestId":"4ECA3CEF-E2F7-41A3-A5E6-6DF000572072"} --------------------入方向安全组删除成功-------------------- {"requestId":"4ECA3CEF-E2F7-41A3-A5E6-6DF000572072"}