本教程详细介绍如何使用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 --> <dependency> <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"}
在文档使用中是否遇到以下问题
更多建议
匿名提交