[大阪/横滨/德岛] 寻找基础设施/服务器端工程师!

[大阪/横滨/德岛] 寻找基础设施/服务器端工程师!

【超过500家企业部署】AWS搭建、运维、监控服务

【超过500家企业部署】AWS搭建、运维、监控服务

【CentOS的后继者】AlmaLinux OS服务器搭建/迁移服务

【CentOS的后继者】AlmaLinux OS服务器搭建/迁移服务

[仅适用于 WordPress] 云服务器“Web Speed”

[仅适用于 WordPress] 云服务器“Web Speed”

关于使用 Golang 创建 CLI 工具来编辑 AWS 安全组的故事

我叫寺冈,是一名基础设施工程师。

这次我将讨论使用 Golang 创建 CLI 工具。
这个名字是“goacl”,我想向您介绍一下它是什么。

1.什么是goacl?

goacl 是一个用 Golang 编写的 CLI 工具。

显示 AWS 安全组列表并
为特定组添加规则。

目前,它仅允许列表显示和添加规则,但
我们计划添加功能以允许删除不必要的规则。

2.创建原因

有两个原因:内部/个人。

内部原因

简而言之,原因是办公室的固定IP地址将来会发生变化。

为了提高我们内部网络的质量,我们
决定更换线路本身,但是
如何允许新的IP地址访问呢?

由于我们的主营业务是MSP,所以我们
负责很多客户的AWS账户。
每次IP地址更改时,您都需要检查所有帐户的权限设置,并且
手动添加权限设置存在限制。
这里使用“goacl”。

个人原因

我一直希望能够编写Golang,我认为这
将是提高我的工作效率以及个人学习的好方法。

Golang
也被用在 HashiCorp 产品中,例如 Terraform 和 Kubernetes,所以
我认为基础设施工程师学习 Golang 有很多好处。

3. Goacl的用法和逻辑

由于它是一个 CLI 工具,因此可以从命令行执行。

用法

您只需输入 goacl 即可检查使用情况。

1
$ goacl goacl 是一个 CLI 工具,用于列出 AWS 安全组并添加/删除规则 用法:goacl [command] 可用命令:add 添加 SecurityGroup 规则 help 有关任何命令列表的帮助 列出 SecurityGroup 信息 标志:--config 字符串配置文件(默认)。是 $HOME/.goacl.yaml) -h, --help goacl 的帮助 -t, --toggle 用于切换的帮助消息 使用“goacl [command] --help”获取有关命令的更多信息。

列表

您可以查看安全组列表。
如下使用子命令“list”。

1
$ goacl list --region us-west-1 --profile default +------------+------------+-------- -- --+----------------+--------------+ | 组名称 | CIDRIP/组 ID | +- ------------+------------+------------+--------- ----- --+--------------+ | sg-XXXXXXXX | 默认 | sg-XXXXXXXX | +-------- ----- +------------+----------+----------------+--- ------ -----+

由于这是一篇博客,所以ID部分被屏蔽了,但是
在goacl内部,使用aws-sdk-go来获取安全组信息,并将
执行结果以表格的形式输出。


您可以指定要列出的区域和要用作
命令选项的如果未指定任何内容,则将使用默认值,
区域将为“ap-northeast-1”,配置文件将为“default”。

Cobra用于
实现子命令和选项它可能非常有名,因为它也被用在 Kubernetes 源代码中。

添加

您可以向特定安全组添加规​​则。
执行add命令时,需要使用yaml编写的配置文件。

1
规则: - groupid: sg-XXXXXXXX fromport: 80 toport: 80 ipprotocol: tcp ipranges: - 0.0.0.0/0 - groupid: sg-XXXXXXXX fromport: 443 toport: 443 ipprotocol: tcp ipranges: - 0.0.0.0/0

如果你想释放80/443端口,就像上面这样。
这是 ipranges 允许的 IP 地址,但
可以在此字段中输入多个条目。
让我们尝试一下。

1
$ goacl add --region us-west-1 --profile default --config config.yaml $ goacl list --region us-west-1 --profile default +------------ +------------+----------+----------------+-------- - -----+ | 组名 | CIDRIP/VPCID | +-------------+------------+-- ------+----------------+--------------+ | sg-XXXXXXXX | 默认 | 0.0/0 | vpc-XXXXXXXX | + +----------------+ | -1 | 0.0.0.0/0 | 0.0.0.0 ---------+------------+----------+---------------- + --------------+

您可以使用“--config”选项指定配置文件。
后面的选项与 list 命令类似。
如果执行add命令后运行list命令,可以确认已经添加。

逻辑使用
viper在Go代码中定义一个与yaml结构相同的结构体,
读取配置文件,执行viper.Unmarshal,将
yaml中写入的值存储到该结构体中。

1
type Config struct { Rules []Rules `yaml:rules` } type Rules struct { GroupID string `yaml:groupid` FromPort int64 `yaml:fromport` ToPort int64 `yaml:toport` IpProtocol string `yaml:ipprotocol` IpRanges []string `yaml:ipranges` }

我遇到了困难,因为我并没有真正理解结构的思想,但我
设法让它正常工作(我会再研究一下)

4.总结

我认为我们暂时会在内部使用它并识别任何错误,但
我们希望将来将它作为 OSS 发布。
我还不能删除规则,所以我会继续实现它们并在另一个博客中总结它们!

如果您觉得这篇文章有帮助,请点赞!
0
加载中...
0 票,平均:0.00 / 10
1,001
X Facebook 哈特纳书签 口袋
[2026.6.30 Amazon Linux 2支持端] Amazon Linux服务器迁移解决方案

[2026.6.30 Amazon Linux 2支持端] Amazon Linux服务器迁移解决方案

写这篇文章的人

关于作者

寺冈由纪

于 2016 年加入 Beyond,目前是他担任基础设施工程师
MSP 的第六个年头,他负责排除故障,同时
使用 AWS 等公共云设计和构建基础设施。
最近,我
一直在使用 Terraform 和 Packer 等 Hashicorp 工具作为构建 Docker 和 Kubernetes 等容器基础设施以及自动化操作的一部分,并且我
还扮演了在外部学习小组和研讨会上发言的传播者的角色。

・GitHub
https://github.com/nezumisannn

・演示历史
https://github.com/nezumisannn/my-profile

・演示材料(SpeakerDeck)
https://speakerdeck.com/nezumisannn

・认证:
AWS认证解决方案架构师-
谷歌云专业云架构师