Terraformを使ってSecurity Groupを一括操作してみた

2024年5月31日掲載

キービジュアル

ご覧いただきありがとうございます。ソフトバンクの結城です。

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を一括操作する例

■Security Groupに設定されているポリシーに対して変更操作する

<利用シナリオ>

  • 接続元IPアドレスが増えたため、複数のSecurity Groupに対してIPアドレスの許可ポリシー追加を一括で設定したい
  • 複数のSecurity Groupに追加されている特定のポリシーが不要になったため、ポリシー削除を一括で行いたい

<コードと説明>

■基本的なコード
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コンソールでポリシーが削除されたことを確認します。

■Security Groupに設定されているポリシーを確認する

<利用シナリオ>

  • 複数のSecurity Groupに対して、設定されているポリシーにについて棚卸、見直しを行いたい

<コードと説明>

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に対してポリシー追加をするのと比べてオペレーションミスの軽減に繋がると思います。

ぜひ、今回紹介した内容を活用いただき、工数削減やオペレーションミスの軽減を目指しましょう。

関連サービス

Alibaba Cloud

Alibaba Cloudは中国国内でのクラウド利用はもちろん、日本-中国間のネットワークの不安定さの解消、中国サイバーセキュリティ法への対策など、中国進出に際する課題を解消できるパブリッククラウドサービスです。

MSPサービス

MSP(Managed Service Provider)サービスは、お客さまのパブリッククラウドの導入から運用までをトータルでご提供するマネージドサービスです。

おすすめの記事

条件に該当するページがございません