AWS Security Hub で検出結果を更新するときにノート(Note)を記載する

AWS Security Hub の検出結果に保存できるフィールド「ノート(Note)」の活用例です
2021.12.22

はじめに

Security Hub のセキュリティ基準を使って AWS環境のセキュリティチェックを行っています。 運用していると「このコントロールは無効化したい」や「この検出結果は抑制済みにしたい」 などのイベントが出てきます。

コントロール無効化の際には 無効化する理由 をテキストとして残せます。

img

▲ (画像) コントロール無効化するときに出る画面

同様に、検出結果を「抑制済み」にする際も 抑制済みにする理由 テキストに残したいですよね。 実現のために使える機能(検出結果のフィールド)が ノート(Note) です。 今回はこの ノート(Note) を試してみます。

ノートを付ける方法

残念ながら 現状(2021/12/22)はマネジメントコンソールからではノートは付けられません。

img

▲ (画像) 「ワークフローのステータス」の変更のみ(ノート付与はできない)

なので AWS CLI (もしくはSDK)を使う必要があります。

必要な情報

事前に 検出結果のID(Id)製品ARN(ProductArn) が必要です。

img

▲ (画像) 枠で囲んでいる 2つが必要な情報

使うコマンド

更新は BatchUpdateFindings を使います。 (AWS CLI の場合 aws securityhub batch-update-findings )

※以降の試行は AWS CLI で実施します

ノートを付けてみる

今回はセキュリティ基準の 1チェック項目を ノートを付与して 抑制済みにしてみます。

検出結果のID(Id)製品ARN(ProductArn) を事前に取得します。

img

▲ (画像) 矢印部分から確認できます

以下 コマンドを実行します。

FINDING_ID='arn:aws:securityhub:ap-northeast-1:123456789012:subscription/aws-foundational-security-best-practices/v/1.0.0/EC2.15/finding/xxxx-xxxx-xxxx'
PRODUCT_ARN='arn:aws:securityhub:ap-northeast-1::product/aws/securityhub'

TEXT='パブリックサブネットなので利便性を優先して抑制済みとします。'
UPDATED_BY='cm-kawahara.masahiro'

aws securityhub batch-update-findings \
--finding-identifiers \
  Id="${FINDING_ID}",ProductArn="${PRODUCT_ARN}" \
--note Text="${TEXT}",UpdatedBy="${UPDATED_BY}" \
--workflow Status='SUPPRESSED'

次のような出力が出たらOKです

{
    "ProcessedFindings": [
        {
            "Id": "arn:aws:securityhub:ap-northeast-1:123456789012:subscription/aws-foundational-security-best-practices/v/1.0.0/EC2.15/finding/xxxx-xxxx-xxxx",
            "ProductArn": "arn:aws:securityhub:ap-northeast-1::product/aws/securityhub"
        }
    ],
    "UnprocessedFindings": []
}

確認してみる

更新済み タブにコメント吹き出しがあります。これが ノート です。

img

▲ (画像) クリックすると内容を確認できます

img

▲ (画像) 検出結果の JSON にも ノート が書かれていることを確認できました

おわりに

検出結果に ノート(Note) を付与してみました。 現状 AWS CLI(もしくは SDK) でしか対応できませんが、 更新した記録をテキストとして残せるメリットは大きいと思います。

少しでも参考になれば幸いです。

補足(検出結果のIDを CLIで取得したい)

解説したとおり 検出結果の更新には 検出結果のID(Id)製品ARN(ProductArn) が必要です。

製品ARN(ProductArn) はほぼ固定化できます。 例えば (東京リージョンの) Security Hub のセキュリティ基準関連の製品ARNは 'arn:aws:securityhub:ap-northeast-1::product/aws/securityhub' です。

面倒なのは 検出結果のID(Id) です。 マネコンから取得するには数ステップ必要です。

この補足で 検出結果のID(Id) を AWS CLI で取得するコマンド一例を書きます。

コマンド例

GetFindings を使います。

以下 セキュリティ基準の 1 コントロール における 1 特定リソース の検出結果で検索して、その 検出結果ID を出力するコマンド例です。

GENERATOR_ID='aws-foundational-security-best-practices/v/1.0.0/EC2.15'
RESOURCE_ID='arn:aws:ec2:ap-northeast-1:123456789012:subnet/subnet-12example34'

FILTERS=$(cat << EOS
{
  "GeneratorId": [
    {
      "Value": "${GENERATOR_ID}",
      "Comparison": "EQUALS"
    }
  ],
  "ResourceId": [
    {
      "Value": "${RESOURCE_ID}",
      "Comparison": "EQUALS"
    }
  ]
}
EOS
)

# 実行
aws securityhub get-findings --output text \
--filters "${FILTERS}" \
--max-items 1 --query "Findings[].Id"

# ▼ 出力
# arn:aws:securityhub:ap-northeast-1:123456789012:subscription/aws-foundational-security-best-practices/v/1.0.0/EC2.15/finding/90d4582a-6ac9-43b7-acd0-a223d988b335

参考