こんにちは。よっしーです(^^)
今日は、Terrafromを利用したECS環境の構築におけるSecurity Groupについてご紹介します。
前提
構築するECS環境は下記のサイトをベースにしています。
また、この記事は下記の記事の続きとなっています。
背景
この記事では、ECS環境におけるSecurity Groupの構築についてご紹介しています。
構築イメージ図
この記事で構築しようとしているECSの構成図は下記のとおりです。
ファイル作成
ECS環境の構築で作成するファイルは下記のとおりです。
21_learn_terraform-aws-ecs
├── main.tf
├── output.tf
├── variables.tf
├── ecs
│ ├── ecs.tf
│ ├── output.tf
│ └── variables.tf
├── iam
│ ├── iam.tf
│ ├── output.tf
│ └── variables.tf
├── lb
│ ├── lb.tf
│ ├── output.tf
│ └── variables.tf
├── sg
│ ├── output.tf
│ ├── sg.tf
│ └── variables.tf
└── vpc
├── output.tf
├── variables.tf
└── vpc.tf
今回は、下記のファイル内容をご紹介します。
- sg/sg.tf
- sg/output.tf
- sg/variables.tf
sg/sg.tf
下記の内容で新規作成します。
resource "aws_security_group" "learn_ecs_sg" {
name = var.tag_name
vpc_id = "${var.vpc_id}"
}
resource "aws_security_group_rule" "learn_ecs_ingress_http" {
type = "ingress"
from_port = "80"
to_port = "80"
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
security_group_id = aws_security_group.learn_ecs_sg.id
}
resource "aws_security_group_rule" "learn_ecs_egress" {
type = "egress"
from_port = 0
to_port = 0
protocol = "all"
cidr_blocks = ["0.0.0.0/0"]
security_group_id = aws_security_group.learn_ecs_sg.id
}
sg/output.tf
下記の内容で新規作成します。
output "sg_id" {
value = "${aws_security_group.learn_ecs_sg.id}"
}
sg/variables.tf
下記の内容で新規作成します。
variable "region" {}
variable "az_a" {}
variable "az_c" {}
variable "name_prefix" {}
variable "tag_name" {}
variable "tag_group" {}
variable "vpc_id" {}
解説
sg/sg.tf
このコードは、Terraformと呼ばれるインフラストラクチャのコード管理ツールを使用して、Amazon Web Services (AWS) 上でセキュリティグループを作成するためのものです。セキュリティグループは、AWSの仮想ネットワーク内でインスタンスやリソース間のトラフィックを制御するために使用されるものです。
以下にコード内の各リソースの解説を行います。
aws_security_group
リソース(learn_ecs_sg): このリソースは、新しいセキュリティグループを定義しています。セキュリティグループは、var.tag_name
で指定された名前と、var.vpc_id
で指定されたVPC(Virtual Private Cloud)内に作成されます。VPCはAWS内でプライベートなネットワーク環境を提供するためのものです。aws_security_group_rule
リソース(learn_ecs_ingress_http): このリソースは、インバウンドトラフィック(外部からのリクエスト)を許可するためのルールを定義しています。具体的には、TCPプロトコルを使用し、ポート番号80のトラフィックを許可する設定となっています。cidr_blocks
パラメータには、0.0.0.0/0 と指定されているため、どのIPアドレスからのトラフィックでも受け入れるように設定されています。これにより、セキュリティ上のリスクが存在するため、実際の運用環境では制限された範囲からのアクセスに制限する方が安全です。aws_security_group_rule
リソース(learn_ecs_egress): このリソースは、アウトバウンドトラフィック(リソースから外部へのリクエスト)を許可するためのルールを定義しています。こちらは、すべてのプロトコルとすべてのポートのトラフィックを許可する設定となっています。同様に、cidr_blocks
パラメータが 0.0.0.0/0 と指定されているため、どのIPアドレスへのトラフィックでも許可しています。セキュリティ上のリスクが高まるため、必要最小限のトラフィックだけを許可するようにすることが推奨されます。
以上の設定に基づいて、セキュリティグループとそのルールが定義されます。セキュリティグループは、AWS内でのネットワーク通信を制御する上で非常に重要な役割を果たすため、適切なセキュリティ設定が行われることが必要です。運用環境にデプロイする際には、セキュリティのベストプラクティスに従って適切に設定することが大切です。
sg/output.tf
このコードは、Terraformの output
ブロックを使用して、セキュリティグループのIDを出力するためのものです。output
ブロックを使用すると、Terraformの適用後に生成されるリソースの情報を表示できます。
ここでの output
ブロックの役割は、Terraformが実行された際に、セキュリティグループのIDを表示することです。この出力を、Terraformの適用後にコマンドラインなどで確認することができます。他のTerraformコードやスクリプトでこの出力値を使用することも可能です。
このコードの実行によって、セキュリティグループ learn_ecs_sg
のIDが sg_id
という名前で出力されるようになります。出力結果は、Terraformの適用後にコマンドライン上で確認できます。
この出力値を他のTerraformコードやスクリプトで使用する場合、var.sg_id
のように var
ブロック内で参照することもできます。
sg/variables.tf
このコードは、Terraformの variable
ブロックを使用して、変数を宣言しています。変数は、Terraformのコード内で値を保持するためのパラメータのようなもので、コードの再利用性や柔軟性を高めるために使用されます。変数を使うことで、異なる環境や設定で同じコードを使用する際に、値を変更せずに利用できるようになります。
以下が宣言されている各変数の説明です。
region
: AWSのリージョンを指定するための変数です。例えば、”us-west-1″や”eu-central-1″などが入ることが想定されます。az_a
およびaz_c
: Availability Zone(AZ)を指定するための変数です。AWSのリージョン内でリソースを配置する際、AZは冗長性や可用性を考慮して選択されます。これらの変数には、AZの識別子(例: “us-west-1a”、”eu-central-1c”)が入ることが想定されます。name_prefix
: リソースに付けるプレフィックス(接頭辞)を指定する変数です。例えば、”prod-” や “dev-” などが入ることが想定されます。tag_name
およびtag_group
: リソースに付けるタグの値を指定する変数です。AWSリソースにはタグを付けて、リソースの識別や管理を容易にすることができます。これらの変数には、適切なタグの値が入ることが想定されます。vpc_id
: Virtual Private Cloud(VPC)のIDを指定するための変数です。VPCはAWS内でプライベートなネットワーク環境を提供するもので、この変数には対象のVPCのIDが入ることが想定されます。
これらの変数は、Terraformのコード内で ${var.変数名}
の形式で参照され、変数に設定された値が使用されます。変数の値は通常、Terraformの実行時にコマンドライン引数や設定ファイルから提供されます。例えば、-var
フラグを使用して変数の値を指定することができます。
おわりに
今日は、Terrafromを利用したECR環境の構築するために必要なファイルの一部をご紹介しました。残りのファイルも明日以降、ご紹介していきます。
何か質問や相談があれば、コメントをお願いします。また、エンジニア案件の相談にも随時対応していますので、お気軽にお問い合わせください。
それでは、また明日お会いしましょう(^^)
コメント