Security HubのCentral Configuration(中央設定)をAWS CLIでやってみた #AWSreInvent

2023.12.08

こんにちは。たかやまです。

先日、AWS Security Hubが組織への展開でセキュリティ標準やコントロールをカスタマイズして設定できるCentral Configuration(中央設定)に対応しました。

今回Central ConfigurationについてAWS CLIで操作してみたので、その内容をお伝えします。

やってみる

AWS CLI は 2.14.0 以上が必要です。

Central Configuration周りで追加されているコマンドは以下の通りです。

Central Configuration有効化

以下のコマンドでCentral Configurationを有効化できます。
このとき、auto-enableオプションは --no-auto-enable のみ指定できます。

aws securityhub update-organization-configuration \
--no-auto-enable \
--organization-configuration '{"ConfigurationType": "CENTRAL"}'

ポリシー作成

以下のコマンドでポリシーを作成できます。

aws securityhub create-configuration-policy \
--name <ポリシー名> \
--configuration-policy <ポリシー内容>

--configuration-policyにはJSON形式でポリシーを記述します。
各項目は以下の通りです。

EnabledSecurityControlIdentifiersとDisabledSecurityControlIdentifiersの両方を指定することはできません。

  • ServiceEnabled(boolean) : この構成ポリシーでSecurity Hubが有効/無効にするか
  • EnabledStandardIdentifiers(list) : 有効にするセキュリティ標準のARN
  • SecurityControlsConfiguration(structure) : セキュリティコントロールの設定
    • EnabledSecurityControlIdentifiers(list) : 有効にするセキュリティコントロールのリスト。リストされたコントロール以外はすべて無効化される ※以下のポリシーでは未定義
    • `DisabledSecurityControlIdent
    • ifiers`(list) : 無効にするセキュリティコントロールのリスト。リストされたコントロール以外はすべて有効化される
    • SecurityControlCustomParameters(list) : [オプション]カスタマイズ可能なコントロールのパラメータカスタマイズ
    • SecurityControlId(string) : セキュリティコントロールのID
    • Parameters(map) : カスタムパラメータの設定

今回は以下のようなポリシーを作成してみます。
CLIでパラメータを与える際にはワンライナーで記述する必要があります。

{
  "SecurityHub": {
    "ServiceEnabled": true,
    "EnabledStandardIdentifiers": [
      "arn:aws:securityhub:ap-northeast-1::standards/aws-foundational-security-best-practices/v/1.0.0",
      "arn:aws:securityhub:::ruleset/cis-aws-foundations-benchmark/v/1.2.0"
    ],
    "SecurityControlsConfiguration": {
      "DisabledSecurityControlIdentifiers": ["CloudTrail.2"],
      "SecurityControlCustomParameters": [
        { "SecurityControlId": "ACM.1", "Parameters": { "daysToExpiration": { "ValueType": "CUSTOM", "Value": { "Integer": 15 } } } }
      ]
    }
  }
}

実行例

$ aws securityhub create-configuration-policy \
> --name SampleConfigurationPolicy \
> --configuration-policy '{"SecurityHub":{"ServiceEnabled":true,"EnabledStandardIdentifiers":["arn:aws:securityhub:ap-northeast-1::standards/aws-foundational-security-best-practices/v/1.0.0","arn:aws:securityhub:::ruleset/cis-aws-foundations-benchmark/v/1.2.0"],"SecurityControlsConfiguration":{"DisabledSecurityControlIdentifiers":["CloudTrail.2"],"SecurityControlCustomParameters":[{"SecurityControlId":"ACM.1","Parameters":{"daysToExpiration":{"ValueType":"CUSTOM","Value":{"Integer":15}}}}]}}}'
{
    "Arn": "arn:aws:securityhub:ap-northeast-1:xxxxxxxxxxxx:configuration-policy/d6ff6097-53fe-4c85-8c4c-bc58869bbe2d",
    "Id": "d6ff6097-53fe-4c85-8c4c-bc58869bbe2d",
    "Name": "SampleConfigurationPolicy",
    "UpdatedAt": "2023-12-07T11:13:14.239000+00:00",
    "CreatedAt": "2023-12-07T11:13:14.239000+00:00",
    "ConfigurationPolicy": {
        "SecurityHub": {
            "ServiceEnabled": true,
            "EnabledStandardIdentifiers": [
                "arn:aws:securityhub:ap-northeast-1::standards/aws-foundational-security-best-practices/v/1.0.0",
                "arn:aws:securityhub:::ruleset/cis-aws-foundations-benchmark/v/1.2.0"
            ],
            "SecurityControlsConfiguration": {
                "DisabledSecurityControlIdentifiers": [
                    "CloudTrail.2"
                ],
                "SecurityControlCustomParameters": [
                    {
                        "SecurityControlId": "ACM.1",
                        "Parameters": {
                            "daysToExpiration": {
                                "ValueType": "CUSTOM",
                                "Value": {
                                    "Integer": 15
                                }
                            }
                        }
                    }
                ]
            }
        }
    }
}

ポリシー関連付け

ポリシーはRoot、OU、アカウントに関連付けて使用します。
以下のコマンドでポリシーを関連付けることができます。

aws securityhub start-configuration-policy-association \
--configuration-policy-identifier <ポリシーID or ポリシーARN> \
--target <RootID or OU ID or アカウントID>

ポリシーID or ポリシーARNはlist-configuration-policiesで確認することができます。

aws securityhub list-configuration-policies \

実行結果

$ aws securityhub list-configuration-policies
{
    "ConfigurationPolicySummaries": [
        {
            "Arn": "arn:aws:securityhub:ap-northeast-1:xxxxxxxxxxxx:configuration-policy/d6ff6097-53fe-4c85-8c4c-bc58869bbe2d",
            "Id": "d6ff6097-53fe-4c85-8c4c-bc58869bbe2d",
            "Name": "SampleConfigurationPolicy",
            "UpdatedAt": "2023-12-07T11:13:14.239000+00:00",
            "ServiceEnabled": true
        }
    ]
}

コンソールでポリシーIDを確認する場合はこちらで確認できます。

ポリシーIDを指定して実行した結果はこちらです。

$ aws securityhub start-configuration-policy-association \
> --configuration-policy-identifier d6ff6097-53fe-4c85-8c4c-bc58869bbe2d \
> --target '{"RootId": "r-xxxx"}'
{
    "ConfigurationPolicyId": "d6ff6097-53fe-4c85-8c4c-bc58869bbe2d",
    "TargetId": "r-xxxx",
    "TargetType": "ROOT",
    "AssociationType": "APPLIED",
    "UpdatedAt": "2023-12-07T13:52:04.447000+00:00",
    "AssociationStatus": "PENDING"
}

RootIdにポリシーを指定することで、組織内のすべてのアカウントにポリシーが適用されます。
OU ID、アカウントIDで指定する場合にまとめて指定できるのか気になって試してみましたが、こちらの指定は1つずつしかできないようです。

$ aws securityhub start-configuration-policy-association \
> --configuration-policy-identifier d6ff6097-53fe-4c85-8c4c-bc58869bbe2d \
> --target '{"OrganizationalUnitId": "ou-0orw-xxxxxxxx","AccountId": "xxxxxxxxxxxx"}'

Parameter validation failed:
Invalid number of parameters set for tagged union structure Target. Can only set one of the following keys: AccountId. OrganizationalUnitId. RootId.

コンソールの設定では複数の設定を一括にできるようなので、こちらはコンソールで行うほうが楽かもしれません。

ポリシー更新

ポリシーの更新は以下のコマンドで更新できます。

aws securityhub update-configuration-policy
--identifier <ポリシー名> \
--configuration-policy <ポリシー内容> # 任意の変更したい項目

実行結果

$ aws securityhub update-configuration-policy \
> --identifier d6ff6097-53fe-4c85-8c4c-bc58869bbe2d \
> --configuration-policy '{"SecurityHub":{"ServiceEnabled":true,"EnabledStandardIdentifiers":["arn:aws:securityhub:ap-northeast-1::standards/aws-foundational-security-best-practices/v/1.0.0"],"SecurityControlsConfiguration":{"DisabledSecurityControlIdentifiers":["Account.1","IAM.6","EC2.8","CloudTrail.5"]}}}'
{
    "Arn": "arn:aws:securityhub:ap-northeast-1:xxxxxxxxxxxx:configuration-policy/d6ff6097-53fe-4c85-8c4c-bc58869bbe2d",
    "Id": "d6ff6097-53fe-4c85-8c4c-bc58869bbe2d",
    "Name": "SampleConfigurationPolicy",
    "UpdatedAt": "2023-12-08T05:44:48.428000+00:00",
    "CreatedAt": "2023-12-07T11:13:14.239000+00:00",
    "ConfigurationPolicy": {
        "SecurityHub": {
            "ServiceEnabled": true,
            "EnabledStandardIdentifiers": [
                "arn:aws:securityhub:ap-northeast-1::standards/aws-foundational-security-best-practices/v/1.0.0"
            ],
            "SecurityControlsConfiguration": {
                "DisabledSecurityControlIdentifiers": [
                    "Account.1",
                    "IAM.6",
                    "EC2.8",
                    "CloudTrail.5"
                ]
            }
        }
    }
}

ポリシー削除

ポリシー削除コマンドはこちらです。

aws securityhub delete-configuration-policy \
--identifier <ポリシー名 or ポリシーARN>

ポリシーが関連付けされている場合は削除ができず以下のエラーが返ってきます。

$ aws securityhub delete-configuration-policy \
> --identifier d6ff6097-53fe-4c85-8c4c-bc58869bbe2d

An error occurred (ResourceConflictException) when calling the DeleteConfigurationPolicy operation: Policy d6ff6097-53fe-4c85-8c4c-bc58869bbe2d is associated with one or more accounts or organizational units. You must disassociate the policy before you can delete it.

なので以下のコマンドで関連付けを解除してから削除します。

aws securityhub start-configuration-policy-disassociation \
--configuration-policy-identifier <ポリシーID or ポリシーARN> \
--target <RootID or OU ID or アカウントID>

実行結果

$ aws securityhub start-configuration-policy-disassociation \
> --configuration-policy-identifier d6ff6097-53fe-4c85-8c4c-bc58869bbe2d \
> --target '{"RootId": "r-0orw"}'
$ aws securityhub delete-configuration-policy \
> --identifier d6ff6097-53fe-4c85-8c4c-bc58869bbe2d

Central Configuration無効化

以下のコマンドでCentral Configurationを無効化できます。
有効化と違い、auto-enableオプションは --auto-enalbe / --no-auto-enableのどちらでも指定できます。

aws securityhub update-organization-configuration \
--auto-enable | --no-auto-enable \
--organization-configuration '{"ConfigurationType": "LOCAL"}'

最後に

個人的にSecurity HubはCLIで設定することが多いので、Central ConfigurationもCLIで設定できるようにまとめてみました。

CloudFormationの対応はまだのようなのでこちらも期待して待ちたいと思います!

以上、たかやま(@nyan_kotaroo)でした。