前置条件
1.已 注册 华为云,并完成 实名认证
2.获取华为云开发工具包(SDK),您也可以查看安装JAVA SDK。
3.已获取华为云账号对应的Access Key(AK)和Secret Access Key(SK)。请在华为云控制台“我的凭证 > 访问密钥”页面上创建和查看您的AK/SK。具体请参见 访问密钥 。
4.已具备开发环境 ,支持Java JDK 1.8及其以上版本。
代码示例
以下代码展示如何配置云服务器的访问策略
Copied!
import com.huaweicloud.sdk.core.auth.BasicCredentials;
import com.huaweicloud.sdk.core.auth.ICredential;
import com.huaweicloud.sdk.core.exception.ClientRequestException;
import com.huaweicloud.sdk.core.exception.ServerResponseException;
import com.huaweicloud.sdk.vpc.v2.VpcClient;
import com.huaweicloud.sdk.vpc.v2.model.ListPortsRequest;
import com.huaweicloud.sdk.vpc.v2.model.ListPortsResponse;
import com.huaweicloud.sdk.vpc.v2.model.ListSecurityGroupsRequest;
import com.huaweicloud.sdk.vpc.v2.model.ListSecurityGroupsResponse;
import com.huaweicloud.sdk.vpc.v2.model.UpdatePortOption;
import com.huaweicloud.sdk.vpc.v2.model.UpdatePortRequest;
import com.huaweicloud.sdk.vpc.v2.model.UpdatePortRequestBody;
import com.huaweicloud.sdk.vpc.v2.model.UpdatePortResponse;
import com.huaweicloud.sdk.vpc.v2.region.VpcRegion;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.Arrays;
public class VPCPortBindSecurityGroupDemo {
private static final Logger logger = LoggerFactory.getLogger(VPCPortBindSecurityGroupDemo.class.getName());
public static void main(String[] args) {
String ak = System.getenv("HUAWEICLOUD_SDK_AK");
String sk = System.getenv("HUAWEICLOUD_SDK_SK");
String ecsId = "{ecs_id}";
ICredential auth = new BasicCredentials()
.withAk(ak)
.withSk(sk);
VpcClient vpcClient = VpcClient.newBuilder()
.withCredential(auth)
.withRegion(VpcRegion.valueOf("cn-north-4"))
.build();
VPCPortBindSecurityGroupDemo demo = new VPCPortBindSecurityGroupDemo();
ListPortsResponse listPortsResponse = demo.listPorts(vpcClient, ecsId);
ListSecurityGroupsResponse securityGroupsResponse = demo.listSecurityGroups(vpcClient);
String portId = listPortsResponse.getPorts().get(0).getId();
String securityGroupId = securityGroupsResponse.getSecurityGroups().get(0).getId();
demo.updatePort(vpcClient, portId, securityGroupId);
}
public ListSecurityGroupsResponse listSecurityGroups(VpcClient vpcClient) {
ListSecurityGroupsRequest securityGroupsRequest = new ListSecurityGroupsRequest().withLimit(1);
ListSecurityGroupsResponse securityGroupsResponse = null;
try {
securityGroupsResponse = vpcClient.listSecurityGroups(securityGroupsRequest);
logger.info(securityGroupsResponse.toString());
} catch (ClientRequestException e) {
logger.error(String.valueOf(e.getHttpStatusCode()));
logger.error(e.toString());
} catch (ServerResponseException e) {
logger.error(String.valueOf(e.getHttpStatusCode()));
logger.error(e.getMessage());
}
return securityGroupsResponse;
}
public ListPortsResponse listPorts(VpcClient vpcClient, String ecsId) {
ListPortsRequest listPortsRequest = new ListPortsRequest().withDeviceId(ecsId);
ListPortsResponse listPortsResponse = null;
try {
listPortsResponse = vpcClient.listPorts(listPortsRequest);
logger.info(listPortsResponse.toString());
} catch (ClientRequestException e) {
logger.error(String.valueOf(e.getHttpStatusCode()));
logger.error(e.toString());
} catch (ServerResponseException e) {
logger.error(String.valueOf(e.getHttpStatusCode()));
logger.error(e.getMessage());
}
return listPortsResponse;
}
public UpdatePortResponse updatePort(VpcClient vpcClient, String portId, String securityGroupId) {
UpdatePortRequest request = new UpdatePortRequest()
.withPortId(portId)
.withBody(new UpdatePortRequestBody()
.withPort(new UpdatePortOption()
.withSecurityGroups(
Arrays.asList(securityGroupId))
));
UpdatePortResponse updatePortResponse = null;
try {
updatePortResponse = vpcClient.updatePort(request);
logger.info(updatePortResponse.toString());
} catch (ClientRequestException e) {
logger.error(String.valueOf(e.getHttpStatusCode()));
logger.error(e.toString());
} catch (ServerResponseException e) {
logger.error(String.valueOf(e.getHttpStatusCode()));
logger.error(e.getMessage());
}
return updatePortResponse;
}
}
您可以在 虚拟私有云VPC服务文档 和API Explorer 查看具体信息。
版本说明
本示例配套的SDK版本为:3.0.59及以上版本
配置云服务器的访问策略
本示例展示如何配置云服务器的访问策略
功能介绍
配置云服务器的访问策略
前置条件
1.已 注册 华为云,并完成 实名认证
2.获取华为云开发工具包(SDK),您也可以查看安装JAVA SDK。
3.已获取华为云账号对应的Access Key(AK)和Secret Access Key(SK)。请在华为云控制台“我的凭证 > 访问密钥”页面上创建和查看您的AK/SK。具体请参见 访问密钥 。
4.已具备开发环境 ,支持Java JDK 1.8及其以上版本。
SDK获取和安装
您可以通过Maven配置所依赖的虚拟私有云服务SDK
具体的SDK版本号请参见 SDK开发中心 (产品类别:虚拟私有云服务)
代码示例
以下代码展示如何配置云服务器的访问策略
import com.huaweicloud.sdk.core.auth.BasicCredentials; import com.huaweicloud.sdk.core.auth.ICredential; import com.huaweicloud.sdk.core.exception.ClientRequestException; import com.huaweicloud.sdk.core.exception.ServerResponseException; import com.huaweicloud.sdk.vpc.v2.VpcClient; import com.huaweicloud.sdk.vpc.v2.model.ListPortsRequest; import com.huaweicloud.sdk.vpc.v2.model.ListPortsResponse; import com.huaweicloud.sdk.vpc.v2.model.ListSecurityGroupsRequest; import com.huaweicloud.sdk.vpc.v2.model.ListSecurityGroupsResponse; import com.huaweicloud.sdk.vpc.v2.model.UpdatePortOption; import com.huaweicloud.sdk.vpc.v2.model.UpdatePortRequest; import com.huaweicloud.sdk.vpc.v2.model.UpdatePortRequestBody; import com.huaweicloud.sdk.vpc.v2.model.UpdatePortResponse; import com.huaweicloud.sdk.vpc.v2.region.VpcRegion; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.Arrays; /** * 配置云服务器的访问策略 */ public class VPCPortBindSecurityGroupDemo { private static final Logger logger = LoggerFactory.getLogger(VPCPortBindSecurityGroupDemo.class.getName()); public static void main(String[] args) { // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全; // 本示例以ak和sk保存在环境变量中来实现身份认证为例,运行示例前请先在本地环境中设置环境变量HUAWEICLOUD_SDK_AK和HUAWEICLOUD_SDK_SK。 String ak = System.getenv("HUAWEICLOUD_SDK_AK"); String sk = System.getenv("HUAWEICLOUD_SDK_SK"); // 云服务器id String ecsId = "{ecs_id}"; ICredential auth = new BasicCredentials() .withAk(ak) .withSk(sk); VpcClient vpcClient = VpcClient.newBuilder() .withCredential(auth) .withRegion(VpcRegion.valueOf("cn-north-4")) .build(); VPCPortBindSecurityGroupDemo demo = new VPCPortBindSecurityGroupDemo(); // 1.通过云服务器的ID查询网卡信息 ListPortsResponse listPortsResponse = demo.listPorts(vpcClient, ecsId); // 2.查询当前已有的安全组信息 ListSecurityGroupsResponse securityGroupsResponse = demo.listSecurityGroups(vpcClient); String portId = listPortsResponse.getPorts().get(0).getId(); String securityGroupId = securityGroupsResponse.getSecurityGroups().get(0).getId(); // 3.为弹性云服务器添加安全组。 demo.updatePort(vpcClient, portId, securityGroupId); } public ListSecurityGroupsResponse listSecurityGroups(VpcClient vpcClient) { ListSecurityGroupsRequest securityGroupsRequest = new ListSecurityGroupsRequest().withLimit(1); ListSecurityGroupsResponse securityGroupsResponse = null; try { securityGroupsResponse = vpcClient.listSecurityGroups(securityGroupsRequest); logger.info(securityGroupsResponse.toString()); } catch (ClientRequestException e) { logger.error(String.valueOf(e.getHttpStatusCode())); logger.error(e.toString()); } catch (ServerResponseException e) { logger.error(String.valueOf(e.getHttpStatusCode())); logger.error(e.getMessage()); } return securityGroupsResponse; } public ListPortsResponse listPorts(VpcClient vpcClient, String ecsId) { ListPortsRequest listPortsRequest = new ListPortsRequest().withDeviceId(ecsId); ListPortsResponse listPortsResponse = null; try { listPortsResponse = vpcClient.listPorts(listPortsRequest); logger.info(listPortsResponse.toString()); } catch (ClientRequestException e) { logger.error(String.valueOf(e.getHttpStatusCode())); logger.error(e.toString()); } catch (ServerResponseException e) { logger.error(String.valueOf(e.getHttpStatusCode())); logger.error(e.getMessage()); } return listPortsResponse; } public UpdatePortResponse updatePort(VpcClient vpcClient, String portId, String securityGroupId) { UpdatePortRequest request = new UpdatePortRequest() .withPortId(portId) .withBody(new UpdatePortRequestBody() .withPort(new UpdatePortOption() .withSecurityGroups( Arrays.asList(securityGroupId)) )); UpdatePortResponse updatePortResponse = null; try { updatePortResponse = vpcClient.updatePort(request); logger.info(updatePortResponse.toString()); } catch (ClientRequestException e) { logger.error(String.valueOf(e.getHttpStatusCode())); logger.error(e.toString()); } catch (ServerResponseException e) { logger.error(String.valueOf(e.getHttpStatusCode())); logger.error(e.getMessage()); } return updatePortResponse; } }
您可以在 虚拟私有云VPC服务文档 和API Explorer 查看具体信息。
修订记录