フォーム読み込み中
ご覧いただきありがとうございます。ソフトバンクの結城です。
Alibaba Cloudで利用しているSecurity Groupの数が多い状況において、ポリシーの追加 / 削除、ポリシー設定の状況確認が必要になった場合、1つ1つのSecurity Groupに対して操作を行うと、とても時間が掛かります。
ですが、Terraformを使うことによって、複数のSecurity Groupに対して一括操作を行うことができて、なおかつ、短時間で操作を完了することができます。
今回はAlibaba CloudのSecurity Groupに対して、Terraformを使ってポリシー追加 / 削除 / 設定内容の参照を一括操作する方法を紹介します。
◎Alibaba CloudのSecurity Groupについて知識がある
◎Terraformの基礎知識がある
◎Terraformを使って複数のSecurity Groupに対して一括操作をしたい
・Terraformが実行できる環境
→ 本記事で紹介するTerraformの実行は、MacOS Ventura 13.5.1 / Terraform v1.7.5で実行します。
・RAMユーザ
→ terraformでリソース操作をするユーザはRAMユーザを使います。操作で使うRAMユーザについては、操作をするリソースの操作権限が付与されている必要があります。今回はECSのSecurity Groupを操作するので、RAMのシステムポリシー「AliyunECSFullAccess」が付与されている必要があります。
<利用シナリオ>
<コードと説明>
■基本的なコード
Terraformで既存のSecurity Groupに対して、ポリシー変更(追加/削除)を行う基本的なコードは以下の通りです。
※以下コードに記載されている「alicloud_security_group」の「vpc_id」や「alicloud_security_group_rule」の「security_group_id」、「type」、「ip_protocol」などの引数のほかにも引数が存在します。詳細については、Terraformの公式ドキュメントよりご確認ください。
resource "alicloud_security_group" "<任意の文字列>" {
vpc_id = "<VPCのインスタンスID>"
}
resource "alicloud_security_group_rule" "<任意の文字列>" {
security_group_id = "<Security GroupのID>"
type = "<認証の方向>"
ip_protocol = "<プロトコル>"
nic_type = "<ネットワークの種類>"
policy = "<許可 / 拒否>"
port_range = "<ポート番号の範囲>"
priority = <優先度>
cidr_ip = "<IPアドレス>"
}
■参考例1
以下のコードでは、指定したVPC内の指定したSecurity Groupにプロトコルをtcp、ポートを21、IPアドレス123.123.123.123、インバウンド通信を許可したポリシーを表しています。
resource "alicloud_security_group" "default" {
vpc_id = "vpc-xxxxxxx"
}
resource "alicloud_security_group_rule" "sg" {
security_group_id = "sg-xxxxxxx"
type = "ingress"
ip_protocol = "tcp"
nic_type = "intranet"
policy = "accept"
port_range = "21/21"
priority = 1
cidr_ip = "123.123.123.123"
}
■参考例2
以下のコードでは、指定したVPC内の指定した2つのSecurity Groupにプロトコルをtcp、ポートを21、IPアドレス123.123.123.123、インバウンド通信を許可したポリシーを表しています。
resource "alicloud_security_group" "default" {
vpc_id = "vpc-xxxxxxx"
}
resource "alicloud_security_group_rule" "sg" {
security_group_id = "sg-xxxxxxx1"
type = "ingress"
ip_protocol = "tcp"
nic_type = "intranet"
policy = "accept"
port_range = "21/21"
priority = 1
cidr_ip = "123.123.123.123"
}
resource "alicloud_security_group_rule" "sg2" {
security_group_id = "sg-xxxxxxx2"
type = "ingress"
ip_protocol = "tcp"
nic_type = "intranet"
policy = "accept"
port_range = "21/21"
priority = 1
cidr_ip = "123.123.123.123"
}
■実行方法
$terraform appy (ポリシーの追加)
$terraform destroy (ポリシーの削除)
<制限事項>
・「alicloud_security_group_rule」はTerraform v1.0.0以降で利用することができます。
・Security Groupに追加されているポリシーをterraformで削除したい場合は、terraformを使って追加されたポリシーのみが削除できます。コンソール操作等で追加されたポリシーについてはterraformで削除することができません。
■実行例
<ポリシー追加>
-実行コード-
source "alicloud_security_group" "default" {
vpc_id = "vpc-xxxxxxx"
}
resource "alicloud_security_group_rule" "sg" {
security_group_id = "sg-xxxxxxx"
type = "ingress"
ip_protocol = "tcp"
nic_type = "intranet"
policy = "accept"
port_range = "22/22"
priority = 1
cidr_ip = "123.123.123.123"
① Alibaba Cloudコンソールで操作するSecurity Groupのポリシー設定状況を確認します。
② terraform initを実行
③ terraform applyを実行
④ Alibaba Cloudコンソールを確認し、ポリシーが追加されていることを確認します。
<ポリシー削除>
-実行コード-
source "alicloud_security_group" "default" {
vpc_id = "vpc-xxxxxxx"
}
resource "alicloud_security_group_rule" "sg" {
security_group_id = "sg-xxxxxxx"
type = "ingress"
ip_protocol = "tcp"
nic_type = "intranet"
policy = "accept"
port_range = "22/22"
priority = 1
cidr_ip = "123.123.123.123"
}
① Alibaba Cloudコンソールで操作するSecurity Groupのポリシー設定状況を確認します。
② terraform destroyを実行
③ Alibaba Cloudコンソールでポリシーが削除されたことを確認します。
<利用シナリオ>
<コードと説明>
Terraformで既存のSecurity Groupに対して、設定されているポリシーの参照を行う基本的なコードは以下の通りです。
※以下コードに記載されている「alibabacloudstack_security_groups」の「name_regex」や「alibabacloudstack_security_group_rules」の「group_id」、「nic_tpe」、「direction」などの引数のほかにも引数が存在します。詳細については、Terraformの公式ドキュメントよりご確認ください。
data "alibabacloudstack_security_groups" "<任意の文字列>" {
name_regex = "api"
}
data "alibabacloudstack_security_group_rules" "<任意の文字列>" {
group_id = "<Security GroupのID>"
nic_type = "<ネットワークの種類>"
direction = "<認証の方向>"
ip_protocol = "<プロトコル>"
}
■参考例1
以下のコードでは、指定したSecurity Group内に追加されているポリシーを確認できます。
data "alibabacloudstack_security_groups" "<任意の文字列>" {
name_regex = "api"
}
data "alibabacloudstack_security_group_rules" "<任意の文字列>" {
group_id = "<Security GroupのID>"
nic_type = "<ネットワークの種類>"
direction = "<認証の方向>"
ip_protocol = "<プロトコル>"
}
■参考例2
以下のコードでは、複数のSecurity Group内に追加されているポリシーを確認できます。
data "alibabacloudstack_security_groups" "groups_ds" {
name_regex = "api"
}
data "alibabacloudstack_security_group_rules" "ingress_rules_ds" {
group_id = "sg-xxxxxxx"
nic_type = "internet"
direction = "ingress"
}
data "alibabacloudstack_security_group_rules" "ingress_rules_ds2" {
group_id = "sg-xxxxxxx"
nic_type = "internet"
direction = "ingress"
}
■実行方法
$terraform apply
<制限事項>
特にありません。
■実行例
<ポリシー参照>
-実行コード-
data "alibabacloudstack_security_groups" "groups_ds" {
name_regex = "api"
}
data "alibabacloudstack_security_group_rules" "ingress_rules_ds" {
group_id = "sg-xxxxxxx"
nic_type = "internet"
direction = "ingress"
}
data "alibabacloudstack_security_group_rules" "ingress_rules_ds" {
group_id = "sg-xxxxxxx"
nic_type = "internet"
direction = "ingress"
}
① Alibaba Cloudコンソールで操作するSecurity Groupのポリシー設定状況を確認します。
② terraform applyを実行
③ terraform.tfstateファイルの中身を確認します。確認してみると、セキュリティグループに追加されているIPとポリシーの詳細を確認できます。
今回はTerraformを使って、Alibaba Cloud ECSのSecurity Groupに対して、ポリシー追加 / 削除 / 設定内容の参照をする方法について紹介しました。
多くのSecurity Groupを利用している状況で、手動で同じポリシーを複数のSecurity Groupに追加 / 削除する、複数のSecurity Groupに設定されているポリシーを参照したいといった場合は、Terraformを使って一括操作をすることによって作業時間が短縮できることが見込めます。さらに、Terraformを使って複数のSecurity Groupに対してポリシー追加を一括操作で行うと、手動で複数のSecurity Groupに対してポリシー追加をするのと比べてオペレーションミスの軽減に繋がると思います。
ぜひ、今回紹介した内容を活用いただき、工数削減やオペレーションミスの軽減を目指しましょう。
条件に該当するページがございません