[初心者向け] Terraform で default セキュリティグループをあつかう
最近 Terraform に入門した西野です。
ひととおりチュートリアルを終え、いざ自分で .tf ファイルを書く段階になった途端、default セキュリティグループのルールを抹消したい欲求がフツフツとわき起こってきました。よくあることだと思います。 *1
Output Variables などを用いてこねくり回さないとだめなのだろうか…?と思いつつ公式ドキュメントを眺めていたところ、ちょうど良い Resource を見つけました。
aws_default_security_group
default セキュリティグループをあつかうための Resource は下記の aws_default_security_group です。
Resource: aws_default_security_group
通常の Resource の場合 Terraform は .tf ファイルにおける宣言によって対象の実体を 作成 します。
この aws_default_security_group の場合、既に存在する default セキュリティグループを 取り込む 動きをし、引数でわたされた設定で上書きするようです。
やってみた
新たな VPC を作成し、当該 VPC の dafault セキュリティグループからインバウンド/アウトバウンドルールを削除してみます。
resource "aws_vpc" "vpc" { cidr_block = "10.0.0.0/16" tags = { Name = "vpc" } } resource "aws_default_security_group" "default" { vpc_id = aws_vpc.vpc.id } output "default_security_group_id" { value = aws_default_security_group.default.id }
8-10行目で書いたように、aws_default_security_group の引数に ingress および egress を指定しないだけでインバウンド/アウトバウンドルールが削除されます。
terraform apply
後にAWS CLI から確認してみます。
$ terraform apply (略) Outputs: default_security_group_id = sg-097c5d767ea81e9e6 $ aws ec2 describe-security-groups --group-ids sg-097c5d767ea81e9e6 { "SecurityGroups": [ { "Description": "default VPC security group", "GroupName": "default", "IpPermissions": [], "OwnerId": "XXXXXXXXXXXX", "GroupId": "sg-097c5d767ea81e9e6", "IpPermissionsEgress": [], "VpcId": "vpc-03da122b6b0fbb94e" } ] }
インバウンドルール/アウトバウンドルールをあらわすIpPermissions
およびIpPermissionsEgress
が空になっていることがわかります。これが私の祈り、私の願い。
モジュール化してみた
すべての default セキュリティグループのルールを消し去るため、練習がてらモジュールを作ってみました。
ディレクトリツリー
. ├── main.tf └── modules └── vpc └── main.tf
.tf ファイル
variable "vpc_cidr_block" {} variable "vpc_name" {} resource "aws_vpc" "vpc" { cidr_block = var.vpc_cidr_block tags = { Name = var.vpc_name } } resource "aws_default_security_group" "default_sg" { vpc_id = aws_vpc.vpc.id }
module "vpc" { source = "./modules/vpc" vpc_cidr_block = "10.0.0.0/16" vpc_name = "vpc" }
終わりに
このブログがほんの少しでも世界を良くできれば嬉しいです。
コンサルティング部の西野 (@xiyegen) がお送りしました。
参考ブログ
Terraform RegistryのModuleを使ってAWSリソースを作成してみた