c2.11 最小権限のセキュリティグループでネットワークアクセスを制限する
セキュリティグループでは最小限のアクセスのみを許可します。開発者はテスト用にグループを開放し、閉じ忘れがちです。CIDR ではなくグループを参照して階層型アクセスを構築し、AWS Firewall Manager で過剰に許可されたルールを監査します。
実装ガイダンス
すべてのセキュリティグループで最小権限を
リソースが実際に必要とするポートと送信元のみを許可します。「テスト用」に作られた開放的なグループは、しばしばそのまま本番に昇格します。まずリスクの高い管理ポートを閉じ(EC2 の安全な管理を参照)、その後すべてのグループを見直します。特に Web 以外のポートや、どこからでもトラフィックを受け付ける内部 Web アプリに注意します。AWS Config の restricted-common-ports ルールは、指定した開放ポートを検出します。
CIDR ではなくセキュリティグループを参照する
あるセキュリティグループを別のグループから参照して階層型アクセスを構築します。
- sg-alb を持つ Application Load Balancer はインターネットから 80/443 を受け付けます。
- sg-web を持つ Web サーバーは sg-alb からのみ(ロードバランサーからのみ)80/443 を受け付けます。
- sg-db を持つデータベースは sg-web からのみ(Web 層からのみ)3306 を受け付けます。
こうすると Web 層へのトラフィックは常に ALB(AWS WAF をアタッチする場所)で検査され、オートスケーリングで追加されたインスタンスも自動的に正しいアクセスを継承します。
Firewall Manager で大規模に監査する
AWS Firewall Manager はセキュリティグループを監査し、複数アカウントにわたってルールを一元的に適用し、過剰に許可されたグループや未使用のグループを検出します。その価値は組織の規模や、リソースの作成方法(手動 vs. Infrastructure as Code)に応じて高まります。
CLI で参照元グループを指定する
データベース(sg-db)が 3306 を Web 層のグループ(sg-web)からのみ受け入れるようにします。CIDR を使わないため、オートスケールで追加されたインスタンスも自動的に正しいアクセスを継承します:
aws ec2 authorize-security-group-ingress \
--group-id sg-db \
--protocol tcp --port 3306 \
--source-group sg-webHow to validate
- セキュリティグループを定義するのは誰で、最小限のアクセスのみを許可するよう訓練されていますか?
- 重要なアプリケーションは必要なポートのみに制限されていますか?
- 内部アプリケーションがどこからでもトラフィックを受け付けていませんか?
- 過剰に許可されたグループを見つけて監査するために AWS Firewall Manager(または同等品)を使っていますか?
Threats addressed
- 誤設定のセキュリティグループは、公開すべきでなかったサービスに攻撃者が到達し、探査することを許してしまいます。
- 開発者は「後で制限する」として広いアクセスを許可し、そのまま放置することがよくあります。
AWS サービス
料金
セキュリティグループに追加費用はありません。AWS Firewall Manager を使う場合はその料金を参照してください。
Cloud Security Maturity Model