【104】【AWS】【Terraform】セキュリティグループ、ポートについて
この記事を読むとセキュリティグループ、ポートについて、理解を深めることができます。
デフォルトのセキュリティグループ
AWSで仮想サーバーを構築する際(インスタンスの作成)、セキュリティグループの設定が必要です。
セキュリティグループはインスタンスの作成の際、デフォルトのセキュリティグループが自動的に作成されます。
セキュリティグループとは?
そもそもセキュリティグループとは何でしょうか?
伝言ゲームのような説明になってしまいますが、
セキュリティグループとはファイヤーウォールを設定することです。
ファイヤーウォール
ファイヤーウォールとは何でしょうか?
ファイヤーウォールとはパケットリファクタリングを行うことです。
パケットリファクタリング
パケットリファクタリングとは、流れるパケットを監視して、通過の可否を決める仕組みです。
セキュリティグループの設定
それではセキュリティグループの設定をしましょう。
セキュリティグループの設定と関わる重要な用語があります。
ingressとegressです。
ingressとegress
ingressはインバウンドルール、
egressはアウトバウンドルールの設定を行います。
インバウンドルール
インバウンドルールとは、外部から送られてくるパケットを、パケットリファクタリングすることです。
from_port = "22"
to_port = "22"
はポート番号の範囲を表します。
22-22という範囲です。
このインバウンドルールは、全てのIPアドレスに対して、ポート番号22の通信を許可するという設定です。
下記がセキュリティグループの設定です。vpcは以前の記事で作ったものを使っています。
resource "aws_security_group" "docker_ubuntu" {
name = "docker_ubuntu"
vpc_id = aws_vpc.docker_ubuntu.id
ingress {
from_port = "22"
protocol = "tcp"
to_port = "22"
cidr_blocks = ["0.0.0.0/0"]
}
egress {
from_port = 0
protocol = "-1"
to_port = 0
cidr_blocks = ["0.0.0.0/0"]
}
}
ポート番号とは??
そもそもポート番号とはなんでしょうか?
TCP/IPで通信するサーバーの機器には、他のコンピューターとデータを送受信するための窓口が用意されています。
これをポートと言います。
ssh接続する際、ターミナル上で謎のソフトウェアが作動して、接続できますよね。
この謎のソフトウェアはsshdというプログラムです。
ポート番号22ではsshdというプログラムが常に入力を待ち受けています。
本来、ポート番号を指定して、指定したポートのプログラムと通信する必要があります。
しかし、ポート番号22はよく使われている番号なので、ポート番号を省略して通信ができます。
ポート番号を省略して通信できるポート番号をウェルノウンポートと呼ばれます。
作成したセキュリティグループをインスタンに紐付ける
作成したセキュリティグループをインスタンスに紐付けましょう。
vpc_security_group_ids = [aws_security_group.docker_ubuntu.id]
に該当します。
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 3.27"
}
}
required_version = ">= 0.14.9"
}
provider "aws" {
profile = "default"
region = "ap-northeast-1"
}
resource "aws_instance" "app_server" {
// このamiはUbuntuです
ami = "ami-0df99b3a8349462c6"
instance_type = "t3.micro"
associate_public_ip_address = true
subnet_id = aws_subnet.public.id
vpc_security_group_ids = [aws_security_group.docker_ubuntu.id]
tags = {
Name = "ExampleAppServerInstance"
}
}
resource "aws_security_group" "docker_ubuntu" {
name = "docker_ubuntu"
vpc_id = aws_vpc.docker_ubuntu.id
ingress {
from_port = "22"
protocol = "tcp"
to_port = "22"
cidr_blocks = ["0.0.0.0/0"]
}
egress {
from_port = 0
protocol = "-1"
to_port = 0
cidr_blocks = ["0.0.0.0/0"]
}
}
上記のコード内のEC2の設定についてはこの記事を読んで下さい。
参考文献
実践Terraform AWSにおけるシステム設計とベストプラクティス (技術の泉シリーズ(NextPublishing)) オンデマンド (ペーパーバック)
Amazon Web Services 基礎からのネットワーク&サーバー構築 改訂3版
最後に
私がブログを書く目的は、素晴らしい本や、素晴らしい方々の技術記事を知って頂きたいからです。ぜひ、上記の参考文献を見て下さい。(noteなので広告とかは一切ありません。)
現在、株式会社grabssに行くために最後の悪あがきをしています!!
過去の活動
30日間でブログ記事を100件投稿しました。
トータルの投稿数
この記事は104件目の投稿です。
よろしければ、スキボタン及びサポートお願いします。勉強の励みになります。
この記事が気に入ったらサポートをしてみませんか?