使用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 }
这样让我能很方便的管理安全组了,有兴趣的朋友也可以下来试试.
评论: