[AWS Security Hub] マルチアカウント環境でのコントロールのパラメータカスタマイズについて調査してみた #AWSreInvent

2023.12.03

こんにちは、森田です。

先日のre:Invent 2023で Security Hub でコントロールのパラメータカスタマイズができるようになりました。

ドキュメントを確認してみると、AWS Organizations でマルチアカウント説明はありますが

AWS Organizations なしでマルチアカウントを管理している場合については、わからなかったので実際に調査してみることにしました。

何が気になるか

AWS Organizations なしでマルチアカウントを管理している場合は、AWS Organizations 管理の場合とは違い、コントロールの制御を各アカウントに委任しております。

今回のアップデートにより、Security Hub 管理者が意図しない形で、各アカウント保有者によってコントロールのパラメータカスタマイズが行われ、セキュリティの基準を緩くすることが可能となるのではと考えています。

また、管理者はパラメータカスタマイズに気づくことができるかという点も気になります。

先にまとめ

  • 各アカウントで、セキュリティの基準を変更できる(コントロールのパラメータカスタマイズが可能)
  • 管理者は、検出結果の SecurityControlParameters を確認することでパラメータカスタマイズに気づくことができる

実際に試してみる

上記を確認するために、コントロールのパラメータカスタマイズを子アカウントで行います。

以下のように、 EC2.18 のコントロールに、8080 のポートを追加します。

パラメータカスタマイズ後に、Security Hub で検出させるために PASS となるセキュリティグループを作成します。

以下のように、 インバウンドに TCP:8080 0.0.0.0/0 を追加して作成します。

作成後、しばらくすると、子アカウントで検出が行われ、PASSED となっていることが確認できます。

続いて、管理アカウントを確認してみると、子アカウント側でカスタマイズした基準のまま、管理側でも PASSED となっています。

検出結果の確認

次に、管理アカウントから検出結果.jsonの確認を行います。

以下のような検出結果となっており、SecurityControlParametersに追加したパラメータが確認ができます。

{
  "Compliance": {
    "Status": "FAILED",
    "SecurityControlId": "EC2.18",
    "AssociatedStandards": [
      {
        "StandardsId": "standards/aws-foundational-security-best-practices/v/1.0.0"
      }
    ],
    "SecurityControlParameters": [
      {
        "Name": "authorizedUdpPorts",
        "Value": []
      },
      {
        "Name": "authorizedTcpPorts",
        "Value": [
          "80",
          "443",
          "8080"
        ]
      }
    ]
  }
}

SecurityControlParameters のデフォルト値と比較を行うことで、管理者は、パラメータの変更に気づくことが可能です。

なお、コントロールのデフォルト値の確認は以下のコマンドで可能です。

aws securityhub get-security-control-definition --security-control-id "EC2.18"

実行結果

{
    "SecurityControlDefinition": {
        "SecurityControlId": "EC2.18",
        "Title": "Security groups should only allow unrestricted incoming traffic for authorized ports",
        "Description": "This control checks whether an Amazon EC2 security group permits unrestricted incoming traffic from unauthorized ports. The control status is determined as follows: If you use the default value for 'authorizedTcpPorts', the control fails if the security group permits unrestricted incoming traffic from any port other than ports 80 and 443; If you provide custom values for 'authorizedTcpPorts' or 'authorizedUdpPorts', the control fails if the security group permits unrestricted incoming traffic from any unlisted port; If no parameter is used, the control fails for any security group that has an unrestricted inbound traffic rule.",
        "RemediationUrl": "https://docs.aws.amazon.com/console/securityhub/EC2.18/remediation",
        "SeverityRating": "HIGH",
        "CurrentRegionAvailability": "AVAILABLE",
        "ParameterDefinitions": {
            "authorizedUdpPorts": {
                "Description": "List of authorized UDP ports",
                "ConfigurationOptions": {
                    "IntegerList": {
                        "Min": 1,
                        "Max": 65535,
                        "MaxItems": 32
                    }
                }
            },
            "authorizedTcpPorts": {
                "Description": "List of authorized TCP ports",
                "ConfigurationOptions": {
                    "IntegerList": {
                        "DefaultValue": [
                            80,
                            443
                        ],
                        "Min": 1,
                        "Max": 65535,
                        "MaxItems": 32
                    }
                }
            }
        }
    }
}

まとめ

コントロールのパラメータカスタマイズができるようになったために、アカウントごとに柔軟にセキュリティ基準をできる一方で、Security Hub 管理者の意図しない設定が行われる可能性があります。

意図しない設定については、Security Hubの検出をトリガーに Step Functions などで自動でチェックすることはできそうなので、 Security Hub 管理者が意図しない設定に気づく仕組みは作れそうです。

試される方は、以下を参考に作ってみると良さそうです。