AWS / SAP-C02

SAP-C02-117 · セクション 13 / タスク 3.2

Security Findingへの自動Remediation

AWS Config Rule / Amazon EventBridge / Systems Manager Automation / Detection / Remediation / Automatic Response / Escalation

セキュリティ上の問題を検出し、調査対象を整理できても、実際のAWSリソースが危険な状態のままでは改善は完了しません。

例えば、

セキュリティグループが
許可してはいけない通信を許可

↓

AWS Config Rule
NON_COMPLIANT

↓

担当者が手作業で修正

という運用では、同じ問題が多数のリソースで発生したときに対応が遅れます。

一方で、検出したものを無条件に変更する自動化も危険です。

ここでは、

AWS Config Rule
↓
NON_COMPLIANT
↓
Remediation Configuration
↓
Systems Manager Automation

または、

セキュリティ検出結果
↓
Amazon EventBridge
↓
必要な情報をAutomation入力へ対応付け
↓
Systems Manager Automation

という接続を中心に、

検出した問題を、安全に修復処理へつなげる実装判断

を扱います。

Automationの実行ロールや、人による承認、一般的なエスカレーション設計そのものは既習です。ここでは、それらを再説明せず、AWS Config Ruleまたはセキュリティ検出結果から修復ワークフローへ接続する部分に集中します。

ゴール

既存環境について、

  • AWS Config Ruleの非準拠判定をSystems Manager Automationによる修復へ接続する
  • 自動修復と手動修復を使い分ける
  • 対象リソースの識別子をAutomationへ正しく渡す
  • 同じリソースで修復が繰り返し失敗した場合の動作を理解する
  • 大量の非準拠リソースを一度に修復するときの実行量を制御する
  • 保存されたコンプライアンス評価と、実行時の現在状態を混同しない
  • セキュリティ検出結果からAutomationを起動するときに必要な入力を対応付ける
  • 修復後にAWS Config Ruleのコンプライアンス状態を確認する

ことを目指します。

1. 検出と修復を分けて考える

最初に区別するのは、

問題を見つける

ことと、

AWSリソースへ変更を加える

ことです。

例えばAWS Config Ruleが、

セキュリティグループ
↓
0.0.0.0/0 から
管理ポートを許可
↓
NON_COMPLIANT

と判定したとしても、その判定だけでセキュリティグループが変更されるわけではありません。

AWS Config Rule
= 設定を評価

Systems Manager Automation
= 修復処理を実行

という責任分離で考えます。

したがって、自動修復では、

検出
↓
修復対象の特定
↓
修復処理

を接続する必要があります。

2. AWS Config Ruleから修復へ接続する

AWS Configでは、Ruleで非準拠と判定されたリソースに対して修復アクションを設定できます。

基本構成は、

AWS Config Rule
↓
NON_COMPLIANT
↓
Remediation Configuration
↓
Systems Manager Automation
↓
対象リソースを修復

です。

ここで重要なのは、

Config Ruleそのものが
リソースを書き換える

のではないことです。

AWS Config側では、

どのRuleに対して

どのAutomationドキュメントを使い

対象リソースを
どのパラメータへ渡すか

をRemediation Configurationとして対応付けます。

3. 対象リソースをAutomationへ渡す

Systems Manager Automationのランブックは、修復する対象を識別できなければなりません。

例えばAutomationが、

ResourceId

という入力を要求している場合、

AWS Config Rule
↓
NON_COMPLIANTとなったリソース
↓
リソースID
↓
Automation
ResourceId

という対応付けを行います。

つまり、

どのリソースが非準拠か

というAWS Config側の情報を、

どのリソースを変更するか

というAutomation側の入力へ渡します。

ここが曖昧だと、正しい修復ランブックを用意していても対象を特定できません。

4. 自動修復と手動修復を分ける

AWS Configの修復では、

自動修復
手動修復

を選択できます。

自動修復

NON_COMPLIANT
↓
条件に従って
Automation開始

と進みます。

多数のリソースに同じ修復を継続的に適用したい場合に利用できます。

手動修復

NON_COMPLIANT
↓
対象を確認
↓
修復実行

と、人が実行タイミングを選びます。

重要なのは、

Automationがある
=
必ず自動修復

ではないことです。

修復方法をAutomationへ標準化しながら、実行開始だけを手動にする構成も可能です。

5. 自動修復が失敗した場合は無限に繰り返さない

自動修復では、一時的な失敗が発生する可能性があります。

例えば、

NON_COMPLIANT
↓
Automation
↓
一時的な失敗

だけで永久に修復不能と判断する必要はありません。

AWS Configの自動修復では、

MaximumAutomaticAttempts
RetryAttemptSeconds

に相当する条件によって、

一定期間内に
何回まで自動修復を試行するか

を制御できます。

流れは、

修復開始
↓
失敗
↓
再試行条件内?
│
├─ はい → 再試行
│
└─ いいえ → 自動修復を継続しない

です。

ポイントは、

再試行回数だけでなく、再試行を数える期間も組み合わせる

ことです。

6. 繰り返し失敗したリソースはRemediationExceptionになる

同じリソースに対して修復処理を繰り返しても失敗し続ける場合、AWS ConfigはそのリソースにRemediationExceptionを設定できます。

NON_COMPLIANT
↓
自動修復
↓
失敗
↓
再試行
↓
再び失敗
↓
設定した試行条件を超える
↓
RemediationException

これは、

失敗している対象へ
自動修復を永久に繰り返す

ことを防ぐための状態です。

したがって、

RemediationException
↓
そのまま自動修復ループへ戻し続ける

とは考えません。

繰り返し失敗している対象として切り分け、原因を確認する対象にします。

例えば、

対象リソースの状態が
想定と異なる

必要な依存関係がない

修復ランブックが
そのリソース条件に対応していない

などを確認します。

7. 大量修復では同時実行量を制御する

1件のリソースを修復できても、同じAutomationを数千リソースへ同時実行して安全とは限りません。

例えば、

2,000リソース
NON_COMPLIANT

↓

2,000件を
一斉修復

すると、

  • APIの集中
  • 対象システムへの急激な変更
  • 同じ原因による大量失敗

などにつながる可能性があります。

AWS Configの修復では、

ConcurrentExecutionRatePercentage

を使って、同時に修復する対象の割合を制御できます。

大量のNON_COMPLIANT
↓
一部ずつAutomation実行
↓
次の対象へ

という実行にできます。

重要なのは、

修復できる

ことと、

全対象を同時に修復してよい

ことを分けることです。

8. 許容エラー率で大量失敗を抑える

大量修復では、少数の失敗と大規模な失敗を区別する必要があります。

そのため、

ErrorPercentage

によって、許容するエラー割合を制御できます。

考え方は、

自動修復開始
↓
複数対象で実行
↓
失敗率を確認
↓
許容範囲を超える
↓
追加実行を抑制

です。

したがって、大量リソースへの自動修復では、

ConcurrentExecutionRatePercentage

と、

ErrorPercentage

を組み合わせて考えます。

設定 主な役割
ConcurrentExecutionRatePercentage 同時に処理するリソース量を制御
ErrorPercentage 許容する失敗割合を制御

9. コンプライアンス評価は「現在状態」とは限らない

AWS Configの自動修復で特に注意するのが、

評価された状態

と、

Automation実行時の状態

に時間差が存在し得ることです。

例えば、

10:00
AWS Config
NON_COMPLIANT

↓

10:01
管理者が手動修正

↓

10:02
保存されていた評価を基に
自動修復開始

というケースです。

この時点では、

10:00
NON_COMPLIANT

という評価結果は存在しますが、

10:02
実際のリソース

は既に正常化している可能性があります。

したがって、

NON_COMPLIANTだった
=
Automation開始時も
同じ状態

とは限りません。

10. 影響の大きい修復では実行時の現在状態を再確認する

古いコンプライアンス評価に基づいて、不要になった変更を実行したくない場合があります。

その場合は、Automation内で、

Automation開始
↓
現在状態を取得
↓
まだ修復が必要?
│
├─ はい → 修復
│
└─ いいえ → 変更せず終了

という確認を入れます。

例えば、

AWS Config評価時
セキュリティグループが非準拠

↓

その後
管理者が正しいルールへ修正

↓

Automation開始

↓

現在のセキュリティグループを確認

↓

既に正常
→ 追加変更しない

という形です。

ここでの決定打は、

保存されたコンプライアンス評価だけを、実行時の現在状態として扱わない

ことです。

11. セキュリティ検出結果から修復へつなぐ場合

AWS Config Ruleによる設定準拠とは別に、セキュリティ検出結果を入口として修復したい場合があります。

この場合、Amazon EventBridgeを利用して対象イベントを修復処理へ接続できます。

セキュリティ検出結果
↓
Amazon EventBridge
↓
Systems Manager Automation

ただし、この接続自体の基本は既習です。

ここで重要なのは、

検出結果のどの情報を、Automationのどの入力へ渡すか

です。

12. EventBridgeでAutomation入力へ必要な情報を対応付ける

例えば、セキュリティ検出結果に、

リソースID
AWSアカウント
リージョン
検出結果タイプ

が含まれており、Automationランブックが、

ResourceId
AccountId
Region
RemediationType

を要求するとします。

この場合、

セキュリティ検出結果
│
├─ リソースID
│      ↓
│   ResourceId
│
├─ AWSアカウント
│      ↓
│   AccountId
│
├─ リージョン
│      ↓
│   Region
│
└─ 検出結果タイプ
       ↓
    RemediationType

となるように入力を構成します。

単に、

EventBridgeのルールが一致した

だけでは不十分です。

Automationが、

どのリソースを

どのアカウント・リージョンで

どの修復方式により

処理するか判断できる入力へ変換する必要があります。

13. Config Ruleとセキュリティ検出結果では入口が異なる

2つの経路を混同しないようにします。

入口 主な起点 修復への接続
AWS Config Rule 設定コンプライアンス Remediation Configuration
セキュリティ検出結果 セキュリティ上の検出イベント Amazon EventBridge

AWS Config Ruleでは、

NON_COMPLIANTとなったリソース
↓
Remediation Configuration
↓
Automation

が中心です。

セキュリティ検出結果では、

検出イベント
↓
EventBridge
↓
必要な情報を入力へ対応付け
↓
Automation

が中心です。

どちらも最終的にSystems Manager Automationを利用できても、

Automationまでの接続方法が同じではありません。

14. 修復後はAWS Config Ruleを再評価する

AWS Config Ruleを基準として修復した場合、修復処理を実行しただけでは、

コンプライアンス上
正常になった

ことを示しません。

例えば、

AWS Config Rule
NON_COMPLIANT
↓
Automation
↓
設定変更

の後に、

AWS Config Rule
再評価
↓
COMPLIANT

となることで、設定がRuleの要求状態へ戻ったことを確認できます。

したがって、AWS Configを基準とした修復では、

Automation実行

だけを見るのではなく、

Ruleの再評価結果

まで確認します。

これは一般的なAutomationの成否判定を再説明するものではなく、

AWS Config Ruleを基準にした修復では、コンプライアンス状態へ戻ったことをAWS Config側で確認する

という判断です。

15. 修復経路を整理する

AWS Config Ruleを入口にする場合

AWS Config Rule
↓
NON_COMPLIANT
↓
Remediation Configuration
↓
対象リソースIDを対応付け
↓
Systems Manager Automation
↓
必要なら現在状態を再確認
↓
修復
↓
AWS Config Rule再評価
↓
COMPLIANT

自動修復を利用する場合は、さらに、

MaximumAutomaticAttempts
RetryAttemptSeconds

ConcurrentExecutionRatePercentage
ErrorPercentage

RemediationException

を使って実行を制御します。

セキュリティ検出結果を入口にする場合

セキュリティ検出結果
↓
Amazon EventBridge
↓
必要なイベントを選択
↓
検出結果の情報を
Automation入力へ対応付け
↓
Systems Manager Automation
↓
対象を修復

この2つの違いを押さえることが重要です。

16. 混同しやすいポイント

誤りやすい判断 正しい考え方
AWS Config RuleがNON_COMPLIANTなら自動で設定が直る 修復するにはRemediation ConfigurationなどでAutomationへ接続する
Automationランブックを指定すれば対象は自動的に分かる 対象リソース識別子を必要なAutomationパラメータへ渡す
自動修復は成功するまで無制限に再試行する 試行回数と再試行期間を設定し、繰り返し失敗した対象はRemediationExceptionになり得る
2,000件修復できるなら2,000件を一斉実行すればよい ConcurrentExecutionRatePercentageで同時実行量を制御する
多少失敗しても最後まで全対象へ実行する ErrorPercentageで許容する失敗割合を制御する
NON_COMPLIANT評価があるなら実行時も必ず非準拠 評価後に状態が変わっている可能性がある
古い評価でも必ず修復処理を実行する 影響の大きい処理ではAutomation内で現在状態を再確認する
EventBridgeで検出結果をAutomationへ送れば入力設計は不要 検出結果のリソースID、AWSアカウント、リージョンなどをAutomation入力へ対応付ける
Automationが終了すればAWS Config上もCOMPLIANT AWS Config Ruleを再評価してコンプライアンス状態を確認する

17. SAP-C02での判断手順

問題文で、

AWS Config Ruleが
多数のNON_COMPLIANTを検出

手動修正に時間がかかる

同じ修復方法を
繰り返し実施している

とあれば、

AWS Config Rule
↓
Remediation Configuration
↓
Systems Manager Automation

を候補にします。

次に、

自動実行する?
手動で開始する?

を判断します。

自動修復なら、

再試行は何回まで?
↓
失敗し続ける対象は?
↓
大量対象の同時実行量は?
↓
許容エラー率は?

まで確認します。

さらに、

AWS Configの評価から
Automation開始までに
状態が変わり得る?

なら、

Automation開始
↓
現在状態を再確認
↓
必要な場合だけ変更

とします。

一方、

Security Hubなどの
セキュリティ検出結果

↓

条件に合うものを
自動修復したい

なら、

Amazon EventBridge
↓
検出結果の必要フィールドを抽出
↓
Automation入力へ対応付け
↓
Systems Manager Automation

と判断します。

決定打は、

検出サービスを増やすことではなく、検出した対象・現在状態・修復方法を正しくAutomationへ接続し、過剰実行や修復ループを制御できること

です。

まとめ

セキュリティ上の問題を自動修復するときは、

検出

という一般概念ではなく、

検出
↓
対象特定
↓
修復処理へ接続
↓
実行制御
↓
現在状態確認
↓
修復
↓
コンプライアンス確認

という実装で考えます。

AWS Config Ruleを入口にする場合は、

NON_COMPLIANT
↓
Remediation Configuration
↓
Systems Manager Automation

が中心です。

自動修復では、

MaximumAutomaticAttempts
RetryAttemptSeconds
RemediationException
ConcurrentExecutionRatePercentage
ErrorPercentage

を使って、失敗時の再試行や大量実行を制御します。

また、

保存されたコンプライアンス評価
≠
Automation開始時の現在状態

なので、必要に応じて実行時に状態を再確認します。

セキュリティ検出結果を入口にする場合は、

セキュリティ検出結果
↓
Amazon EventBridge
↓
検出結果の情報を
Automation入力へ対応付け
↓
Systems Manager Automation

と接続します。

最後に、AWS Config Ruleを基準とする修復では、Ruleを再評価し、対象がCOMPLIANTへ戻ったことまで確認します。

主要AWS公式資料

  • AWS Certified Solutions Architect - Professional (SAP-C02) — Domain 3 / Task 3.2
  • AWS Config — Remediating noncompliant AWS resources
  • AWS Config API — RemediationConfiguration
  • AWS Config API — PutRemediationExceptions
  • AWS Config — Automatic remediation
  • Amazon EventBridge — AWS service events
  • AWS Security Hub — Amazon EventBridge integration
  • AWS Systems Manager — Automation