見出し画像

【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件目の投稿です。

よろしければ、スキボタン及びサポートお願いします。勉強の励みになります。


この記事が気に入ったらサポートをしてみませんか?