この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
困っていた内容
Security Hub のコンソールで、該当のセキュリティ基準のトップページから重要度や違反をフィルターし、その結果を CSV としてダウンロードできます。しかし、違反している具体的なリソース名は表示されず、違反しているリソース数などしか表示されません。
違反しているリソースも表示されている内容の CSV を取得したいのですが、取得する方法はあるのでしょうか。
個別のコントロールでダウンロードするとリソースを確認できますが、各コントロールごとに移動してダウンロードする方法ではなく、一括で CSV 形式で取得したいです。
どう対応すればいいの?
GetFindings API でフィルターを利用すれば、特定のセキュリティ基準・重要度の違反を出力できます。
例えば、以下のコマンドではセキュリティ基準AWS基礎セキュリティのベストプラクティスv1.0.0
の重要度が HITH または CRITICAL であり、アーカイブされていない違反が出力されます。
aws securityhub get-findings --filters '{"GeneratorId":[{"Value": "aws-foundational-security-best-practices","Comparison":"PREFIX"}],"ComplianceStatus":[{"Value": "FAILED","Comparison":"EQUALS"}],"SeverityLabel":[{"Value": "CRITICAL","Comparison":"EQUALS"},{"Value":"HIGH","Comparison":"EQUALS"}],"RecordState":[{"Value":"ACTIVE","Comparison":"EQUALS"}]}'
{
"Findings": [
{
"SchemaVersion": "2018-10-08",
"Id": "arn:aws:securityhub:ap-northeast-1:111111111111:subscription/aws-foundational-security-best-practices/v/1.0.0/IAM.6/finding/1140eea0-8e06-4de0-a519-b765ac8cded8",
"ProductArn": "arn:aws:securityhub:ap-northeast-1::product/aws/securityhub",
"ProductName": "Security Hub",
"CompanyName": "AWS",
"Region": "ap-northeast-1",
"GeneratorId": "aws-foundational-security-best-practices/v/1.0.0/IAM.6",
...
ただし、AWS CLI や AWS SDK のどちらを使うにしても、直接 CSV 形式では取得できないため、CSV に変換する必要があります。
AWS CLI を利用する場合、例えば以下のコマンドで CSV 形式で出力されます。
aws securityhub get-findings --filters '{"GeneratorId":[{"Value": "aws-foundational-security-best-practices","Comparison":"PREFIX"}],"ComplianceStatus":[{"Value": "FAILED","Comparison":"EQUALS"}],"SeverityLabel":[{"Value": "CRITICAL","Comparison":"EQUALS"},{"Value":"HIGH","Comparison":"EQUALS"}],"RecordState":[{"Value":"ACTIVE","Comparison":"EQUALS"}]}' --query "Findings[]" | jq -r '.[] | [.ProductFields.ControlId, .AwsAccountId, .Resources[0].Id, .Severity.Label, .Compliance.Status, .Workflow.Status, .UpdatedAt] | @csv'
"IAM.6","111111111111","AWS::::Account:111111111111","CRITICAL","FAILED","NEW","2022-02-27T08:21:46.840Z"
"GuardDuty.1","111111111111","AWS::::Account:111111111111","HIGH","FAILED","NEW","2022-02-27T08:21:44.984Z"
"S3.8","111111111111","arn:aws:s3:::aws-sam-cli-xxx","HIGH","FAILED","NEW","2022-02-27T06:49:29.229Z"
...