セキュリティと暗号化
KMS / CloudHSM による暗号化、シークレット管理、証明書、Web 保護(WAF、Shield)、脅威検出、コンプライアンス。
- 分野セキュアなアーキテクチャ
- 図 14
- 出題パターン 10
- サービス 15
5 分で押さえる要点
- KMS は暗号化キーを管理します。AWS サービス(S3、EBS、RDS など)は KMS をエンベロープ方式で利用します。KMS キーがデータキーを暗号化し、データキーがデータを暗号化します。KMS の Encrypt を直接使えるのは最大 4 KB までです。大きなデータは GenerateDataKey でデータキーを取得し、ローカルで暗号化します。
- KMS キーは 3 種類あります。customer managed(ポリシー、ローテーション、削除を自分で管理)、AWS managed(aws/s3、aws/ebs など、サービスが作成)、AWS owned(AWS が内部で使用し、利用者には見えない)。キーポリシーの制御、別アカウントとの共有、独自のローテーション / 無効化が必要な場合は、customer managed key が必須です。
- キーポリシーは KMS キーの入り口です。キーポリシーに許可するステートメントがなければ、IAM policy だけでは不十分です。別アカウントからの復号で AccessDenied になる場合は、まずキーのキーポリシーを確認します。
- customer managed key の自動ローテーションは既定で毎年で、周期は選択できます。古いキーマテリアルは過去のデータの復号用に保持され、キー ID は変わりません。ローテーションしてもデータの再暗号化は不要で、アプリケーションの修正も要りません。
- KMS キーの削除には 7~30 日(既定 30 日)の待機期間が必要です。削除後は、そのキーで暗号化したデータは永久に復号できません。使用を止めつつ復元可能にしておきたい場合は、削除せずキーを無効化(disable)します。
- CloudHSM は VPC 内の専有型(single-tenant)HSM で、ユーザーとキーは利用者自身が管理します。AWS はキーを参照できません。「キーを完全に自己管理、FIPS 140 レベル 3、AWS はアクセス不可」という要件 → CloudHSM(または CloudHSM ベースの KMS custom key store)。
- Secrets Manager はシークレットを保存して自動ローテーションし(managed rotation または Lambda)、シークレット単位で課金されます。Parameter Store は設定値を保存し(シークレットは SecureString)、standard 階層は追加料金なしです。「データベースのパスワードを定期的に自動変更」 → Secrets Manager。安価な設定の保存先で足りる → Parameter Store。
- ACM は、ALB、CloudFront、API Gateway 向けのパブリック TLS 証明書を無料で発行し、自動更新します。パブリック証明書の秘密鍵はエクスポートできません。CloudFront 用の証明書は us-east-1 に置く必要があります。ALB 用は ALB と同じリージョンです。
- WAF は CloudFront、ALB、API Gateway などで、レイヤー 7 の HTTP(S) をフィルタリングします(SQL インジェクション、XSS、レートリミット、IP / 国のブロック、bot)。Web アプリケーションへの攻撃対策は WAF です。security group や NACL は HTTP の内容を理解しません。
- Shield Standard は無料で、レイヤー 3/4 を自動保護します。Shield Advanced は月額課金・1 年契約で、DDoS 対応チームと、攻撃時のコスト保護が付きます。「24/7 の DDoS 対応チーム」や「DDoS によるスケーリング費用の返金」という記述 → Shield Advanced。
- GuardDuty は CloudTrail、VPC Flow Logs、DNS ログから脅威を検出します(自動取得で、個別のログ有効化は不要)。Inspector は EC2、ECR、Lambda の脆弱性をスキャンし、Macie は S3 内の機密データを検出します。混同しやすい 3 サービスです。不審な脅威 / アクセス → GuardDuty、ソフトウェアの CVE → Inspector、S3 内の PII → Macie。
- Security Hub は複数サービスの finding を集約し、標準(CIS、AWS best practices)に照らしてチェックします。Detective はグラフで原因を調査します。「複数アカウントのセキュリティ状況を 1 か所で確認」 → Security Hub。
- Config はリソース構成を時系列で記録し、ルールでコンプライアンスを評価して自動修復もできます。CloudTrail は、誰がいつどの API を呼び出したかを記録します。「誰が security group を削除したか」 → CloudTrail。「暗号化されていないバケットを特定して自動修復」 → Config rule + remediation。
- 転送中の暗号化は TLS(ACM)、保管時の暗号化はほぼすべてのストレージサービスで KMS を使い、多くはオプション 1 つで有効化できます。暗号化済みリソースのスナップショットやコピーも暗号化されます。既存の未暗号化リソースを暗号化するには、暗号化コピーを作成して切り替えます。
構成図
KMS によるエンベロープ暗号化
SSE-KMS による S3 暗号化
ステップ
- S3 は KMS キーを使って、オブジェクトごとに暗号化 / 復号します。
- キーを使うたびに、監査用に CloudTrail へ記録されます。
- 別アカウントがオブジェクトを読み取れるのは、バケットポリシーとキーポリシーの両方が許可している場合のみです。
エッジの保護層: Shield、WAF、CloudFront
ステップ
- Shield(Standard は無料、Advanced は有料)がエッジでネットワーク層の DDoS を吸収します。
- WAF が SQLi、XSS、bot、リクエストの多すぎる IP をブロックします。
- 正当なトラフィックだけがオリジンに届きます。ALB を CloudFront からのみ受け付けるよう制限することもできます。
Secrets Manager によるデータベースパスワードの自動ローテーション
検出と自動対応
ステップ
- 各サービスが異なる種類の問題を検出し、finding を Security Hub に送ります。
- EventBridge rule が重大度に応じて finding を捕捉し、Lambda で処理して通知を送ります。
専用ログアカウントへの Organization trail
ステップ
- 組織の trail が、全メンバーアカウントの API 呼び出しをログアカウントのバケットに記録します。
- CloudWatch Logs にも送信して、アラームを設定します(root ログイン、security group の変更など)。
ACM 証明書: CloudFront は us-east-1
ステップ
- Viewer → CloudFront: 証明書は us-east-1 に置く必要があります。
- CloudFront → ALB: 証明書は ALB と同じリージョンに置きます。
KMS と CloudHSM
ステップ
- KMS: API で呼び出し、権限は IAM とキーポリシーで制御します。ほとんどの場面で使います。
- CloudHSM: アプリが自分の HSM と直接通信します。複数 AZ のクラスターでキーの喪失を防ぎます。
bastion の代わりに Session Manager
ステップ
- 管理者が console / CLI からセッションを開始し、アクセス権は IAM で制御します。
- サーバー上の SSM Agent が Systems Manager へ外向きに接続します(NAT または VPC endpoint 経由)。受信ポートは不要です。
- セッションの内容は CloudWatch Logs / S3 に記録されます。
KMS キーのクロスアカウント利用: キーポリシーと IAM policy の両方が必要
ステップ
- アカウント A がキーポリシーに、アカウント B(または B の特定の role)によるキー使用を許可するステートメントを追加します。
- アカウント B が role に IAM policy をアタッチし、正しい key ARN を指定します。両方のポリシーが許可して初めて使用でき、すべての使用が両アカウントの CloudTrail に記録されます。
- AWS managed key で暗号化したデータは別アカウントと共有できません。customer managed key に切り替えます。
AWS WAF: web ACL とルールの種類
ステップ
- web ACL は、優先順位に従って AWS の managed ルールグループ、rate-based(リクエストが多すぎる IP を遮断)、geo match、IP set をまとめます。
- web ACL をアタッチしたリソースへのすべての HTTP(S) リクエストは、アプリケーションに届く前にこれらのルールを通ります。
- 1 つの web ACL は CloudFront、ALB、API Gateway REST API、AppSync、Cognito などにアタッチできます。NLB や EC2 にはアタッチできません。
Shield Advanced: DDoS 時の検出、対応、コスト保護
ステップ
- CloudFront、Route 53、Global Accelerator を前段に置き、エッジで攻撃を受け止めます。Shield Advanced は EC2(Elastic IP)と ELB も保護します。
- Shield Advanced はリソース単位で検出し、アプリケーション層の攻撃を防ぐ WAF ルールを自動追加できます。
- 大規模攻撃時は、SRT が WAF ログを分析し、代わりにルールを適用します(Business または Enterprise Support が必要)。
- DDoS でシステムが自動スケールして請求額が増えた場合は、AWS Support 経由でクレジットを申請します。
多層防御
ステップ
- エッジ: CloudFront がトラフィックを受け、Shield が DDoS を防ぎ、WAF が VPC に入る前に SQLi / XSS / bot をフィルタリングします。
- ネットワーク: パブリックサブネットには ALB のみを置きます。EC2 の Security Group は ALB の Security Group からのみ受け付け、NACL で不正な IP 範囲を遮断します。
- データ: データベースはプライベートサブネットに置き、保管時は KMS、転送中は TLS で暗号化します。
- ID: 各コンポーネントには必要な権限だけを付与します。日常業務に root アカウントは使いません。
- 検出: GuardDuty が異常な動作を見つけ、Security Hub が集約してスコア化し、自動処理を起動します。
ACM 証明書のライフサイクル
ステップ
- 証明書をリクエストし、CNAME レコードを追加する(DNS)か、メールのリンクをクリックします。検証が完了すると ISSUED になります。
- 72 時間以内に検証されない場合やエラー(CAA によるブロック、無効なドメイン)の場合は、リクエストを削除し、修正して再度リクエストします。
- CloudFront / ALB などにアタッチして DNS レコードを維持すれば、ACM が自動更新し、ARN は変わりません。
- インポートした証明書や更新に失敗した証明書は期限切れになります。証明書が失効(revoke)されることもあります。
比較表
S3 の暗号化
| 方式 | キーの保持者 | 備考 |
|---|---|---|
| SSE-S3 | S3 が完全に管理 | 新規オブジェクトの既定 |
| SSE-KMS | KMS キー(AWS managed または customer managed) | キー使用のたびに CloudTrail ログが残り、キーポリシーで制御。S3 Bucket Key で KMS 呼び出し回数を削減 |
| DSSE-KMS | KMS、2 層の暗号化 | 2 層の暗号化を求めるコンプライアンス要件 |
| SSE-C | リクエストごとにキーを送信 | AWS はキーを保存しない。キーを失うとデータも失う |
| クライアント側暗号化 | 利用者 | S3 に届く前にデータを暗号化済み |
KMS と CloudHSM
| KMS | CloudHSM | |
|---|---|---|
| モデル | マネージドサービス、マルチテナント | VPC 内の専有 HSM |
| ユーザー / キーの管理者 | IAM + キーポリシー | HSM 上のユーザーを自己管理 |
| AWS サービスとの統合 | ほぼすべてのサービス | KMS の custom key store 経由、またはアプリが PKCS#11 / JCE で呼び出し |
| 使う場面 | 既定 | 完全な制御、FIPS 140 レベル 3、SSL オフロード、独自 PKI が必要なとき |
シークレットと設定の保存
| Secrets Manager | Parameter Store | |
|---|---|---|
| 自動ローテーション | あり(managed rotation または Lambda) | 標準機能なし(自作) |
| 料金 | シークレット数と API 呼び出し回数に応じて課金 | Standard は追加料金なし、Advanced は有料 |
| サイズ | 大きめのシークレット(複数フィールドの JSON) | Standard 4 KB、Advanced 8 KB |
| 用途 | 定期変更が必要なデータベースパスワード、API キー | 設定、フィーチャーフラグ、変更の少ないシークレット |
検出とコンプライアンスのサービス
| サービス | 役割 | 試験での問われ方 |
|---|---|---|
| GuardDuty | ML と脅威インテリジェンスで脅威を検出 | 不正なマイニング、キー漏洩、不正 IP からのアクセス |
| Inspector | ソフトウェア、ネットワークの脆弱性をスキャン | EC2、ECR イメージ、Lambda の CVE |
| Macie | S3 内の機密データを検出 | バケット内の PII、カード番号 |
| Security Hub | finding を集約し、標準に照らしてスコア化 | 複数アカウントを 1 つのセキュリティダッシュボードで確認 |
| Detective | 原因の調査 | GuardDuty の finding を追跡 |
| Config | 構成履歴、コンプライアンスルール | 基準から外れたリソースの特定と自動修復 |
| CloudTrail | API 呼び出しログ | 誰が、いつ、どこから、何をしたか |
ネットワーク層と Web の保護
| レイヤー | サービス | 防げるもの |
|---|---|---|
| レイヤー 3/4(DDoS) | Shield Standard / Advanced | SYN flood、UDP reflection |
| レイヤー 7(HTTP) | WAF | SQLi、XSS、bot、レートリミット、IP / 国別 |
| 一元管理 | Firewall Manager | WAF / Shield / SG / Network Firewall を組織全体に適用 |
| VPC 内のパケットフィルタリング | Network Firewall | ステートフルなフィルタリング、ドメイン名ベース、IDS / IPS |
| インスタンス / サブネット | Security Group / NACL | IP、ポート、プロトコル |
よく出る出題パターン
1アプリケーションで 50 MB のファイルを KMS キーで暗号化する必要があります。
答えを見る
正解: GenerateDataKey を呼び、アプリ側でデータキーを使ってファイルを暗号化し、暗号化済みデータキーをファイルと一緒に保存する(エンベロープ暗号化)
KMS キーは KMS の外に出ません。大きなデータはローカルで暗号化するため、高速で低コストです。
不正解: ファイル全体を KMS Encrypt に渡す
Encrypt は最大 4 KB までしか受け付けません。
2要件: AWS がキーにアクセスできないこと、キーが自社専用の HSM にあること、FIPS 140 レベル 3 認定。
答えを見る
正解: CloudHSM(KMS の custom key store 経由でも利用可能)
VPC 内の single-tenant HSM で、ユーザーとキーを自分で管理できます。
不正解: KMS customer managed key
KMS はマルチテナントのマネージドサービスで、「専有 HSM、ユーザーの自己管理」という要件を満たしません。
3RDS のパスワードを 30 日ごとに自動変更し、変更のたびにアプリのコードを修正しないで済むようにします。
答えを見る
正解: Secrets Manager の自動 rotation を使い、アプリは実行時にシークレットを読み取る
Secrets Manager はデータベースとシークレットの両方のパスワードを更新します。
不正解: Lambda の環境変数に保存する
自動ローテーションされず、設定から漏洩します。
不正解: Parameter Store の SecureString
保存はできますが、標準では自動ローテーションがありません。
4CloudFront ディストリビューションに ACM 証明書を設定したいが、一覧に証明書が表示されません。
答えを見る
正解: us-east-1 で証明書をリクエスト / インポートする
CloudFront が使える ACM 証明書は us-east-1 のものだけです。ALB の場合は ALB と同じリージョンの証明書が必要です。
不正解: ACM は CloudFront をサポートしていない
サポートしています。
5Web サイトが SQL インジェクション攻撃を受け、1 つの IP から 1 分間に数千件のリクエストが送られています。
答えを見る
正解: CloudFront / ALB に WAF を適用する: SQLi 対策の managed rule とレートベースルール
WAF はレイヤー 7 で、リクエストの内容と頻度に基づいてフィルタリングします。
不正解: Security Group でその IP をブロックする
SG には deny がなく、SQLi を防ぐための HTTP の内容も理解できません。
不正解: Shield Standard
Shield Standard はレイヤー 3/4 の DDoS 対策で、SQLi はフィルタリングしません。
6AWS の DDoS 対応チームによる 24/7 サポートと、攻撃で発生したスケーリング費用の補填を求めています。
答えを見る
正解: Shield Advanced
Shield Response Team、コスト保護、詳細レポートが付きます。月額課金で 1 年契約です。
不正解: Shield Standard
無料ですが、対応チームもコスト保護もありません。
7EC2 でのマイニングや、不審な IP からのアクセスキー使用を検出したいが、ログ分析基盤は自作したくありません。
答えを見る
正解: GuardDuty
CloudTrail、VPC Flow Logs、DNS ログを自動分析します。有効化するだけで動作します。
不正解: Inspector
Inspector はソフトウェアの脆弱性をスキャンするもので、振る舞いは検出しません。
不正解: Macie
Macie は S3 内の機密データを検出します。
8数千のバケットの中から、クレジットカード番号や身分証番号を含むバケットを探します。
答えを見る
正解: Macie
S3 内の機密データをスキャンして分類します。
不正解: GuardDuty S3 Protection
不審な動作を検出するもので、内容の分類はしません。
9暗号化が無効化されたバケットや、パブリックに公開されたバケットを自動修復し、変更履歴も残す必要があります。
答えを見る
正解: Config rule(s3-bucket-public-read-prohibited など)+ SSM Automation による remediation
Config は構成を追跡し、ルールを評価して、修復アクションを自動実行します。
不正解: CloudTrail
誰が API を呼んだかを記録するだけで、コンプライアンス評価も自動修復もしません。
10管理者が、ポート 22 を開けず、bastion も使わず、セッションログを残したままプライベートサブネットの EC2 のシェルに入る必要があります。
答えを見る
正解: Systems Manager Session Manager
SSM agent 経由で接続し、権限は IAM で制御、セッションログは S3 / CloudWatch Logs に保存できます。
不正解: パブリックサブネットの bastion host
SSH の開放、キー管理が必要で、パッチ適用対象のマシンも増えます。
早見表
何を何で守るか
| やりたいこと | 使うもの |
|---|---|
| KMS 管理のキーで大きなデータを暗号化する | エンベロープ暗号化(GenerateDataKey) · 図を見る |
| キー使用ごとにログが残る S3 暗号化、別アカウントとの共有 | customer managed key による SSE-KMS · 図を見る |
| 専有 HSM、AWS がキーにアクセスできない | CloudHSM · 図を見る |
| パスワードを定期的に自動変更したい | Secrets Manager · 図を見る |
| CloudFront / ALB の HTTPS 証明書 | ACM(CloudFront は us-east-1) · 図を見る |
| SQLi、XSS、bot、レートリミット | WAF · 図を見る |
| 大規模な DDoS、対応チームが必要 | Shield Advanced · 図を見る |
| 不審な動作を検出したい | GuardDuty → Security Hub → EventBridge · 図を見る |
| 全アカウントの API ログを安全に保存したい | Organization trail → ログアカウントの S3 · 図を見る |
| SSH ポートを開けずに EC2 に入りたい | Session Manager · 図を見る |
落とし穴
- 4 KB を超えるデータに KMS Encrypt を使う。
- 一時的に止めたいだけなのに KMS キーを削除する(disable にすべき)。
- KMS キーを別アカウントと共有するときにキーポリシーを忘れる。
- KMS キーのローテーションで全データの再暗号化が必要だと思い込む。
- CloudFront 用の ACM 証明書を us-east-1 以外のリージョンで作成する。
- SQL インジェクション対策に Security Group / NACL を使う。
- GuardDuty(脅威)、Inspector(脆弱性)、Macie(機密データ)を取り違える。
- CloudTrail(誰が API を呼んだか)と Config(構成とコンプライアンス)を取り違える。
- Secrets Manager / Parameter Store ではなく、コードや環境変数にパスワードを保存する。
- パスワードの自動ローテーションが求められているのに Parameter Store を選ぶ。
- Session Manager ならポートを開けずに済むのに、bastion 用にポート 22 を開ける。
- Shield Standard を有効化や課金が必要だと考える(常時有効で無料)。
このモジュールのサービス
変わりやすい数値 (AWS ドキュメントで確認済み)
- 対称キーでの KMS Encrypt は最大 4,096 バイトまでです。それより大きなデータには GenerateDataKey を使います。 2026-10-16 確認 ↗
- customer managed key の自動ローテーションは既定 365 日(周期は選択可)です。AWS managed key は常に毎年ローテーションされます。古いキーマテリアルは復号用に保持されます。 2026-10-16 確認 ↗
- KMS キーの削除には 7~30 日の待機期間の設定が必要で、既定は 30 日です。削除できるのは customer managed key のみです。 2026-10-16 確認 ↗
- CloudHSM は single-tenant の HSM で、FIPS モードでは FIPS 140-2 または 140-3 レベル 3 です。 2026-10-16 確認 ↗
- CloudFront(viewer HTTPS)で使う ACM 証明書は、us-east-1 でリクエスト / インポートする必要があります。 2026-10-16 確認 ↗
- Shield Standard は無料です。Shield Advanced は月額課金(AWS の例: 3,000 USD)にデータ転送料が加わり、1 年契約です。 2026-10-16 確認 ↗
- Secrets Manager: シークレット 1 つにつき月 0.40 USD、API 呼び出し 10,000 回につき 0.05 USD。 2026-10-16 確認 ↗
- Parameter Store: standard は最大 10,000 パラメータ、4 KB、追加料金なし。advanced は 100,000 パラメータ、8 KB、有料で、parameter policy が使えます。 2026-10-16 確認 ↗
- GuardDuty を有効にすると、CloudTrail の管理イベント、VPC Flow Logs(EC2)、DNS ログが自動的に取得され、追加の有効化は不要です。 2026-10-16 確認 ↗
- KMS キーのクロスアカウント利用には、キー所有アカウントのキーポリシーと、相手アカウントの IAM policy が必要です。AWS managed key で暗号化したデータは共有できません。 2026-10-19 確認 ↗
- AWS WAF は CloudFront、API Gateway REST API、ALB、AppSync、Cognito user pool、App Runner、Verified Access、Amplify を保護します。 2026-10-19 確認 ↗
- Shield Response Team の利用には Business または Enterprise Support プランが必要です。Shield Advanced には、保護対象リソースの標準 WAF 料金が含まれます。 2026-10-19 確認 ↗
- ACM 証明書のステータス: PENDING_VALIDATION、ISSUED、INACTIVE、EXPIRED、VALIDATION_TIMED_OUT、REVOKED、FAILED。ACM は 72 時間にわたって検証を試行します。 2026-10-19 確認 ↗
- ACM は DNS / メール検証の証明書では有効期限の 45 日前から自動更新を開始します(プライベート証明書は 60 日前)。 2026-10-19 確認 ↗