サイトへのアクセスを制御する

AWSBeginner
オンラインで実践に進む

はじめに

EC2 のルールを削除・復元して実際の接続を観察し、SSH のルールを保ちます。

先に前段のポートフォリオラボを完了してください。この環境は必要な前段機能と独自のリソースを提供します。以前のインスタンス、ファイル、認証情報ではなく知識を引き継ぎます。

認定試験との関連

認定 タスク 練習内容
AWS Certified Cloud Practitioner (CLF-C02) Task 3.5 セキュリティグループで EC2 接続を制御する。

ラボの概要

EC2 のルールを削除・復元して実際の接続を観察し、SSH のルールを保ちます。

遮断された接続を観察する

このステップでは、サイトのルールだけを削除し、ページの応答とサーバーの状態を比べます。

このラボは新しいサーバーを用意しています。変更する前に、このラボの AWS View からサイトを開き、Alex Morgan を確認します。Terminal に戻り、プロジェクトへ移動します。

cd /home/labex/project

前と同じように source で現在のサーバーの識別子を読み込みます。変更するグループ SECURITY_GROUP_ID を表示します。

source website.env
echo "$SECURITY_GROUP_ID"

セキュリティグループはインスタンスのネットワーク接続を制御します。インバウンドルールは到着する接続を許可します。ポートは接続先のサービスを示し、SSH は 22、この HTTP サイトは 8081 を使います。他のサイトでは HTTP 80 や HTTPS 443 が一般的ですが、ここではこのアプリの設定を使います。

変更する前にグループを読みます。

最初のラボと同じように、--query で応答の一部を選びます。ここでは最初のグループのインバウンドルール SecurityGroups[0].IpPermissions だけを表示し、必要な二つの許可に集中します。

aws ec2 describe-security-groups \
  --group-ids "$SECURITY_GROUP_ID" \
  --query 'SecurityGroups[0].IpPermissions'

出力にはインバウンドルールだけが表示されます。FromPort と ToPort はポート範囲です。22 と 8081 の二つのルールを確認します。送信元 198.51.100.10/32 はこの実習用の訪問者で、/32 は一つの IPv4 アドレスです。自分の PC の公開アドレスではないので、指定値を使います。

サイトの許可だけを削除します。revoke-security-group-ingress は一致するルールを削除し、--protocol tcp はプロトコル、--port 8081 はサイト、--cidr は許可された送信元を選びます。

aws ec2 revoke-security-group-ingress \
  --group-id "$SECURITY_GROUP_ID" \
  --protocol tcp \
  --port 8081 \
  --cidr 198.51.100.10/32

応答で変更を確認したら、サイトを更新します。Website connection unavailable が表示されても、AWS View のインスタンスは running のままです。

サイトのルールを削除すると新しいリクエストは失敗しますが、サーバーは実行中です。

サイトへの接続が遮断されても AWS View は running のままです。識別子は例です。

アプリは削除されず、サーバーも停止していません。ネットワークルールが接続を遮断しています。グループは許可済み接続を追跡し、この実習の新しいリクエストで変更後のルールを確認します。SSH ルールは残します。

サイトへのアクセスを復元する

このステップでは、必要な許可を復元し、アプリが再び応答することを確認します。

authorize-security-group-ingress はインバウンドルールを追加します。同じグループ、TCP ポート、用意された訪問者アドレスを使います。

aws ec2 authorize-security-group-ingress \
  --group-id "$SECURITY_GROUP_ID" \
  --protocol tcp \
  --port 8081 \
  --cidr 198.51.100.10/32

サイトを更新すると Alex Morgan と三つの作品が戻るはずです。アプリの再導入やサーバー再起動は不要です。設定も確認するため、グループを読み返します。

指定ルールの復元後、実際の作品ページが再び応答します。

aws ec2 describe-security-groups \
  --group-ids "$SECURITY_GROUP_ID" \
  --query 'SecurityGroups[0].IpPermissions'

サイトの 8081 と変更していない SSH の 22 を確認します。どちらも 198.51.100.10/32 です。0.0.0.0/0 はすべての IPv4 送信元を許可して範囲が広すぎます。追加の許可ではなく、指定の送信元を復元します。

設定と実際の結果の両方を確認できました。必要なルールがあり、訪問者のリクエストも成功します。次のラボは新しいサイトを用意し、作品素材のプライベートストレージを学びます。

まとめ

サイトのルールを削除して復元し、実際の失敗と回復を確認しながら SSH を維持しました。実行中のサーバーと到達可能なアプリを区別し、許可が指定の訪問者に限定されていることを確かめました。

公式ドキュメント: security group rules.