Security Hubでコントロールの一覧とARNを取得する

Security Hubでコントロールの一覧とARNを取得します。
2023.04.20

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

Security Hubで不要なコントロールを無効化しようとしましたが、「コントロールのARN」が必要でした。 本記事では、Security Hubのコントロールの一覧とARNを取得してみました。

おすすめの方

  • Security Hubのコントロールの一覧を取得したい方
  • Security HubのコントロールのARNを取得したい方

Security Hubのコントロールの一覧とARNを取得する

DescribeStandardsControlsを使います。

しかし、StandardsSubscriptionArnとやらの指定が必要なので、先に取得します。

StandardsSubscriptionArnを取得する

GetEnabledStandardsで取得できます。

$ aws securityhub get-enabled-standards

{
    "StandardsSubscriptions": [
        {
            "StandardsSubscriptionArn": "arn:aws:securityhub:ap-northeast-1:123456789012:subscription/cis-aws-foundations-benchmark/v/1.2.0",
            "StandardsArn": "arn:aws:securityhub:::ruleset/cis-aws-foundations-benchmark/v/1.2.0",
            "StandardsStatus": "READY"
        },
        {
            "StandardsSubscriptionArn": "arn:aws:securityhub:ap-northeast-1:123456789012:subscription/aws-foundational-security-best-practices/v/1.0.0",
            "StandardsArn": "arn:aws:securityhub:ap-northeast-1::standards/aws-foundational-security-best-practices/v/1.0.0",
            "StandardsStatus": "READY"
        }
    ]
}

2つのStandardsSubscriptionArnが取得できました。この2つは、次のセキュリティ基準に該当します。

Security Hubのセキュリティ基準画面

コントロールの一覧を取得する

さきほどのセキュリティ基準それぞれで、コントロールを取得すればOKです。

AWS 基礎セキュリティのベストプラクティス v1.0.0

aws securityhub describe-standards-controls \
    --standards-subscription-arn "arn:aws:securityhub:ap-northeast-1:123456789012:subscription/aws-foundational-security-best-practices/v/1.0.0"

CIS AWS Foundations Benchmark v1.2.0

aws securityhub describe-standards-controls \
    --standards-subscription-arn "arn:aws:securityhub:ap-northeast-1:123456789012:subscription/cis-aws-foundations-benchmark/v/1.2.0"

必要に応じて、次のように> controls.jsonを付与して実行すれば、別のプログラムで結果を扱いやすくなります(JSONのため)。

aws securityhub describe-standards-controls \
    --standards-subscription-arn "arn:aws:securityhub:ap-northeast-1:123456789012:subscription/cis-aws-foundations-benchmark/v/1.2.0" \
    > controls.json

query指定の参考

特定の情報だけで良い場合は、queryを利用すると便利です。

StandardsControlArnのみ欲しい

$ aws securityhub describe-standards-controls \
    --standards-subscription-arn "arn:aws:securityhub:ap-northeast-1:123456789012:subscription/aws-foundational-security-best-practices/v/1.0.0" \
    --query 'Controls[*].StandardsControlArn'

[
    "arn:aws:securityhub:ap-northeast-1:123456789012:control/aws-foundational-security-best-practices/v/1.0.0/ACM.1",
    "arn:aws:securityhub:ap-northeast-1:123456789012:control/aws-foundational-security-best-practices/v/1.0.0/APIGateway.1",
    ...省略...
]

特定の情報をdict形式で欲しい

$ aws securityhub describe-standards-controls \
    --standards-subscription-arn "arn:aws:securityhub:ap-northeast-1:123456789012:subscription/aws-foundational-security-best-practices/v/1.0.0" \
    --query 'Controls[*].{ControlId:ControlId,ControlStatus:ControlStatus,SeverityRating:SeverityRating,Title:Title,StandardsControlArn:StandardsControlArn}'

[
    {
        "ControlId": "ACM.1",
        "ControlStatus": "ENABLED",
        "SeverityRating": "MEDIUM",
        "Title": "Imported and ACM-issued certificates should be renewed after a specified time period",
        "StandardsControlArn": "arn:aws:securityhub:ap-northeast-1:123456789012:control/aws-foundational-security-best-practices/v/1.0.0/ACM.1"
    },
    {
        "ControlId": "APIGateway.1",
        "ControlStatus": "ENABLED",
        "SeverityRating": "MEDIUM",
        "Title": "API Gateway REST and WebSocket API execution logging should be enabled",
        "StandardsControlArn": "arn:aws:securityhub:ap-northeast-1:123456789012:control/aws-foundational-security-best-practices/v/1.0.0/APIGateway.1"
    },
    {...省略...}
]

特定の情報をdict形式で欲しい(無効なやつだけ)

$ aws securityhub describe-standards-controls \
    --standards-subscription-arn "arn:aws:securityhub:ap-northeast-1:123456789012:subscription/aws-foundational-security-best-practices/v/1.0.0" \
    --query 'Controls[?ControlStatus==`DISABLED`].{ControlId:ControlId,ControlStatus:ControlStatus,SeverityRating:SeverityRating,Title:Title,StandardsControlArn:StandardsControlArn}'

[
    {
        "ControlId": "Account.1",
        "ControlStatus": "DISABLED",
        "SeverityRating": "MEDIUM",
        "Title": "Security contact information should be provided for an AWS account.",
        "StandardsControlArn": "arn:aws:securityhub:ap-northeast-1:123456789012:control/aws-foundational-security-best-practices/v/1.0.0/Account.1"
    }
]

さいごに

Security Hubでコントロールの一覧を取得してみました。 --queryオプションと併用することで、欲しい情報だけを取得できます。

参考