ウェブエンジニア問題集
第5章

アプリケーション保護 — WAF・Shield・Cognito・Secrets Manager

22
この章の目次開く
セキュリティ上の問題を探す人のイラスト
学習者学習者

Security Groupで通信を絞っていれば、WAFやShieldまでは不要ではないですか?

Security GroupやNACLは、IPアドレス、ポート、プロトコルを中心に通信を制御します。しかしWebアプリケーションには、HTTPリクエストの中身を悪用する攻撃、DDoS、認証情報漏洩、不正ログイン、証明書管理、脅威検知など、ネットワーク制御だけでは防げないリスクが残ります。

SAA-C03では、問題文の「守りたい対象」と「脅威の種類」から、AWS WAF、AWS Shield、Amazon Cognito、Secrets Manager、ACM、GuardDuty、Macieなどを選ぶ力が問われます。

アプリケーション保護は、通信の入口、ユーザー認証、シークレット管理、証明書、脅威検知を分けて考えると整理しやすいです。

よく出るセキュリティサービス

サービス主な用途問題文のキーワード
AWS WAFHTTP/HTTPSリクエストをルールで検査し、SQLインジェクションやXSSを防ぐWeb攻撃、SQL injection、XSS、レート制限、IPブロック
AWS ShieldDDoS対策。Standardは自動、Advancedは追加保護DDoS、可用性、CloudFront、Route 53、Global Accelerator
Amazon CognitoWeb/Mobileアプリのユーザー認証と一時AWS認証情報の発行ユーザー登録、ログイン、SNSログイン、アプリ利用者
AWS Secrets ManagerDBパスワードやAPIキーなどのシークレット管理と自動ローテーション認証情報、APIキー、自動ローテーション
Systems Manager Parameter Store設定値や軽量なシークレット管理設定値、環境別パラメータ、低コスト
AWS Certificate ManagerTLS証明書の発行・管理・更新HTTPS、SSL/TLS証明書、CloudFront、ALB
Amazon GuardDutyAWS環境の脅威検知不審なAPI、侵害された認証情報、マルウェア、脅威検出
Amazon MacieS3内の機密データ検出個人情報、PII、S3の機密データ

試験では、「セキュリティサービス」とひとまとめにせず、入口で止めるのか、認証するのか、秘密値を守るのか、検知するのかを切り分けます。


Webアプリケーションの入口を守る

Webアプリケーションの入口では、CloudFront、ALB、API Gatewayなどの前段でリクエストを受けます。ここにAWS WAFやAWS Shieldを組み合わせることで、HTTPレイヤーの攻撃とDDoSに備えます。

先生先生

Security Groupは「通信を通すか」、WAFは「HTTPリクエストの中身を許可するか」、Shieldは「大量攻撃に耐えるか」を担当します。


AWS WAFを使う場面

AWS WAFは、CloudFront、Application Load Balancer、API Gateway、AppSync、Cognito user poolなどに関連付けて、HTTP/HTTPSリクエストを検査するWeb Application Firewallです。

WAFが候補になる要件:

  • SQLインジェクションやXSSを防ぎたい
  • HTTPヘッダー、URI、クエリ文字列、リクエストボディを条件に制御したい
  • 特定IPアドレス、国、User-Agentなどでアクセスを制限したい
  • /login/api への過剰リクエストをレート制限したい
  • CloudFront、ALB、API Gatewayの前でWeb攻撃をブロックしたい

WAFの基本構成

用語説明
Web ACLWAFルールをまとめた保護設定。CloudFrontやALBなどに関連付ける
Ruleリクエストを許可、ブロック、カウント、CAPTCHAなどに振り分ける条件
Managed RuleAWSやAWS Marketplaceベンダーが提供する定義済みルール
Rate-based rule一定時間内のリクエスト数を数え、過剰な送信元を制限するルール
IP set許可・拒否したいIPアドレス範囲のリスト

Security GroupとWAFの違い

比較Security GroupAWS WAF
見るレイヤーL3/L4中心L7、HTTP/HTTPS
主な条件IP、ポート、プロトコルURI、ヘッダー、クエリ、Body、IP、Rate
主な用途EC2、ALB、RDSなどへの通信制御Web攻撃やBot的アクセスの制御
代表例443番だけ許可SQLインジェクション文字列をブロック

AWS Shieldを使う場面

AWS ShieldはDDoS攻撃に対するマネージド保護サービスです。DDoSは、攻撃者が大量の通信や大量のリクエストを送り、正規ユーザーがサービスを使えない状態にする攻撃です。

種類位置づけ使う場面
Shield StandardすべてのAWS利用者に自動適用、追加料金なし一般的なネットワーク・トランスポート層DDoS対策
Shield Advanced追加契約の高度なDDoS保護重要システム、DDoSコスト保護、専門家支援、詳細な攻撃可視化が必要

Shield Standardは自動で有効です。試験で「DDoSからより高度に保護したい」「DDoS Response Teamの支援」「コスト保護」「重要な公開サービス」といった文脈が出たら、Shield Advancedを検討します。

Shield、WAF、CloudFrontの組み合わせ

要件選択肢
静的・動的コンテンツをエッジで配信し、オリジン負荷を下げたいCloudFront
L3/L4のDDoS攻撃に備えたいShield Standard / Advanced
HTTPリクエスト洪水やWeb攻撃を制御したいAWS WAF
グローバルなWebアプリを総合的に守りたいCloudFront + WAF + Shield
学習者学習者

DDoSならいつもWAFですか?

必ずしもそうではありません。ネットワークやトランスポート層のDDoSにはShield、HTTPリクエストの条件で制御したい場合はWAFを使います。CloudFrontを前段に置くと、エッジでトラフィックを受け、オリジンへの直接負荷も減らせます。


Cognitoを使う場面

Amazon Cognitoは、アプリケーションのエンドユーザー認証に使います。社員がAWSマネジメントコンソールへログインする仕組みではありません。従業員のAWSアクセス管理ならIAM Identity CenterやIAMを検討します。

要件選択肢
Web/Mobileアプリのユーザー登録・ログインCognito User Pools
メールアドレス、電話番号、MFAなどでユーザー認証したいCognito User Pools
Google、Apple、Facebookなどのソーシャルログインと連携したいCognito User Pools + フェデレーション
認証済みユーザーにS3やDynamoDBへ直接アクセスさせたいCognito Identity Pools
一時的なAWS認証情報を払い出したいCognito Identity Pools

User PoolsとIdentity Pools

比較User PoolsIdentity Pools
主な役割アプリ利用者の認証AWSリソースへアクセスする一時認証情報の発行
扱うものユーザーディレクトリ、JWT、MFA、ログイン画面IAM Role、STS一時認証情報
典型例ログインしてIDトークンを受け取るログイン後にS3へ画像をアップロードする
試験のキーワードユーザー登録、ログイン、MFA、SNSログイン一時的なAWS credentials、S3/DynamoDBへの直接アクセス

シークレット管理

DBパスワードやAPIキーをEC2の環境変数、AMI、コンテナイメージ、ソースコード、GitHubリポジトリに直接置くのは避けます。AWSではSecrets ManagerSystems Manager Parameter Storeの2つで管理するのが基本です。

Secrets Manager

認証情報のライフサイクル全体(保存・取得・ローテーション)を管理するサービスです。

典型的な用途はRDSのマスターパスワード管理です。

アプリ(LambdaやECSなど)はコードにパスワードを書かず、起動時にSecrets ManagerへAPIリクエストを送り、{ "username": "admin", "password": "..." } のようなJSON形式で認証情報を受け取ってDBに接続します。

RDS・Redshift・DocumentDBなどのマネージドDBとネイティブに連携し、自動ローテーションを設定できます。ローテーション時はLambda関数が裏で動いてDBのパスワードを変更・同期するため、アプリ側の設定変更なしに常に最新の認証情報を使い続けられます。

  • 保存例:DBパスワード、APIキー、OAuthトークン、SSHキー
  • 課金:シークレット1件あたりの月額 + APIコール数
  • 試験キーワード:「認証情報」「自動ローテーション」「RDSパスワードを定期更新」

Systems Manager Parameter Store

設定値やパラメータを階層的なパス(/prod/db/endpoint のような形式)で一元管理するサービスです。 Standard Tierは追加コストなしで利用でき、高頻度な設定値の参照に向いています。

機密性が必要な値はSecureStringタイプとしてKMSで暗号化して保存できます。

  • 保存例:環境名、エンドポイントURL、AMI ID、機能フラグ、軽量なSecureString
  • 課金:Standard parameterは低コスト。Advanced Tierはパラメータ数に応じて課金
  • 試験キーワード:「設定値」「階層管理」「低コスト」「SecureString」

使い分けの目安

要件選択肢
DB認証情報を保存し自動ローテーションしたいSecrets Manager
APIキーやトークンなどの秘密値を管理したいSecrets Manager
設定値や環境変数を低コストで管理したいParameter Store(Standard)
設定値を暗号化して保存したいParameter Store(SecureString)

ECSやLambdaでの典型パターン

アプリ起動時にSecrets Managerからシークレットを取得し、DBへ接続するのが典型的な構成です。

アプリケーション起動
  -> IAMロールでSecrets Managerへアクセス
  -> DB認証情報を取得
  -> RDSへ接続

Private Subnet内のLambdaやECSタスクからSecrets Managerへ閉域アクセスしたい場合は、Interface VPC Endpointを検討します。これはネットワーク性能VPCネットワークセキュリティの章でも扱った考え方です。


ACMでTLS証明書を管理する

AWS Certificate Manager(ACM)は、AWS上で利用するTLS証明書の発行、インポート、管理、更新を担います。HTTPS化の要件では、ALB、CloudFront、API Gatewayなどと組み合わせて出題されます。

要件選択肢
ALBでHTTPSを終端したいACM証明書 + ALB Listener
CloudFrontでHTTPS配信したいACM証明書 + CloudFront
API GatewayのカスタムドメインをHTTPS化したいACM証明書 + API Gateway
プライベートな社内証明書基盤を使いたいAWS Private CA

GuardDutyとMacieで検知する

WAFやShieldは入口で攻撃を減らすサービスです。一方で、GuardDutyやMacieは「すでに起きているかもしれない問題」を検知するサービスです。

サービス何を検知するか代表例
GuardDutyAWSアカウントやワークロード上の脅威侵害された認証情報、不審なAPI、暗号資産マイニング、マルウェア、S3/RDS/EKS/ECS/Lambda関連の脅威
MacieS3内の機密データ個人情報、認証情報、PII、機密データの分類
Security Hub複数サービスの検出結果を集約し、セキュリティ標準に照らして評価GuardDuty、Macie、Inspectorなどの集約
Detective検出結果の調査と原因分析関連するAPI、IP、ユーザー、リソースの関係分析
学習者学習者

GuardDutyとMacieはどちらもセキュリティ検知ですよね。どう見分けますか?

「不審な動き」ならGuardDuty、「S3の中に個人情報や機密情報があるか」ならMacieです。MacieはS3のデータ分類、GuardDutyはAWS環境の脅威検知と覚えると判断しやすいです。


典型構成で理解する

インターネット公開のWebアプリを例にすると、各サービスの担当は次のように分かれます。

主なサービス設計の観点
DNS・エッジRoute 53、CloudFront、Shield可用性、DDoS耐性、オリジン保護
Web入口WAF、ALB、API GatewayHTTP攻撃対策、レート制限、TLS終端
認証Cognitoアプリ利用者のログイン、MFA、フェデレーション
秘密値Secrets Manager、Parameter StoreDBパスワード、APIキー、設定値
検知GuardDuty、Macie、Security Hub脅威検知、S3機密データ検出、検出結果の集約

試験での見分け方

問題文選ぶサービス
WebアプリへのSQLインジェクションやXSSを防ぎたいAWS WAF
ログインAPIへの大量リクエストを制限したいAWS WAF rate-based rule
DDoSから公開サービスを守りたいAWS Shield、CloudFront
重要な公開アプリに高度なDDoS保護と専門家支援が必要Shield Advanced
Webアプリのユーザー登録・ログイン・MFAを実装したいCognito User Pools
ログイン済みユーザーにS3へ直接アップロードさせたいCognito Identity Pools
DBパスワードを保存し、自動ローテーションしたいSecrets Manager
環境別の設定値を階層的に管理したいParameter Store
ALBやCloudFrontでHTTPSを使いたいACM
侵害された認証情報や不審なAPI呼び出しを検知したいGuardDuty
S3に個人情報が含まれていないか検出したいMacie

参考リンク


まとめ

アプリケーション保護では、脅威の種類からサービスを選びます。

  • SQLインジェクションやXSSなどのWeb攻撃にはAWS WAFを選ぶ
  • DDoSにはAWS Shield、グローバル公開アプリではCloudFrontとの組み合わせを考える
  • アプリ利用者の認証にはCognito User Pools、一時AWS認証情報にはCognito Identity Pools
  • シークレット管理にはSecrets Manager、設定値管理にはParameter Store
  • TLS証明書にはACM
  • 脅威検知にはGuardDuty、S3の機密データ検出にはMacie
  • 検出結果をまとめて見るにはSecurity Hub、深掘り調査にはDetective

次の章では、KMS、S3暗号化、バックアップ、レプリケーションなどのデータ保護を扱います。

AWSクイズに挑戦するこの章で学んだAWSの知識を、4択クイズでアウトプットして定着させよう