本文章详细介绍了Java通过API的形式设置阿里云服务器的安全组 入方向的规则。
前期准备:
a.准备一个阿里云服务器的示例,获取vcpid和私有网络地址,以便控制API的调用权限
b.设置阿里云ak和sk
c.配置ak/sk的使用权限,将调试电脑和服务器的公网IP添加到公网策略中,将服务器的vcpid和私有网络地址加到 专有网络策略 中。
Java开发准备
添加依赖:jdk最低版本要求:1.8
<!--阿里云SDK-->
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>ecs20140526</artifactId>
<version>8.0.1</version>
</dependency>
主体代码:
public void aliyun() throws Exception {
com.aliyun.ecs20140526.Client client = createClient();
com.aliyun.ecs20140526.models.AuthorizeSecurityGroupRequest.AuthorizeSecurityGroupRequestPermissions permissions0 = new com.aliyun.ecs20140526.models.AuthorizeSecurityGroupRequest.AuthorizeSecurityGroupRequestPermissions()
.setPolicy("drop")//drop 拒绝访问策略
.setSourceCidrIp("192.168.2.15")//需要控制的IP地址
.setPortRange("1/65535")//需要控制访问的端口 1/65535表示所有的端口号
.setDescription("可疑IP")//规则描述
.setIpProtocol("TCP");
com.aliyun.ecs20140526.models.AuthorizeSecurityGroupRequest authorizeSecurityGroupRequest = new com.aliyun.ecs20140526.models.AuthorizeSecurityGroupRequest()
.setRegionId("cn-chengdu")//地域
.setSecurityGroupId("sg-2vc******rvblbj")//安全组ID
.setPermissions(java.util.Arrays.asList(
permissions0
));
com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
try {
// 复制代码运行请自行打印 API 的返回值
AuthorizeSecurityGroupResponse authorizeSecurityGroupResponse=client.authorizeSecurityGroupWithOptions(authorizeSecurityGroupRequest, runtime);
log.info("返回结果:"+authorizeSecurityGroupResponse.getBody());
log.info("返回结果:"+authorizeSecurityGroupResponse.getHeaders());
log.info("返回结果:"+authorizeSecurityGroupResponse.getStatusCode());
} catch (TeaException error) {
// 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
// 错误 message
System.out.println("TeaException error==="+error.getMessage());
// 诊断地址
System.out.println("TeaException error Recommend==="+error.getData().get("Recommend"));
com.aliyun.teautil.Common.assertAsString(error.message);
} catch (Exception _error) {
TeaException error = new TeaException(_error.getMessage(), _error);
// 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
// 错误 message
System.out.println("Exception _error==="+error.getMessage());
// 诊断地址
System.out.println("Exception _error Recommend==="+error.getData().get("Recommend"));
com.aliyun.teautil.Common.assertAsString(error.message);
}
}
/**
* <b>description</b> :
* <p>使用凭据初始化账号Client</p>
* @return Client
*
* @throws Exception
*/
public static Client createClient() throws Exception {
// 工程代码建议使用更安全的无AK方式,凭据配置方式请参见:https://help.aliyun.com/document_detail/378657.html。
com.aliyun.credentials.Client credential = new com.aliyun.credentials.Client();
com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
// 您的AccessKey ID
.setAccessKeyId("LTAI5t***********tWtd")//ak
// 您的AccessKey Secret
.setAccessKeySecret("Xhbll0**********ZNmpMfDC")//sk
.setCredential(credential);
// Endpoint 请参考 https://api.aliyun.com/product/Ecs
config.endpoint = "ecs.cn-chengdu.aliyuncs.com";
return new Client(config);
}
返回结果:
到这里,Java通过API的方式添加阿里云服务器,安全组入方向规则就已经完成了。开发者有时候会遇到本地测试没问题,放到服务器里面测试就会报400的错误,会有异常:
TeaException error===code: 400, The specified parameter "AccessKeyId.AccessPolicyDenied" is not valid. request id: EEE17E2F-2F67-504A-9EED-6B0D51ECD251
TeaException error Recommend===https://api.aliyun.com/troubleshoot?q=InvalidParameter&product=Ecs&requestId=EEE17E2F-2F67-504A-9EED-6B0D51ECD251
这是因为ak/sk的访问控制策略没有配置好的原因,在上面的 配置ak/sk的使用权限 中,一定要把服务器的vcpid和私域网络地址添加到 专有网络策略 中。
以上内容均为参考,如有不足之处欢迎留言讨论。