使用SDK(go语言)控制阿里云安全组

post by rocdk890 / 2017-8-14 11:42 Monday linux技术
   最近阿里云也是烦人,安全组添加规则都要短信验证,而我们公司阿里云里的最高权限是在技术总监手里,每次添加一次规则都要去问技术总监,多问上几次我自己都烦了,还好发现阿里云有个api的入口可以来控制,但自己写的话容易出错,正在郁闷的时候,我又发现有sdk,可以用sdk来进行配置,好吧,我承认我不会java,python也只会一点点,最后让开发帮我搞定了,但是用go语言写的.....

go语言的环境配置这些不会的请自己百度.(因为我也不会)
代码如下:
package main

import (
	"encoding/json"
	"fmt"
	"github.com/denverdino/aliyungo/common"
	"github.com/denverdino/aliyungo/ecs"
	"io/ioutil"
	"os"
	"strings"
)

var (
	cli    *ecs.Client = nil
	config *Config     = new(Config)
)

func main() {
	defer func() {
		if err := recover(); err != nil {
			fmt.Println(err)
		}
	}()
	var err error
	if len(os.Args) < 2 {
		panic("need config file")
	}
	filename := os.Args[1]
	resBytes, err := ioutil.ReadFile(filename)
	if err != nil {
		panic(err)
	}

	if err := json.Unmarshal(resBytes, config); err != nil {
		panic(err)
	}
	config.IpList = strings.Split(config.SourceCidrIp, ",")

	cli = ecs.NewClient(config.AccessKeyId, config.AccessKeySecret)

	switch config.Action {
	case "add":
		add()
	case "remove":
		remove()
	case "info":
		info()
	default:
		panic("invalid action")
	}

	fmt.Println("success")
}

func add() {
	param := &ecs.AuthorizeSecurityGroupArgs{
		SecurityGroupId: config.SecurityGroupId,
		RegionId:        common.Region(config.RegionId),
		IpProtocol:      ecs.IpProtocol(config.Protocol),
		PortRange:       config.PortRange,
		Policy:          ecs.PermissionPolicyDrop,
		Priority:        config.Priority,
		NicType:         ecs.NicTypeInternet,
	}
	for _, ip := range config.IpList {
		param.SourceCidrIp = strings.TrimSpace(ip)
		if err := cli.AuthorizeSecurityGroup(param); err != nil {
			panic(err)
		}
	}
}

func remove() {
	param := &ecs.RevokeSecurityGroupArgs{
		AuthorizeSecurityGroupArgs: ecs.AuthorizeSecurityGroupArgs{
			SecurityGroupId: config.SecurityGroupId,
			RegionId:        common.Region(config.RegionId),
			IpProtocol:      ecs.IpProtocol(config.Protocol),
			PortRange:       config.PortRange,
			Policy:          ecs.PermissionPolicyDrop,
			Priority:        config.Priority,
			NicType:         ecs.NicTypeInternet,
		},
	}
	for _, ip := range config.IpList {
		param.AuthorizeSecurityGroupArgs.SourceCidrIp = strings.TrimSpace(ip)
		if err := cli.RevokeSecurityGroup(param); err != nil {
			panic(err)
		}
	}
}

func info() {
	param := &ecs.DescribeSecurityGroupAttributeArgs{
		SecurityGroupId: config.SecurityGroupId,
		RegionId:        common.Region(config.RegionId),
		NicType:         ecs.NicTypeInternet,
	}
	if res, err := cli.DescribeSecurityGroupAttribute(param); err != nil {
		panic(err)
	} else {
		resBytes, err := json.MarshalIndent(res, "", "\t")
		if err != nil {
			panic(err)
		}
		fmt.Println(string(resBytes))
	}
}

type Config struct {
	AccessKeyId     string   `json:"accesskeyid"`
	AccessKeySecret string   `json:"accesskeysecret"`
	SecurityGroupId string   `json:"securitygroupid"`
	RegionId        string   `json:"regionid"`
	SourceCidrIp    string   `json:"sourcecidrip"`
	PortRange       string   `json:"portrange"`
	Protocol        string   `json:"protocol"`
	Priority        int      `json:"priority"`
	IpList          []string `json:"-"`
	Action          string   `json:"action"`
}


还好缠着他给我编译成了可以在mac和linux下使用的sdk:
编译好的sdk下载地址如下:

使用示例:
./ali-linux ./config.json

config.json里的说明:
{
    "accesskeyid" :"LTAIE********",     #填你自己的
    "accesskeysecret" :"ya**********",  #填你自己的
    "securitygroupid" :"sg-233o****",  #填安全组的名字
    "regionid" :"cn-hangzhou",         #填ecs所在的地区 
    "sourcecidrip" :"192.168.1.232",   #单个或多个ip地址,多个用英文半角逗号(,)分隔
    "portrange" : "-1/-1",             #端口范围
    "protocol" : "all",                #网络协议类型
    "priority" : 50,                   #优先级
    "action" : "remove"                #add/remove/info分别表示添加、删除、查看安全组,我这里是要删除一个ip
}

这样让我能很方便的管理安全组了,有兴趣的朋友也可以下来试试.
夜空- 本站版权
1、本站所有主题由该文章作者发表,该文章作者与夜空享有文章相关版权
2、其他单位或个人使用、转载或引用本文时必须同时征得该文章作者和夜空的同意
3、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
4、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
5、原文链接:blog.slogra.com/post-706.html

标签: api 阿里云 sdk aliyun go 安全组 ecs

评论: