+ 作るログイン
1 / 20
AWS でサービスを作る ― 知識ゼロから、構成を自分で考えられるまで / 全32章

AWS 08:セキュリティグループと NACL

発行
アニメモ公式
版
第2版
改訂
コマ
全20

道案内で「届く」ようになった通信を、扉の前で通すか断るかを決めます。ポート(機械の中の窓口番号)と一時ポートの考え方から始め、機械ごとの門番であるセキュリティグループの「許可だけ・返事を覚える」性質、入口 → Web → DB と「1つ手前の門番」だけを許すつなぎ方、部屋ごとの関所である NACL との違い、0.0.0.0/0 で管理用の窓口を開ける事故と、つながらないときの調べ方までを、同じ舞台に門番を1人ずつ立てながら説明します。

道はできた。でも、扉の前まで誰でも来られる

第5〜7章で、フォトログの VPC に部屋(サブネット)と道案内(ルートテーブル)、外への扉(IGW)と外へ出る道(NAT)をそろえました。図は、その舞台に機械を置いたところです。公開の部屋に入口(第11章のロードバランサー)、非公開の部屋に Web と DB がいます。

ここで思い出してほしいのが、第6章の local の行です。同じ VPC の中なら、どの部屋の機械からでも、どの部屋の機械にも届きます。

困りごとどういうことか
DB に誰でも届く入口の機械からも、DB の前まで直接届く(図の赤い矢印)。本来、DB に話しかけてよいのは Web だけ
窓口を選べない入口の機械には、ホームページを見せる窓口だけでなく、管理用の窓口もある。外からどの窓口にでも届いてしまうかもしれない

道案内が決めるのは「届くかどうか」だけです。届いた通信を、扉の前で通すか、断るかは、まだ誰も決めていません。

この章では、扉の前に立つ門番を置きます。AWS では、機械ごとの門番をセキュリティグループ(SG)、部屋ごとの関所を NACL(ネットワーク ACL)と呼びます。その前に、「扉」や「窓口」とは何かを、ポートという言葉で説明します。

※2026年9月時点の情報です。画面・料金・細部は変わることがあります。

  • AWS でサービスを作る 08 ― セキュリティグループと NACL
  • 1 / 20
  • 道はできた。でも、扉の前まで誰でも来られる
  • VPC:photolog-prod 10.0.0.0/16
  • AZ a
  • AZ c
  • 公開サブネット a
  • 公開サブネット c
  • ネットワーク
  • ネットワーク
  • インターネット
  • ルーター
  • 入口
  • 入口
  • インターネット
  • IGW
  • 非公開サブネット a
  • 非公開サブネット c
  • データベース
  • サーバー
  • データベース
  • サーバー
  • DB
  • Web
  • DB 予備
  • Web
  • local の行があるので、VPC の中ならどの機械からでも DB の前まで届く。入口から DB へ直接でも
  • 入口の機械にも、ホームページ用の窓口だけでなく管理用の窓口まで、外から届くかもしれない
  • ひらめき
  • 道案内は「届くか」を決めるだけ。届いた通信を通すか断るかは、まだ誰も決めていない。

ポートは、建物の中の窓口番号

IP アドレスが建物の住所だとすると、ポートは、その建物の中の窓口の番号です。

市役所を思い浮かべてください。住所は1つでも、中には「1番:住民票」「2番:税金」「3番:子育て」のように、用事ごとに窓口が分かれています。サーバーも同じで、1台のコンピューターの中で、いくつものプログラムがそれぞれ別の窓口(ポート)で待っています。

ポートは 0〜65535 の番号です。よく使う窓口には、世界共通の決まった番号があります。

ポート何の窓口か誰に開けるか(フォトログ)
443HTTPS(鍵のかかった Web の通信)世界中の利用者
80HTTP(鍵のない Web の通信)世界中の利用者(HTTPS へ案内するため。第14章)
22SSH(遠くからログインする)誰にも開けない(第7章の Session Manager を使う)
5432PostgreSQL(DB の一種)Web だけ
3306MySQL(DB の一種)Web だけ
3389RDP(Windows に遠くからログイン)誰にも開けない

HTTP は、ブラウザと Web サーバーがやり取りするときの約束事です。HTTPS はそれを暗号化したもので、今の Web はほぼこちらです。

図の小包の宛先は「10.0.1.10 の 443番」です。建物の住所に加えて、どの窓口宛てかまで書かれているのです。門番は、この窓口番号を見て「この窓口宛てなら通す」「この窓口は断る」を判断します。

  • AWS でサービスを作る 08 ― セキュリティグループと NACL
  • 2 / 20
  • ポートは、建物の中の窓口番号
  • ノートPC
  • 利用者の PC
  • サーバー
  • サーバー 10.0.1.10(建物の住所)
  • 写真を見たい
  • 443
  • HTTPS(鍵のかかった Web)
  • 10.0.1.10 の 443番
  • 80
  • HTTP(鍵のない Web)
  • 22
  • SSH(遠くからログイン)
  • 5432
  • PostgreSQL(DB)
  • 3306
  • MySQL(DB)
  • ひらめき
  • IP アドレスが建物の住所なら、ポートは「何番窓口か」。1台の中で、用事ごとに窓口が分かれている。

通信は「差出人の番号と窓口」「宛先の番号と窓口」の組

もう少しだけ、通信の中身を見ておきます。この知識は、後半の NACL で効いてきます。

利用者の PC がフォトログのサーバーに写真を見せてと頼むとき、小包には次の4つが書かれています。

項目行き帰り
差出人の番号203.0.113.9(利用者)10.0.1.10(サーバー)
差出人の窓口50123443
宛先の番号10.0.1.10(サーバー)203.0.113.9(利用者)
宛先の窓口44350123

サーバー側の窓口(443)は、いつも決まっています。では利用者側の 50123 は何でしょう。

これは、頼む側の PC がその場で空いている番号を選んだ窓口です。「返事はこの窓口に返してね」という意味で、通信のたびに別の番号が選ばれます。こうした一時的な窓口を一時ポート(エフェメラルポート)と呼びます。多くの OS では、1024〜65535 のあたりから選ばれます。

つまり、サーバーから見ると、返事の宛先の窓口は毎回違い、しかも前もってわからないのです。

この「返事は、決まっていない窓口宛てに出ていく」ことが、門番の作りによっては問題になります。次の SG ではうまく処理され、後半の NACL では自分で面倒を見る必要が出てきます。

  • AWS でサービスを作る 08 ― セキュリティグループと NACL
  • 3 / 20
  • 通信は「差出人の番号と窓口」「宛先の番号と窓口」の組
  • ノートPC
  • 利用者の PC
  • サーバー
  • サーバー
  • 203.0.113.9
  • 行き:宛先 443番へ
  • 帰り:宛先 50123番へ
  • 10.0.1.10
  • 窓口 50123(その場)
  • 窓口 443(固定)
  • サーバーの窓口(443)は決まっている。頼む側の窓口(50123)は毎回その場で空いている番号が選ばれる
  • この「その場の窓口」を一時ポート(エフェメラルポート)と呼ぶ。NACL の話で効いてくる
  • ひらめき
  • 頼む側は空いている窓口(50123 など)を毎回その場で選ぶ。返事は、その窓口宛てに戻ってくる。

セキュリティグループ=機械ごとに立つ門番

セキュリティグループ(SG)は、機械ごとに付ける門番です。正確には、機械がネットワークにつながる口(第7章で出てきた ENI)に付きます。EC2 のサーバー、ロードバランサー、データベースなど、VPC の中に置くほとんどのものに付けられます。

門番は、ルールの表を持っています。

門番の性質内容
書けるのは「許可」だけ「この窓口に、この相手から来たら通す」を書く。「断る」ルールは書けない
書いていない通信は断る許可のルールに当てはまらない通信は、全部断る
入ってくる・出ていくを別に書くインバウンド(入ってくる)とアウトバウンド(出ていく)の2つの表がある
複数付けられる1台に複数の門番を付けると、全部のルールを合わせた範囲が許可になる

新しく門番を作ったときの最初の状態は、次のとおりです。

方向最初の状態意味
入ってくるルール無し全部断る。何も開いていない
出ていく全部許可機械から外への通信は全部通す

「何も書かなければ、入ってくるものは全部断る」。これは第6章の「道を書かなければ閉じている」と同じ、安全な側に倒れる作りです。門番を置いたら、必要な窓口だけを、必要な相手にだけ、1つずつ開けていきます。

SG には料金がかかりません。いくつ作っても無料です。

  • AWS でサービスを作る 08 ― セキュリティグループと NACL
  • 4 / 20
  • セキュリティグループ=機械ごとに立つ門番
  • サーバー
  • 盾
  • 許可した通信
  • 出ていく通信
  • NG
  • Web サーバー
  • 書いていない通信
  • 門番付き
  • 入ってくる(インバウンド)
  • 最初は何も許可なし=全部断る
  • 出ていく(アウトバウンド)
  • 最初は全部許可
  • ルールは「許可」だけ。禁止は書けない。何も書かなければ入ってくる通信は全部断る
  • 1台に複数の SG を付けられ、そのときは全部のルールを合わせた範囲が許可になる
  • ひらめき
  • SG は機械ごとに付ける門番。許可のルールだけを書き、書いていない通信は全部断る。

ルールの読み方:どの窓口に、誰から

門番のルールは、1行が次の項目でできています。

項目意味例
種類通信の種類。選ぶとプロトコルとポートが決まるHTTPS、SSH、PostgreSQL、カスタム TCP
プロトコル通信の約束事TCP(ほとんどの通信)
ポートどの窓口か443、5432
送信元誰から来た通信を許すか0.0.0.0/0、10.0.0.0/16、sg-web
説明何のためのルールか「利用者からの HTTPS」

図の左の板は、フォトログの入口の門番(sg-alb)と DB の門番(sg-db)のルールです。

送信元には2種類の書き方があります。

書き方意味
番号の範囲(CIDR)0.0.0.0/0 なら世界中の誰でも、203.0.113.0/24 なら会社の番号の範囲から
別の門番の名前sg-web なら「sg-web という門番が付いている機械から」

2つ目の書き方が SG のいちばん便利なところで、この章の中心です。後で詳しく見ます。

そして、`0.0.0.0/0` は「世界中の誰でも」です。第6章で見たとおり、/0 は1桁も固定しない、すべての住所という意味でした。このルールを書いてよいのは、本当に世界中の誰にでも開けたい窓口(Web の 443 と 80)だけです。それ以外に書いたときに何が起きるかは、この章の後半で見ます。

「説明」の欄は空でも動きますが、必ず書きましょう。半年後に見返したとき、「このルールは何のため? 消していい?」がわからなくなるのを防げます。

  • AWS でサービスを作る 08 ― セキュリティグループと NACL
  • 5 / 20
  • ルールの読み方:どの窓口に、誰から
  • # sg-alb(入口の門番)のインバウンド
  • 種類
  • HTTPS など。選ぶとポートが決まる
  • 種類 / ポート / 送信元
  • HTTPS / 443 / 0.0.0.0/0
  • HTTP / 80 / 0.0.0.0/0
  • ポート
  • どの窓口か(443 など)
  • # sg-db(DB の門番)のインバウンド
  • 送信元
  • 番号の範囲か、門番の名前
  • 種類 / ポート / 送信元
  • PostgreSQL / 5432 / sg-web(Web の門番)
  • 説明
  • 何のためのルールかを書く
  • 0.0.0.0/0=世界中の誰でも
  • ひらめき
  • 1行のルールは「種類・ポート・送信元」。送信元には番号の範囲か、別の門番の名前を書く。

門番は、通した相手の返事を覚えている

SG のもう1つの大事な性質は、状態を覚える(ステートフル)ことです。

図で、利用者の PC(窓口 50123)が入口(窓口 443)にリクエストを送りました。入口の門番のルールには「443 を世界中から許可」があるので、通します。

では、入口からの返事はどうでしょう。返事の宛先は利用者の窓口 50123 です。出ていくルールに 50123 は書いていないかもしれません。

場面門番の判断
行き(443 宛て)入ってくるルールを見て、許可されているので通す
帰り(50123 宛て)さっき通した通信の返事だと覚えているので、出ていくルールに関係なく通す

門番は、通した通信を覚えていて、その返事は自動で通してくれます。逆向きも同じで、機械から外へ出ていった通信の返事は、入ってくるルールに書いていなくても戻ってこられます。

状態を覚えるおかげで内容
返事のためのルールが要らない一時ポートの広い範囲を開けておく必要がない
ルールが読みやすい「誰から、どの窓口へ」だけを考えればよい

第7章の NAT が「覚えていた相手にだけ返す」のと似ています。ルールで考えるのは、通信が始まる方向だけ。これが SG を扱うときの基本の考え方です。

  • AWS でサービスを作る 08 ― セキュリティグループと NACL
  • 6 / 20
  • 門番は、通した相手の返事を覚えている
  • 盾
  • ノートPC
  • 利用者の PC
  • 行き:443 はルールで許可
  • サーバー
  • 入口
  • 窓口 50123
  • 帰り:覚えているので自動で通す
  • 窓口 443
  • OK
  • 返事のための出ていくルールを書かなくてよい
  • OK
  • 返事のために入ってくるルールを書かなくてよい
  • ひらめき
  • SG は「状態を覚える」門番。入れた通信の返事は、出ていくルールに関係なく自動で通す。

入口の門番:HTTPS を世界中から

ここからは、フォトログの舞台に門番を1人ずつ立てていきます。図の盾の絵が門番(SG)です。

最初は入口の門番 sg-alb です。入口は、世界中の利用者のリクエストを受ける場所なので、次のルールにします。

ポート送信元理由
443(HTTPS)0.0.0.0/0利用者は世界中の誰でもよい
80(HTTP)0.0.0.0/0鍵のない通信で来た人を HTTPS へ案内するため(第14章)

図の下の表では、見やすくするために 443 の行だけを出しています。

入口は2つの AZ に1台ずつありますが、同じ門番を両方に付けています。門番は「ルールの表」なので、同じ役目の機械には同じ門番を付ければ、ルールを1か所で管理できます。

この門番の入ってくるルールには、22番(SSH)も 5432番(DB)も書いてありません。だから、外から入口の機械の管理用の窓口を叩いても、門番が断ります。

入口の機械が受け取ったリクエストは、次に中の Web へ取り次がれます。Web の前には、別の門番が立ちます。

  • AWS でサービスを作る 08 ― セキュリティグループと NACL
  • 7 / 20
  • 入口の門番:HTTPS を世界中から
  • VPC:photolog-prod 10.0.0.0/16
  • AZ a
  • AZ c
  • 公開サブネット a
  • 公開サブネット c
  • ネットワーク
  • 盾
  • ネットワーク
  • 盾
  • インターネット
  • ルーター
  • 入口
  • 入口
  • インターネット
  • IGW
  • 非公開サブネット a
  • 非公開サブネット c
  • 443番宛て
  • データベース
  • サーバー
  • データベース
  • サーバー
  • DB
  • Web
  • DB 予備
  • Web
  • 盾
  • sg-alb(入口の門番)
  • ポート(どの窓口)
  • 443(HTTPS)
  • 送信元(誰から)
  • インバウンド(入ってくる通信)のルール
  • 0.0.0.0/0(世界中の誰でも)
  • ひらめき
  • 入口(第11章の ALB)の門番は、443番を 0.0.0.0/0 から許す。利用者は世界中の誰でもよいから。

Web の門番:入口の門番から来た人だけ

次は Web の門番 sg-web です。

Web に話しかけてよいのは誰でしょうか。利用者は入口を通ってくるので、Web に直接届く必要はありません。Web に話しかけてよいのは入口の機械だけです。

ポート送信元意味
80(HTTP)sg-alb「入口の門番が付いている機械」から来た通信だけ通す

ここで、送信元に番号の範囲ではなく、門番の名前(sg-alb)を書いています。これが SG から SG を許す書き方です。

送信元の書き方通る相手
0.0.0.0/0世界中の誰でも
10.0.1.0/24公開サブネット a にいる機械なら何でも
sg-albsg-alb が付いている機械だけ(どの部屋にいても)

2つ目の「部屋の番号の範囲で許す」も一見よさそうですが、公開の部屋に後から別の機械(たとえば第7章の NAT や、別の用途のサーバー)を置くと、その機械からも Web に届いてしまいます。門番の名前で書けば、入口の役目を持つ機械だけに絞れます。

入口と Web の間の通信は、ここでは HTTP(80番)にしています。利用者と入口の間は HTTPS で暗号化し、VPC の中は HTTP で受け渡すのは、よくある形です(第14章)。

  • AWS でサービスを作る 08 ― セキュリティグループと NACL
  • 8 / 20
  • Web の門番:入口の門番から来た人だけ
  • VPC:photolog-prod 10.0.0.0/16
  • AZ a
  • AZ c
  • 公開サブネット a
  • 公開サブネット c
  • ネットワーク
  • 盾
  • ネットワーク
  • 盾
  • インターネット
  • ルーター
  • 入口
  • 入口
  • インターネット
  • IGW
  • 非公開サブネット a
  • 盾
  • 非公開サブネット c
  • データベース
  • サーバー
  • データベース
  • サーバー
  • 盾
  • DB
  • Web
  • DB 予備
  • Web
  • 盾
  • sg-web(Web の門番)
  • ポート(どの窓口)
  • 80(HTTP)
  • 送信元(誰から)
  • インバウンド(入ってくる通信)のルール
  • sg-alb(入口の門番が付いた機械)
  • ひらめき
  • Web の門番は、送信元に「sg-alb」と書く。入口を通ってきた通信だけが Web に届く。

DB の門番:Web の門番から来た人だけ

最後は DB の門番 sg-db です。DB に話しかけてよいのは Web だけです。

ポート送信元意味
5432(PostgreSQL)sg-webWeb の門番が付いた機械からだけ通す

図で、入口から DB への赤い矢印を見てください。第6章の local の行があるので、道としては届きます。でも、入口の機械には sg-alb が付いていて、sg-web は付いていません。だから DB の門番が断ります。

これで、通信の流れがこうなりました。

区間通す門番条件
利用者 → 入口sg-alb443・80 を世界中から
入口 → Websg-web80 を sg-alb から
Web → DBsg-db5432 を sg-web から

どの門番も、1つ手前の門番から来た通信だけを許しています。これを鎖のようにつなぐことで、「利用者は入口にしか届かず、入口は Web にしか届かず、DB に届くのは Web だけ」という形ができます。

もし入口の機械が乗っ取られても、DB には直接届きません。守りを何段にも重ねるこの考え方を多層防御と呼び、第27章で本格的に扱います。

  • AWS でサービスを作る 08 ― セキュリティグループと NACL
  • 9 / 20
  • DB の門番:Web の門番から来た人だけ
  • VPC:photolog-prod 10.0.0.0/16
  • AZ a
  • AZ c
  • 公開サブネット a
  • 公開サブネット c
  • ネットワーク
  • 盾
  • ネットワーク
  • 盾
  • インターネット
  • ルーター
  • 入口
  • 入口
  • インターネット
  • IGW
  • 非公開サブネット a
  • NG
  • 盾
  • 盾
  • 非公開サブネット c
  • データベース
  • サーバー
  • データベース
  • 盾
  • サーバー
  • 盾
  • DB
  • Web
  • DB 予備
  • Web
  • 盾
  • sg-db(DB の門番)
  • ポート(どの窓口)
  • 5432(PostgreSQL)
  • 送信元(誰から)
  • インバウンド(入ってくる通信)のルール
  • sg-web(Web の門番が付いた機械)
  • ひらめき
  • DB の門番は 5432番を sg-web からだけ許す。入口の機械が DB を叩いても、門番が断る。

番号ではなく、門番の名前で許す理由

門番の名前で許す書き方が、特に効いてくる場面があります。機械の数や番号が変わるときです。

第12章で、利用者が増えたら Web サーバーを自動で増やし、壊れたら自動で入れ替える仕組み(Auto Scaling)を作ります。そうなると、Web の IP アドレスは次々に変わります。

送信元の書き方Web が増えたとき
Web の番号を1つずつ(10.0.11.20/32 など)新しい Web の番号を DB の門番に書き足す必要がある。忘れると、新しい Web だけ DB に届かない
sg-web新しい Web に sg-web を付けるだけ。DB の門番は書き換えない

図では、3台目の Web(10.0.11.47)が新しく増えました。DB の門番のルールは「5432 ← sg-web」のままですが、3台目にも sg-web が付いているので、何も書き換えずに DB に届きます。

門番の名前で書くと、ルールが「どの役目の機械か」という意味で書けるようになります。番号は変わっても、役目は変わりません。

考え方効果
門番は役目ごとに1つ作る入口・Web・DB・窓口…と役目で分ける
送信元は「1つ手前の役目の門番」通信の流れがそのままルールになる
番号の範囲を書くのは外との境目だけ0.0.0.0/0(利用者)や会社の番号の範囲など
  • AWS でサービスを作る 08 ― セキュリティグループと NACL
  • 10 / 20
  • 番号ではなく、門番の名前で許す理由
  • sg-web が付いた Web サーバーたち
  • サーバー
  • Web 1
  • 10.0.11.20
  • 盾
  • サーバー
  • Web 2
  • データベース
  • DB
  • 10.0.12.31
  • 全員通す
  • 5432 ← sg-web
  • サーバー
  • Web 3
  • 10.0.11.47(いま増えた)
  • NG
  • 番号で書くと、増減のたびに書き換え
  • OK
  • 名前なら、門番を付けるだけで仲間入り
  • ひらめき
  • Web は自動で増えたり入れ替わったりして番号が変わる。門番の名前で書けば、書き換えずに済む。

NACL=部屋の出入口の関所

門番はもう1種類あります。NACL(ネットワーク ACL:アクセス制御リスト)です。

SG が機械ごとの門番なら、NACL は部屋(サブネット)ごとの関所です。図では、4つの部屋の入口に NACL の札を付けました。部屋に入ってくる通信と、部屋から出ていく通信を、この関所が調べます。同じ部屋の中の機械どうしの通信は、関所を通りません。

NACL の性質内容
付ける場所部屋ごとに1つ(1つの NACL を複数の部屋で共有もできる)
書けるルール許可と禁止の両方
ルールの見方ルールに番号を付け、小さい番号から順に見て、最初に当たったものに従う
返事覚えない(次で説明)
料金無料

VPC を作ると、既定の NACL が1つ作られ、すべての部屋に付いています。既定の NACL のルールは「入ってくるものも出ていくものも全部通す」です。つまり、何も変えなければ関所は素通りで、実際の守りは SG が担っています。

一方、自分で新しく作った NACL は、最初は「全部断る」状態です。ルールを足さずに部屋に付けると、その部屋は何も通さなくなります。

ルールの番号は、あとで間に足せるように、100、200、300…のように間を空けて付けるのが一般的です。

  • AWS でサービスを作る 08 ― セキュリティグループと NACL
  • 11 / 20
  • NACL=部屋の出入口の関所
  • VPC:photolog-prod 10.0.0.0/16
  • AZ a
  • NACL
  • AZ c
  • 公開サブネット a
  • 公開サブネット c
  • NACL
  • ネットワーク
  • ネットワーク
  • インターネット
  • ルーター
  • 入口
  • 入口
  • インターネット
  • IGW
  • 非公開サブネット a
  • NACL
  • 非公開サブネット c
  • NACL
  • データベース
  • サーバー
  • データベース
  • サーバー
  • DB
  • Web
  • DB 予備
  • Web
  • SG は機械ごとの門番、NACL は部屋ごとの関所。関所は許可も禁止も書け、番号の小さいルールから順に見る
  • VPC に最初からある NACL は「全部通す」。何も変えなければ関所は素通りで、守りは SG が担う
  • ひらめき
  • NACL は部屋(サブネット)の境目に立つ関所。部屋に出入りする通信を、番号順のルールで調べる。

関所は、返事を覚えていない

NACL と SG のいちばん大きな違いは、NACL が状態を覚えない(ステートレス)ことです。

図で、利用者(窓口 50123)から入口(窓口 443)へのリクエストが、関所を通って届きました。入ってくるルールに「443 を許可」があるからです。

では返事はどうでしょう。返事の宛先の窓口は 50123 です。関所はさっき通した通信のことを覚えていないので、出ていくルールを見て、あらためて判断します。

出ていくルール返事(50123 宛て)は
443 だけ許可当てはまらないので止められる。利用者には「応答なし」に見える
1024〜65535 を許可一時ポートの範囲に入るので通る

この章の前半で見たとおり、返事の宛先の窓口(一時ポート)は毎回違い、前もってわかりません。だから NACL では、返事のために一時ポートの範囲をまるごと許可する必要があります。入ってくる側も同じで、中の機械が外へ出た通信の返事を受け取るには、入ってくるルールに一時ポートの範囲を許可しておく必要があります。

方向忘れやすいルール
部屋に入ってくる通信の返事出ていくルールに 1024〜65535
部屋から出ていく通信の返事(更新・API など)入ってくるルールに 1024〜65535

これを忘れると、「行きは届いているのに、返事が戻らずに時間切れになる」という、原因を見つけにくいトラブルになります。

  • AWS でサービスを作る 08 ― セキュリティグループと NACL
  • 12 / 20
  • 関所は、返事を覚えていない
  • 行き:443 宛てを許可
  • 旗
  • ノートPC
  • 利用者の PC
  • サーバー
  • 入口
  • 窓口 50123
  • 窓口 443
  • NG
  • 関所 NACL
  • 帰り:50123 宛て
  • 出ていくルールが 443 だけ
  • 返事は 50123 宛てなので止められる
  • 出ていくルールに 1024-65535
  • 返事の窓口の範囲を許して、やっと届く
  • ひらめき
  • NACL は状態を覚えない。行きを許しても、返事(一時ポート宛て)の通り道を別に許さないと届かない。

SG と NACL の違い

2種類の門番を並べてみます。

セキュリティグループNACL
付ける場所機械(ネットワークの口)ごと部屋(サブネット)ごと
書けるルール許可だけ許可と禁止
返事覚えていて自動で通す覚えない。返事の通り道も別に許可
ルールの見方全部のルールを合わせて判断番号の小さい順に、最初に当たったもの
送信元の書き方番号の範囲・門番の名前番号の範囲だけ
最初の状態新しい SG は入ってくる通信を全部断る既定の NACL は全部通す。新しく作った NACL は全部断る
料金無料無料

では、どう使い分ければよいでしょうか。

使い方どちらで
ふだんの守り(誰がどの窓口に届くか)SG。門番の名前で書け、返事も考えなくてよい
特定の番号の範囲を部屋ごと締め出すNACL の「禁止」。SG には禁止が書けない
「この部屋からは絶対にあの部屋へ行かせない」という大きな線引きNACL。SG の設定ミスがあっても、部屋の境目で止まる

多くの構成では、NACL は既定(全部通す)のままにして、守りは SG で行うのが基本です。NACL を細かく書くと、一時ポートの考慮が必要になり、つながらない原因を増やしがちだからです。NACL は、組織の決まりで部屋単位の線引きが必要なときや、攻撃元の番号をまとめて締め出したいときに、2枚目の守りとして使います。

  • AWS でサービスを作る 08 ― セキュリティグループと NACL
  • 13 / 20
  • SG と NACL の違い
  • セキュリティグループ
  • NACL
  • 付ける場所
  • 機械(ネットワークの口)ごと
  • 部屋(サブネット)ごと
  • 書けるルール
  • 許可だけ
  • 許可と禁止
  • 返事
  • 覚えていて自動で通す
  • 覚えない。別に許可が要る
  • ルールの見方
  • 全部を合わせて判断
  • 番号の小さい順に、最初に当たったもの
  • 送信元の書き方
  • 番号の範囲・門番の名前
  • 番号の範囲だけ
  • 最初の状態
  • 新しい SG は入る通信を全部断る
  • 既定の NACL は全部通す
  • ひらめき
  • ふだんの守りは SG。NACL は「この範囲からは一切禁止」のような、部屋単位の大まかな線引きに使う。

よくある事故:0.0.0.0/0 で窓口を開ける

ネットワークでいちばん多い事故は、管理用の窓口を 0.0.0.0/0 に開けてしまうことです。

「自宅からサーバーに SSH で入りたい。でも自宅の番号がよくわからないし、変わることもある。とりあえず 22番を 0.0.0.0/0 で開けておこう」。これで世界中に扉が開きます。

図の左のように、インターネットには、開いている窓口を探して1日中巡回している機械がいます。新しく開けた窓口は、早ければ数分で見つかり、パスワードの総当たりや、知られている弱点を突く攻撃が始まります。

危ないルール何が起きるか
22(SSH)← 0.0.0.0/0ログインの総当たり。鍵やパスワードが弱ければ乗っ取られる
3389(RDP)← 0.0.0.0/0Windows のサーバーが同じように狙われる
3306・5432(DB)← 0.0.0.0/0DB に直接届く。中身をまるごと持ち出される事故が実際に起きている

防ぎ方は、この章と第7章でそろっています。

対策内容
管理用の窓口は開けないサーバーに入るのは Session Manager(第7章)。22番は不要
DB は Web の門番からだけ5432 ← sg-web
0.0.0.0/0 は入口の 443・80 だけそれ以外に書いていたら疑う
自動で見張るAWS Config や Security Hub(第27章)で「22番が全開の SG」を検出できる
  • AWS でサービスを作る 08 ― セキュリティグループと NACL
  • 14 / 20
  • よくある事故:0.0.0.0/0 で窓口を開ける
  • ロボット
  • 攻撃用の機械
  • # 危ないルール
  • 22 ← 0.0.0.0/0
  • ロボット
  • 攻撃用の機械
  • サーバー
  • 盾
  • 3306 ← 0.0.0.0/0
  • 5432 ← 0.0.0.0/0
  • 3389 ← 0.0.0.0/0
  • ロボット
  • 攻撃用の機械
  • サーバー
  • 22番が全開
  • 管理用の窓口は 外に開けない。 入るのは SSM(第7章)
  • ロボット
  • 攻撃用の機械
  • ひらめき
  • 22番(SSH)や DB の窓口を 0.0.0.0/0 に開けると、数分で世界中の機械が叩きに来る。

作ってみる:門番を作り、名前で許す

コンソールでは、EC2 または VPC の画面の左の一覧から「セキュリティグループ」を開いて作ります。

番号操作ポイント
1「セキュリティグループを作成」名前・説明・VPC(photolog-prod)を指定
2インバウンドルールを追加種類・ポート・送信元・説明
3送信元に別の門番を指定送信元の欄に sg- と打つと候補が出る
4アウトバウンドは既定のまま全部許可(必要なら絞る)
5機械に付ける機械を作るとき、または後から付け替え

CLI では図のとおりです(ID は例です)。

bash
aws ec2 create-security-group --vpc-id vpc-0abc \
  --group-name sg-db --description "DB: Web only"

aws ec2 authorize-security-group-ingress --group-id sg-alb-id \
  --protocol tcp --port 443 --cidr 0.0.0.0/0

aws ec2 authorize-security-group-ingress --group-id sg-web-id \
  --protocol tcp --port 80 --source-group sg-alb-id

aws ec2 authorize-security-group-ingress --group-id sg-db-id \
  --protocol tcp --port 5432 --source-group sg-web-id

--cidr で番号の範囲を、--source-group で別の門番を送信元に指定します。

ルールの変更は、付けている機械にすぐ反映されます。機械を再起動する必要はありません。便利な反面、本番の門番をうっかり書き換えると即座に影響が出るので、変更は第18章の IaC で差分を確かめてから行うのが安全です。

  • AWS でサービスを作る 08 ― セキュリティグループと NACL
  • 15 / 20
  • 作ってみる:門番を作り、名前で許す
  • # 門番(SG)を作る
  • aws ec2 create-security-group --vpc-id vpc-0abc --group-name sg-db --description "DB: Web only"
  • # 入口の門番:443 を世界中から
  • aws ec2 authorize-security-group-ingress --group-id sg-alb-id --protocol tcp --port 443 --cidr 0.0.0.0/0
  • # Web の門番:80 を入口の門番から
  • aws ec2 authorize-security-group-ingress --group-id sg-web-id --protocol tcp --port 80 --source-group sg-alb-id
  • # DB の門番:5432 を Web の門番から
  • aws ec2 authorize-security-group-ingress --group-id sg-db-id --protocol tcp --port 5432 --source-group sg-web-id
  • ID は例。実際は sg-0abc… のような ID が返る。コンソールでは送信元の欄に「sg-」と打つと候補が出る
  • ひらめき
  • 門番を作る → 入ってくるルールを足す → 機械に付ける。送信元に別の門番の ID を指定できる。

フォトログの門番の一覧

フォトログの門番を表にまとめます。

門番付ける機械入ってくるルール
sg-alb入口(ALB)443・80 ← 0.0.0.0/0
sg-webWeb サーバー80 ← sg-alb
sg-dbDB(RDS)5432 ← sg-web
sg-endpointインターフェイス型の窓口(使う場合)443 ← sg-web
決めごと内容
22番(SSH)どこにも開けない。入るのは Session Manager
出ていくルール既定の全部許可のまま(Web が外部 API や S3 に行くため)
NACL既定のまま(全部通す)。守りは SG で
門番の名前役目がわかる名前にする。説明の欄にも理由を書く

外に開いているのは、入口の 443 と 80 だけです。この一覧を見れば、誰がどこに届くかが一目でわかります。

構成を人に説明するときや、セキュリティの確認を受けるときには、この表がそのまま使えます。「DB に届くのは誰ですか?」と聞かれたら、「sg-web が付いた Web だけです」と一言で答えられます。

  • AWS でサービスを作る 08 ― セキュリティグループと NACL
  • 16 / 20
  • フォトログの門番の一覧
  • sg-alb(入口)
  • 443・80 ← 0.0.0.0/0(世界中)
  • sg-web(Web)
  • 80 ← sg-alb
  • sg-db(DB)
  • 5432 ← sg-web
  • sg-endpoint(窓口)
  • 443 ← sg-web(第7章の窓口を使うなら)
  • 22番(SSH)
  • どこにも開けない。入るのは Session Manager
  • NACL
  • 既定のまま(全部通す)。守りは SG で
  • ひらめき
  • 門番は役割ごとに1つ。送信元は「1つ手前の門番」だけ。外に開いているのは入口の 443 と 80 だけ。

つながらないときは、外側から順に調べる

「つながらない」ときは、外側から1つずつ確かめます。

順番見る場所確かめること
1道案内(第6・7章)送り元の部屋の道案内に、宛先に当てはまる行があるか
2関所(NACL)行きと帰り(一時ポート)の両方が通れるか
3門番(SG)宛先の門番に、そのポートと送信元の許可があるか
4機械の中アプリがその窓口で本当に待っているか

4つ目も意外と多い原因です。門番で 80番を開けても、アプリが 8080番で待っていれば届きません。

調べるための道具も2つ覚えておきましょう。

道具何をしてくれるか料金
Reachability Analyzer(到達可能性アナライザー)2つの機械を指定すると、道案内・関所・門番のどこで止まるかを教えてくれる調べる回数ごと
VPC フローログ部屋や機械を通った通信・断られた通信の記録を残す記録を置く先(CloudWatch Logs や S3)の料金

単価は料金ページで確認してください。フローログは量が多くなりやすいので、調べるときだけ有効にする、保存期間を短くする、といった工夫も第17章で扱います。

  • AWS でサービスを作る 08 ― セキュリティグループと NACL
  • 17 / 20
  • つながらないときは、外側から順に調べる
  • 場所
  • 旗
  • 盾
  • サーバー
  • 道案内
  • 関所(NACL)
  • 門番(SG)
  • 機械の中
  • 宛先に当てはまる行 はあるか(第6・7章)
  • 行きと帰りの両方が 通れるか
  • ポートと送信元は 合っているか
  • アプリがその窓口で 待っているか
  • VPC Reachability Analyzer(到達可能性アナライザー)は、2つの機械の間のどこで止まるかを調べてくれる
  • VPC フローログは、通った通信・断られた通信の記録を残す(CloudWatch Logs などの料金がかかる)
  • ひらめき
  • 道案内 → 関所(NACL)→ 門番(SG)→ 機械の中。外側から1つずつ確かめれば、必ず見つかる。

よくある落とし穴

SG も NACL も無料なので、お金の事故はありません。そのかわり、開けすぎの事故と、閉めすぎて動かない事故が起きます。

落とし穴何が起きるか防ぎ方
管理用の窓口を 0.0.0.0/022・3389・DB の窓口が世界中から叩かれる開けない。Session Manager を使う
送信元を IP で書いたWeb が増えたり入れ替わると、DB に届かなくなる門番の名前で書く
NACL の帰りを忘れた行きは通るのに返事が届かず、時間切れになる一時ポートの範囲を許可。または NACL は既定のまま
既定の SG を使い回した何でも同じ門番になり、何が許されているかわからない役目ごとに門番を作る
「とりあえず全部許可」動いた後に絞るのを忘れる最初から必要な分だけ開ける
説明を書かなかった後で消していいルールかわからない説明の欄に理由を書く

VPC の既定の SG は、「同じ既定の SG が付いた機械どうしは何でも通す」というルールになっています。機械を作るときに門番を選ばないと、この既定の SG が付くことがあります。役目ごとに自分で作った門番を、毎回選んで付ける習慣をつけましょう。

  • AWS でサービスを作る 08 ― セキュリティグループと NACL
  • 18 / 20
  • よくある落とし穴
  • 管理用の窓口を 0.0.0.0/0
  • 22・3389・DB の窓口が世界中から叩かれる
  • 送信元を IP で書いた
  • Web が増えたり入れ替わると、DB に届かなくなる
  • NACL の帰りを忘れた
  • 行きは通るのに返事が届かず、時間切れになる
  • 既定の SG を使い回した
  • 何でも同じ門番になり、何が許されているか不明に
  • 「とりあえず全部許可」
  • 動いた後に絞るのを忘れる。最初から必要な分だけ
  • ひらめき
  • SG も NACL も無料。お金の事故は無いが、開けすぎの事故と、閉めすぎて動かない事故が起きる。

片付け:門番の消し方

フォトログの門番は次の章以降でも使うので残します。練習で作った門番は、次の順で消します。

番号操作理由
1機械から外す機械に付いている門番は消せない。機械を消せば外れる
2ほかの門番のルールから名前を消す「5432 ← sg-web」のように名指しされている門番は消せない
3門番を削除VPC の既定の SG は消せない(VPC と一緒に消える)

CLI では図のとおりです。

bash
aws ec2 revoke-security-group-ingress --group-id sg-db-id \
  --protocol tcp --port 5432 --source-group sg-web-id
aws ec2 delete-security-group --group-id sg-web-id

「消せない」と言われたら、その門番がまだどこかで使われています。付いている機械は、門番の画面の「関連付け」や、ネットワークインターフェイスの一覧で探せます。

自分で作った NACL も、部屋との関連付けを既定の NACL に戻してから消します。VPC ごと削除する場合は、門番も関所もまとめて消えます。

  • AWS でサービスを作る 08 ― セキュリティグループと NACL
  • 19 / 20
  • 片付け:門番の消し方
  • サーバー
  • 機械から外す
  • 盾
  • 参照を消す
  • NG
  • 門番を削除
  • 機械を消せば外れる
  • sg-web を名指すルール
  • 既定の SG は消せない
  • aws ec2 revoke-security-group-ingress --group-id sg-db-id --protocol tcp --port 5432 --source-group sg-web-id
  • aws ec2 delete-security-group --group-id sg-web-id
  • ひらめき
  • 機械に付いている門番や、他の門番のルールに名前が出てくる門番は消せない。外してから消す。

まとめ:道は道案内、扉は門番

この章で見たことをまとめます。

項目内容
ポート機械の中の窓口番号。443・80・22・5432 など
一時ポート頼む側がその場で選ぶ返事用の窓口(1024〜65535 のあたり)
セキュリティグループ機械ごとの門番。許可だけ・返事を覚える・無料
SG から SG を許す「1つ手前の門番」から来た通信だけ通す。番号が変わっても書き換え不要
NACL部屋ごとの関所。許可と禁止・番号順・返事を覚えない
0.0.0.0/0世界中。入口の 443・80 以外には書かない

第5章から4章かけて、ネットワークの土台がそろいました。

章決めたこと
第5章 VPC自分専用の敷地と番号の範囲
第6章 サブネット部屋の分け方と、外への道(公開・非公開)
第7章 NAT・エンドポイント中から外へ出る一方通行の道と、AWS への近道
第8章 SG・NACL届いた通信を扉ごとに通すか断るか

いよいよ、この部屋にサーバーを置きます。次の第9章「EC2:サーバーを借りる」では、非公開の部屋に Web サーバーを1台立て、sg-web を付け、Session Manager で中に入ってみます。

  • AWS でサービスを作る 08 ― セキュリティグループと NACL
  • 20 / 20
  • まとめ:道は道案内、扉は門番
  • ポート
  • 機械の中の窓口番号。443・80・22・5432 など
  • セキュリティグループ
  • 機械ごとの門番。許可だけ・返事を覚える
  • SG から SG を許す
  • 「1つ手前の門番」から来た通信だけ通す
  • NACL
  • 部屋ごとの関所。許可と禁止・返事を覚えない
  • 0.0.0.0/0
  • 世界中。入口の 443・80 以外には書かない
  • サーバー
  • 次へ:VPC・部屋・道・門番がそろった。いよいよサーバーを置く
  • ひらめき
  • ネットワークの土台が完成。次はこの部屋にサーバーを置く → 第9章「EC2:サーバーを借りる」へ。

0 件のコメント

読み込み中…

権利侵害・不適切な内容の連絡: [email protected]