前置条件
1.已 注册 华为云,并完成 实名认证
2.获取华为云开发工具包(SDK),您也可以查看安装GO SDK。
3.已获取华为云账号对应的Access Key(AK)和Secret Access Key(SK)。请在华为云控制台“我的凭证 > 访问密钥”页面上创建和查看您的AK/SK。具体请参见 访问密钥 。
4.已具备开发环境 ,支持GO1.16及其以上版本。
代码示例
以下代码展示如何配置云服务器的访问策略
Copied!
package main
import (
vpcRegion "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/vpc/v2/region"
"log"
"os"
coreBasic "github.com/huaweicloud/huaweicloud-sdk-go-v3/core/auth/basic"
vpc "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/vpc/v2"
vpcModel "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/vpc/v2/model"
)
type VPCPortBindSecurityGroupDemo struct{}
func NewVPCPortBindSecurityGroupDemoDefault() VPCPortBindSecurityGroupDemo {
v := VPCPortBindSecurityGroupDemo{}
return v
}
func main() {
ak := os.Getenv("HUAWEICLOUD_SDK_AK")
sk := os.Getenv("HUAWEICLOUD_SDK_SK")
ecsId := "{ecs_id}"
auth := coreBasic.NewCredentialsBuilder().WithAk(ak).WithSk(sk).Build()
vpcClient := *vpc.NewVpcClient(vpc.VpcClientBuilder().
WithCredential(auth).
WithRegion(vpcRegion.ValueOf("cn-north-4")).
Build())
demo := NewVPCPortBindSecurityGroupDemoDefault()
listPortsResponse := demo.ListPorts(vpcClient, ecsId)
securityGroupsResponse := demo.ListSecurityGroups(vpcClient)
portId := (*listPortsResponse.Ports)[0].Id
securityGroupId := (*securityGroupsResponse.SecurityGroups)[0].Id
demo.UpdatePort(vpcClient, portId, securityGroupId)
}
func (v *VPCPortBindSecurityGroupDemo) ListSecurityGroups(vpcClient vpc.VpcClient) *vpcModel.ListSecurityGroupsResponse {
listSecurityGroupsRequestLimitParam := int32(1)
securityGroupsRequest := vpcModel.ListSecurityGroupsRequest{
Limit: &listSecurityGroupsRequestLimitParam,
}
var securityGroupsResponse *vpcModel.ListSecurityGroupsResponse
securityGroupsResponse, _ = vpcClient.ListSecurityGroups(&securityGroupsRequest)
log.Println(securityGroupsResponse.String())
return securityGroupsResponse
}
func (v *VPCPortBindSecurityGroupDemo) ListPorts(vpcClient vpc.VpcClient, ecsId string) *vpcModel.ListPortsResponse {
listPortsRequest := vpcModel.ListPortsRequest{
DeviceId: &ecsId,
}
var listPortsResponse *vpcModel.ListPortsResponse
listPortsResponse, _ = vpcClient.ListPorts(&listPortsRequest)
log.Println(listPortsResponse.String())
return listPortsResponse
}
func (v *VPCPortBindSecurityGroupDemo) UpdatePort(vpcClient vpc.VpcClient, portId string, securityGroupId string) *vpcModel.UpdatePortResponse {
updatePortOptionSecurityGroupsParam := []string{securityGroupId}
updatePortRequestBodyPortParam := vpcModel.UpdatePortOption{
SecurityGroups: &updatePortOptionSecurityGroupsParam,
}
updatePortRequestBodyParam := vpcModel.UpdatePortRequestBody{
Port: &updatePortRequestBodyPortParam,
}
request := vpcModel.UpdatePortRequest{
PortId: portId,
Body: &updatePortRequestBodyParam,
}
var updatePortResponse *vpcModel.UpdatePortResponse
updatePortResponse, _ = vpcClient.UpdatePort(&request)
log.Println(updatePortResponse.String())
return updatePortResponse
}
您可以在 虚拟私有云VPC服务文档 和API Explorer 查看具体信息。
版本说明
本示例基于华为云SDK开发
配置云服务器的访问策略
本示例展示如何配置云服务器的访问策略
功能介绍
配置云服务器的访问策略
前置条件
1.已 注册 华为云,并完成 实名认证
2.获取华为云开发工具包(SDK),您也可以查看安装GO SDK。
3.已获取华为云账号对应的Access Key(AK)和Secret Access Key(SK)。请在华为云控制台“我的凭证 > 访问密钥”页面上创建和查看您的AK/SK。具体请参见 访问密钥 。
4.已具备开发环境 ,支持GO1.16及其以上版本。
SDK获取和安装
具体的SDK版本号请参见 SDK开发中心 (产品类别:虚拟私有云服务)
代码示例
以下代码展示如何配置云服务器的访问策略
package main import ( vpcRegion "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/vpc/v2/region" "log" "os" coreBasic "github.com/huaweicloud/huaweicloud-sdk-go-v3/core/auth/basic" vpc "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/vpc/v2" vpcModel "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/vpc/v2/model" ) /* 配置云服务器的访问策略 */ type VPCPortBindSecurityGroupDemo struct{} func NewVPCPortBindSecurityGroupDemoDefault() VPCPortBindSecurityGroupDemo { v := VPCPortBindSecurityGroupDemo{} return v } func main() { // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全; // 本示例以ak和sk保存在环境变量中来实现身份验证为例,运行本示例前请先在本地环境中设置环境变量HUAWEICLOUD_SDK_AK和HUAWEICLOUD_SDK_SK。 ak := os.Getenv("HUAWEICLOUD_SDK_AK") sk := os.Getenv("HUAWEICLOUD_SDK_SK") // 云服务器id ecsId := "{ecs_id}" auth := coreBasic.NewCredentialsBuilder().WithAk(ak).WithSk(sk).Build() vpcClient := *vpc.NewVpcClient(vpc.VpcClientBuilder(). WithCredential(auth). WithRegion(vpcRegion.ValueOf("cn-north-4")). Build()) demo := NewVPCPortBindSecurityGroupDemoDefault() // 1.通过云服务器的ID查询网卡信息 listPortsResponse := demo.ListPorts(vpcClient, ecsId) // 2.查询当前已有的安全组信息 securityGroupsResponse := demo.ListSecurityGroups(vpcClient) portId := (*listPortsResponse.Ports)[0].Id securityGroupId := (*securityGroupsResponse.SecurityGroups)[0].Id // 3.为弹性云服务器添加安全组。 demo.UpdatePort(vpcClient, portId, securityGroupId) } func (v *VPCPortBindSecurityGroupDemo) ListSecurityGroups(vpcClient vpc.VpcClient) *vpcModel.ListSecurityGroupsResponse { listSecurityGroupsRequestLimitParam := int32(1) securityGroupsRequest := vpcModel.ListSecurityGroupsRequest{ Limit: &listSecurityGroupsRequestLimitParam, } var securityGroupsResponse *vpcModel.ListSecurityGroupsResponse securityGroupsResponse, _ = vpcClient.ListSecurityGroups(&securityGroupsRequest) log.Println(securityGroupsResponse.String()) return securityGroupsResponse } func (v *VPCPortBindSecurityGroupDemo) ListPorts(vpcClient vpc.VpcClient, ecsId string) *vpcModel.ListPortsResponse { listPortsRequest := vpcModel.ListPortsRequest{ DeviceId: &ecsId, } var listPortsResponse *vpcModel.ListPortsResponse listPortsResponse, _ = vpcClient.ListPorts(&listPortsRequest) log.Println(listPortsResponse.String()) return listPortsResponse } func (v *VPCPortBindSecurityGroupDemo) UpdatePort(vpcClient vpc.VpcClient, portId string, securityGroupId string) *vpcModel.UpdatePortResponse { updatePortOptionSecurityGroupsParam := []string{securityGroupId} updatePortRequestBodyPortParam := vpcModel.UpdatePortOption{ SecurityGroups: &updatePortOptionSecurityGroupsParam, } updatePortRequestBodyParam := vpcModel.UpdatePortRequestBody{ Port: &updatePortRequestBodyPortParam, } request := vpcModel.UpdatePortRequest{ PortId: portId, Body: &updatePortRequestBodyParam, } var updatePortResponse *vpcModel.UpdatePortResponse updatePortResponse, _ = vpcClient.UpdatePort(&request) log.Println(updatePortResponse.String()) return updatePortResponse }
您可以在 虚拟私有云VPC服务文档 和API Explorer 查看具体信息。
修订记录