[アップデート] CloudFormation で Security Hub コントロールのカスタムパラメータが設定出来るようになりました

2024.05.16

いわさです。

AWS Security Hub のコントロールにはカスタムパラメータを設定出来るものあります。

そして先日、このカスタムパラメータを活かす AWS Security Hub のあらたなスタンダードが追加されました。タグが設定されているかチェックするもので、タグのキーなどを指定する際にカスタムパラメータを指定します。

中々良いスタンダードが登場したじゃないかと思いつつ、80 件以上のコントロールごとにカスタムパラメータを設定する必要があって、ちょっと面倒そうだなと思っていました。

しかし、今朝のアップデートで CloudFormation がセキュリティコントロール「AWS::SecurityHub::SecurityControl」をサポートし、カスタムパラメータを CloudFormation で設定出来るようになりました。

早速使ってみた

早速ですが、少し面倒だなと思っていた前回の「AWS Resource Tagging Standard v1.0.0」のコントロールを対象に使ってみました。

どれでも良いのですが今回は次のコントロールを操作してみます。

カスタム値を設定

まずはカスタム値の設定からしてみましょう。
構成するためにはカスタムパラメータの名前を知る必要があります。

そのため、まずはget-security-control-definitionコマンドを使って、コントロールに設定可能なパラメータ定義を確認しましょう。

% aws securityhub get-security-control-definition --security-control-id EC2.43 --profile hogeadmin
{
    "SecurityControlDefinition": {
        "SecurityControlId": "EC2.43",
        "Title": "EC2 security groups should be tagged",
        "Description": "This control checks whether an Amazon EC2 security group has tags with the specific keys defined in the parameter requiredTagKeys. The control fails if the security group doesn’t have any tag keys or if it doesn’t have all the keys specified in the parameter requiredTagKeys. If the parameter requiredTagKeys isn't provided, the control only checks for the existence of a tag key and fails if the security group isn't tagged with any key. System tags, which are automatically applied and begin with aws:, are ignored.",
        "RemediationUrl": "https://docs.aws.amazon.com/console/securityhub/EC2.43/remediation",
        "SeverityRating": "LOW",
        "CurrentRegionAvailability": "AVAILABLE",
        "ParameterDefinitions": {
            "requiredTagKeys": {
                "Description": "List of non-system tag keys that the evaluated resource must contain. Tag keys are case sensitive.",
                "ConfigurationOptions": {
                    "StringList": {
                        "MaxItems": 6
                    }
                }
            }
        }
    }
}

取得出来ました。
このコントロールのカスタムパラメータ名は「requiredTagKeys」というもので、文字列の配列形式で指定する必要があるようです。
こちらを使って次のようなテンプレートを作成しました。

AWSTemplateFormatVersion: 2010-09-09
Description: ---
Resources: 
  HogeControl:
    Type: AWS::SecurityHub::SecurityControl
    Properties:
      SecurityControlId: EC2.43
      Parameters: 
        requiredTagKeys:
          ValueType: 'CUSTOM'
          Value:
            StringList: 
              - aaa
              - bbb
      LastUpdateReason: hoge-reason

補足する点としては、Value以下にはまずデータ型を指定する必要がありますので、コントロールのパラメータ定義に従うようにしましょう。ここが違っているとデプロイ時に失敗します。

上記テンプレートをデプロイ後、該当コントロールのパラメータタブを確認してみると、指定した内容で更新されていました。良いですね。

前回当てずっぽうで配列の指定方法をあてましたが、正しかったようです。

デフォルトに戻す

次はカスタムパラメータを設定したコントロールをデフォルトに戻す方法です。
この場合はValueTypeDEFAULTを指定します。
Valueプロパティは不要で、指定しても無視されるとのことです。

AWSTemplateFormatVersion: 2010-09-09
Description: ---
Resources: 
  HogeControl:
    Type: AWS::SecurityHub::SecurityControl
    Properties:
      SecurityControlId: EC2.43
      Parameters: 
        requiredTagKeys:
          ValueType: 'DEFAULT'
      LastUpdateReason: hoge-reason

デプロイしてみると次のように先ほど設定されたカスタムパラメータ値がクリアされていました。

さいごに

本日は CloudFormation で Security Hub コントロールのカスタムパラメータが設定出来るようになったので使ってみました。

こいつはなかなか良いのではないですか。
コントロールのカスタムパラメータを自動構成したいときなどに使えそうですね。