使用SDK(go语言)控制阿里云安全组
最近阿里云也是烦人,安全组添加规则都要短信验证,而我们公司阿里云里的最高权限是在技术总监手里,每次添加一次规则都要去问技术总监,多问上几次我自己都烦了,还好发现阿里云有个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
}
这样让我能很方便的管理安全组了,有兴趣的朋友也可以下来试试.


评论: