[Security Hub] ステータスの「成功」「失敗」「不明」となる条件をまとめてみた

2020.07.07

はじめに

Security Hub のセキュリティ標準の結果のステータスには、 「成功」「失敗」「不明」の 3種類あります。

img

それぞれステータスを判断する基準を調べてみました。

ステータスの判断方法(公式ドキュメントより)

AWSドキュメントの文章から各ステータスの成立条件を引用します。

  • 成功
    • すべての検出結果において Compliance.StatusPASSED であるか、 Workflow.StatusRESOLVED であることを示します。
    • Workflow.StatusSUPPRESSED である検出結果は無視されます。
  • 失敗
    • 少なくとも 1 つの検出結果において Compliance.StatusFAILED であり、 Workflow.StatusRESOLVED でないことを示します。
    • Workflow.StatusSUPPRESSED である検出結果は無視されます。
  • 不明 – 以下のいずれかが真であることを示します。
    • 検出結果 はありません。
    • すべての検出結果において Workflow.StatusSUPPRESSED です。 SUPPRESSED 検出結果は無視されるため、これは検出結果がないのと同じです。
    • FAILED である検出結果はありません。少なくとも 1 つの検出結果において Compliance.StatusWARNING または NOT_AVAILABLE であり、 Workflow.StatusRESOLVED または SUPPRESSED ではありません。

– 引用: セキュリティチェックの結果 | AWSドキュメント

  1. 検出結果
  2. Workflow.Status
  3. Compliance.Status

の 3要素でステータスを判断しています。 まずは、これら 3項目が何なのか簡単に説明します。

前提知識

検出結果とは

検出結果は Security Hub によるセキュリティチェックの結果です。 例えば [S3.2] S3 バケットはパブリック読み取りアクセスを禁止する必要があります 項目に対して、 下図に表示される情報、1行1行がそれぞれ検出結果です。

img

検出結果はそれぞれ AWS Security Finding 形式(ASFF) と呼ばれるJSON形式のデータで保存されます。 検出結果の [タイトル] → [Finding IDのリンク] と選択することで詳細の情報を見ることができます。

img

Workflow.Status とは

検出結果の JSONにある "Workflow" 項目の "Status" 値 のことです。 ※ "WorkflowState"値 ではないので注意

img

これは 検出結果の調査ステータス です。

検出結果に対して、「レビューを行ったか」「修正され、解決済みになったか」などのステータスを設定できます。 有効な値は下記のとおりです。

  • NEW(新規) – レビュー前の検出結果の初期状態。
  • NOTIFIED(通知済み) – セキュリティの問題についてリソース所有者に通知したことを示します。初回レビュー者がリソース所有者ではなく、リソース所有者の介入が必要な場合に使用されます。
  • RESOLVED(解決済み) – この検出結果はレビューおよび修正され、現在は解決済みと見なされています。
  • SUPPRESSED(抑制済み) – 検出結果はレビューされず、対処されません。

– 引用: AWS Security Finding 形式#asff-workflow | AWSドキュメント

検出結果の [ワークフローのステータス] から変更が可能です。 この変更で CloudWatchイベントが飛ぶので、通知や他アクションなど連携が可能です。

img

Compliance.Status とは

検出結果の JSONにある "Compliance" 項目の "Status" 値 のことです。

img

セキュリティチェックの結果 が入ります。 Compliance.Status の種類は以下のとおり。

内容
PASSED チェックに合格
WARNING 不足している情報がある or チェックをサポートしていない
FAILED 1つ以上のリソースがチェックに合格しなかった
NOT\_AVAILABLE サービス停止もしくはAPIエラーにより、チェックを実行できなかった

ステータスの判断方法(改めて)

それぞれステータスの判断方法を説明する前に、 検出結果の Workflow.State , Compliance.State の組み合わせ、 それに対する扱いを以下表にまとめます。

img

要点は以下です。

  • Workflow.StateNEW or NOTIFIED のときは、検出結果の扱いは Compliance.Status に依存します。
    • PASSED → "OK"
    • FAILED → "NG"
    • WARNING or NOT_AVAILABLE → "その他"
  • Workflow.StateRESOLVED のときは、検出結果は必ず "OK" 扱いです
  • Workflow.StateSUPPRESSED のときは、検出結果は必ず "無視" 扱いです

「成功」になるケース

検出結果が 「1個以上 "OK"」「0個以上 "無視"」 で構成されていれば「成功」です。

以下に例を載せます。

img

  • 1つめは全て セキュリティチェックに合格 PASSED した例です。
  • 2つめはセキュリティチェックに不合格 FAILED したリソースがありますが、 例外登録として抑制 SUPPRESSED したため、 "無視" 扱い。 他の検出結果はすべて合格 PASSED しているため「成功」となります。

「失敗」になるケース

検出結果が 「1個以上 "NG"」 であれば「失敗」です。

以下に例を載せます。

img

1個以上 赤色 "NG" が合った場合、他の "OK/その他/無視" に関わらず「失敗」となります。

「不明」になるケース

「成功」「失敗」に当てはまらない ものがステータス「不明」になります。

▼検出結果が無い

img

▼すべての検出結果が抑制済み

img

SUPPRESSED の検出結果は無視されます。そのため「検出結果が無い」状態と同義になります。

▼ 「"NG" が 0個」かつ 「"その他" が 1個以上」

img

FAILED である検出結果はありません。少なくとも 1 つの検出結果において Compliance.StatusWARNING または NOT_AVAILABLE であり、 Workflow.StatusRESOLVED または SUPPRESSED ではありません。

上記を噛み砕くと 「"NG" が 0個」かつ 「"その他" が 1個以上」 になります。

ステータス「不明」の解決方法

Compliance.StatusWARNING or NOT_AVAILABLE となるケースが多いです。 その場合 検出結果の JSONから Compliance.StatusReasons を参照して理由を知りましょう

img

例えば [CIS.2.3] CloudTrail ログを保存するためのS3バケットが公開設定になっていないか のチェックが ステータス「不明」 となるケースがありました。

そのときの 検出結果のJSONを見てみると以下のような記述があります。

"Compliance": {
  "Status": "WARNING",
  "StatusReasons": [
    {
      "ReasonCode": "S3_BUCKET_CROSS_ACCOUNT_CROSS_REGION",
      "Description": "The finding is in a WARNING state, because the S3 Bucket associated with this rule is in a different region/account. This rule does not support cross-region/cross-account checks, so it is recommended to disable this control in this region/account and only run it in the region/account where the resource is located."
    }
  ]
}

なぜ WARNING になったか、理由が記述されていますね。 「クロスアカウント、クロスリージョンのチェックはサポートしていない」ことが理由でした。

どう対応するか、検討しましょう。 場合によっては Workflow.StateSUPPRESSED として無視することでスッキリすることがあります。

※誤って Workflow.StateSUPPRESSED にしてしまい戻したい場合は、 検出結果から検索、ワークフローステータスの変更で状態を戻せます。

img

おわりに

Security Hubのステータス「成功」「失敗」「不明」の条件をまとめてみました。 セキュリティ標準の各チェックのステータスを正しく把握して、 スコアを上げていきましょう。

少しでもどなたかのお役に立てば幸いです。

参考