前提条件
学習のため細かく分けて作成していきます。
今回の構成では、Public Subnet では SSH (22番ポート) のみを許可し、それ以外を拒否。
Private Subnet では Public Subnet からの SSH のみを許可し、他は拒否とします。
バージョン情報
- Terraform:
Terraform v1.10.5
- AWS CLI:
aws-cli/2.24.11 Python/3.12.9 Windows/11 exe/AMD64
前提条件
学習のため細かく分けて作成していきます。
今回の構成では、Public Subnet では SSH (22番ポート) のみを許可し、それ以外を拒否。
Private Subnet では Public Subnet からの SSH のみを許可し、他は拒否とします。
バージョン情報
- Terraform:
Terraform v1.10.5
- AWS CLI:
aws-cli/2.24.11 Python/3.12.9 Windows/11 exe/AMD64
Terraform ファイルの内容と実行結果
terraform init
terraform init
出力(抜粋):
Terraform has been successfully initialized!
terraform plan
terraform plan
出力結果(要約):
-
aws_network_acl
: Public/Private 用に 2 つ作成される -
aws_network_acl_rule
: 各 ACL に対してインバウンド/アウトバウンドルールが追加される - 合計 8 リソースが追加される予定
terraform apply
terraform apply
出力結果(要約):
Apply complete! Resources: 8 added, 0 changed, 0 destroyed.
作成したリソースの詳細
aws_network_acl リソースのパラメータ一覧
引数 (Arguments)
パラメータ名 | 説明 |
---|---|
vpc_id |
関連付ける VPC の ID。必須。 |
subnet_ids |
ACL を適用するサブネット ID のリスト。任意。 |
ingress |
インバウンドルールの定義。attribute-as-blocks モードで処理される。任意。 |
egress |
アウトバウンドルールの定義。attribute-as-blocks モードで処理される。任意。 |
tags |
タグのマップ。任意。 |
ingress
/ egress
に指定できるキー
キー名 | 説明 |
---|---|
from_port |
マッチさせる開始ポート。 |
to_port |
マッチさせる終了ポート。 |
rule_no |
ルール番号。評価順に使用される。 |
action |
許可(allow)または拒否(deny)。 |
protocol |
対象プロトコル(例: tcp, -1など)。 |
cidr_block |
対象の IPv4 CIDR ブロック。 |
ipv6_cidr_block |
対象の IPv6 CIDR ブロック。 |
icmp_type |
ICMP のタイプ。 |
icmp_code |
ICMP のコード。 |
※ IANA ICMP Parameters 参照
属性 (Attributes)
属性名 | 説明 |
---|---|
id |
Network ACL の ID。 |
arn |
Network ACL の ARN。 |
owner_id |
所有する AWS アカウントの ID。 |
tags_all |
すべてのタグのマップ。 |
aws_network_acl_rule パラメータ一覧
引数 (Arguments)
パラメータ名 | 説明 |
---|---|
network_acl_id |
関連付ける Network ACL の ID。 |
rule_number |
ルール番号(昇順で評価)。 |
egress |
送信ルールかどうか。 |
protocol |
プロトコル。-1 はすべてを意味する。 |
rule_action |
allow または deny 。 |
cidr_block |
対象のネットワーク範囲(IPv4)。 |
ipv6_cidr_block |
対象の IPv6 ネットワーク範囲。 |
from_port |
開始ポート。 |
to_port |
終了ポート。 |
icmp_type |
ICMP のタイプ。 |
icmp_code |
ICMP のコード。 |
属性
属性名 | 説明 |
---|---|
id |
Network ACL Rule の ID。 |
気づいたこと・勘違いしていたこと
- ACL はステートレスなため、インバウンド/アウトバウンドを両方定義する必要がある
- ドキュメントにはcidr_blockのパラメータはオプションと記載されていたが、cidr_blockを入れないとエラーが起きて作成に失敗した
まとめ
- Terraform を使って VPC 内のサブネットに ACL を設定
-
aws_network_acl
とaws_network_acl_rule
を組み合わせることで柔軟なアクセス制御が可能 - Network ACL はステートレスであるため、ルールは入出力の両方に必要
- 最小権限の原則に基づき、CIDR 指定を適切に行うことが重要
次回は セキュリティグループの作成 と最小権限の設計について学びます。