1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

FUJITSUAdvent Calendar 2024

Day 5

【AWS Security Hub】セキュリティグループの自動修復

Last updated at Posted at 2024-12-04

目的

AWS セキュリティグループでRDP/SSHの無制限公開のルールを検出し、自動削除する

  • AWS Security Hub で非準拠のセキュリティグループのルールを検出する
    • RDP/SSHポートのインバウンド通信の無制限許可を検出 (リスクの高いTCPポート)
  • EventBrigdeSystems Manager(SSM) オートメーション でルールを自動削除する
    • 修復は SSM ドキュメントで設定

Security Hub を有効にするとAWS Configにルールが作成されるが、Configの修復アクションでは自動化アクションを設定できないため EventBridge を使う

参考)AWS Configによる非準拠の検出と自動修復、カスタマイズ方法の詳細は下記を参照

概要

Security Hubを使った非準拠ルールの検出と自動修復

  • 非準拠ルールの検出は、Security Hubを有効化することで自動的に設定される
  • 非準拠ルールを自動修復したい場合、個別対応が必要 (本記事で説明)

仕組み

  • EventBridgeルールで Security Hub のイベントを検出し、SSMオートメーション を実行することで、セキュリティグループのルールを自動修復する
    image.png

実装の特徴

  • コーディング不要
  • EventBridgeでイベントを検出して実行するパターン(応用しやすい)
  • SSMオートメーション ドキュメントで修復(AWS標準ベース、カスタマイズも対応)
  • ついでに通知やロギングも対応(非準拠検出時の通知、原因調査でも使える)
  • リージョン単位で設定が必要(単一AWSアカウント / 単一リージョンのみ対応)

留意事項

必ず リソースが設定されていない未使用状態のセキュリティグループで検証すること
本記事の正確性や安全性、発生した不都合や損害等について、著者や所属組織は一切の責任を負いません

前提条件 (事前準備)

  • Security Hub を有効化
  • AWS基礎セキュリティのベストプラクティス v1.0.0 を有効化
    • リスクの高いTCPポートの無制限許可を検出できる
      • EC2.19 Security groups should not allow unrestricted access to ports with high risk
        (20,21,22,23,25,110,135,143,445,1433,1434,3000,3306,3389,4333,5000,5432,5500,5601,8080,8088,8888)
  • SSMドキュメント
    • AWS標準のSSMドキュメント AWS-DisablePublicAccessForSecurityGroup1を活用
      • カスタマイズ版を使う場合: Custom-AWS-DisablePublicAccessForSecurityGroup2 を用意しておく (リージョン単位で作成が必要)

AWS標準のSSMドキュメントでは、すべてのTCPすべてのトラフィックのルールは削除できない。→ 修復のカスタマイズ方法(SSMドキュメント)で対応可能。
自動削除される条件は、SSMドキュメントの対応範囲のみ。検出と修復で条件が異なるため、検出しても該当のルールが削除されるとは限らないので注意。

設定手順

EventBridgeのルール名: SecurityHub-AutoRemediate-EC2.19 の設定例です。
(AWSアカウントID: 123456789012、リージョン: ap-northeast-1 / 東京

1. IAMポリシーとロールの設定

セキュリティグループのインバウンドルール削除とSSMオートメーションの実行を許可するポリシーとロールを作成する。

例) IAMポリシー: Amazon_EventBridge_SecurityHub-AutoRemediate-EC2.19

  • SSMオートメーションの実行許可: AWS-DisablePublicAccessForSecurityGroup1, Custom-AWS-DisablePublicAccessForSecurityGroup 2
  • セキュリティグループのインバンドルールの削除許可 ec2:RevokeSecurityGroupIngress 3
IAMポリシー: Amazon_EventBridge_SecurityHub-AutoRemediate-EC2.19
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowStartAutomationExecution",
            "Action": "ssm:StartAutomationExecution",
            "Effect": "Allow",
            "Resource": [
                "arn:aws:ssm:*:*:automation-definition/AWS-DisablePublicAccessForSecurityGroup:*",
                "arn:aws:ssm:*:*:automation-definition/Custom-AWS-DisablePublicAccessForSecurityGroup:*"
            ]
        },
        {
            "Sid": "AllowRevokeSecurityGroupIngress",
            "Effect": "Allow",
            "Action": "ec2:RevokeSecurityGroupIngress",
            "Resource": "*"
        }
    ]
}

例) IAMロール: Amazon_EventBridge_SecurityHub-AutoRemediate-EC2.19

  • 信頼されたエンティティ: カスタム信頼ポリシー (JSON)
IAMロールのカスタム信頼ポリシー
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "TrustEventBridgeService",
            "Effect": "Allow",
            "Principal": {
                "Service": "events.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}
  • 許可ポリシー: Amazon_EventBridge_SecurityHub-AutoRemediate-EC2.19 を設定

2. EventBridgeの設定

  • Amazon EventBridge > ルール > ルールを作成:

    • 名前(例): SecurityHub-AutoRemediate-EC2.19
    • イベントバス: default
    • ルールタイプ: イベントパターンを持つルール
    • イベントソース: AWS イベントまたは EventBridge パートナーイベント
  • イベントパターン: (JSON)

    • ProductArn: 東京リージョンに限定する場合、arn:aws:securityhub:ap-northeast-1::product/aws/securityhub を指定 (本手順では東京リージョンの検知/修復に限定)
    • GeneratorIdに検出対象のIDを指定する。EC2.19の場合、security-control/EC2.19, aws-foundational-security-best-practices/v/1.0.0/EC2.19 を指定
    イベントパターンの設定例 (Security Hub / EC2.19)
    {
      "source": ["aws.securityhub"],
      "detail-type": ["Security Hub Findings - Imported"],
      "detail": {
        "findings": {
          "Compliance": {
            "Status": ["FAILED"]
          },
          "ProductArn": ["arn:aws:securityhub:ap-northeast-1::product/aws/securityhub"],
          "RecordState": ["ACTIVE"],
          "Workflow": {
            "Status": ["NEW"]
          },
          "GeneratorId": [
            "security-control/EC2.19",
            "aws-foundational-security-best-practices/v/1.0.0/EC2.19"
          ]
        }
      }
    }
    
  • ターゲットの設定: 自動修復する場合、SSMオートメーションを実行する

    • ターゲットタイプ: AWS のサービス

    • ターゲットを選択: Systems Manager オートメーション

    • ドキュメントを選択: AWS-DisablePublicAccessForSecurityGroup 1 または Custom-AWS-DisablePublicAccessForSecurityGroup 2

    • 自動化パラメータを設定: 入力トランスフォーマー 4

    • 入力パス: 非準拠ルールで検出された セキュリティグループIDGroupId の値にセットしてテンプレートに渡す

      入力パス
       {"GroupId": "$.detail.findings[0].Resources[0].Details.AwsEc2SecurityGroup.GroupId"}
      
    • テンプレート: SSMドキュメントのパラメータをJSON形式で設定

      テンプレート
      {"GroupId": [<GroupId>]}
      
      • GroupId: セキュリティグループのID (必須): [<GroupId>] で指定
    • EventBridgeのロール: Amazon_EventBridge_SecurityHub-AutoRemediate-EC2.19 を選択

3. 動作確認

  • 必ず リソースが設定されていない未使用状態のセキュリティグループで検証すること

  • セキュリティグループのインバウンドルールに タイプ:RDPSSH、ソース: 0.0.0.0/0 のルールを追加し、数分後にルールが自動削除されることを確認する

  • EventBridgeのルールのモニタリングで実行されたか確認

    • ターゲットを追加し CloudWatch Logsへ出力したり、SNSで通知するとよい (非準拠の検出の履歴を残す、原因調査などで必要)
  • オートメーションが実行されているかは AWS Systems Manager > AutomationExecutionsCloudTrail で実行履歴を確認する

補足情報

参考1. 代替手段:AWSでの自動化されたセキュリティ対応 (CloudFormation)

  • 多くの自動修復が用意されている+CloudFormationで導入できる
  • マルチアカウント・マルチリージョン環境に対応
  • セキュリティグループの非準拠ルールの自動修復について:
    • すべてのTCPすべてのトラフィックの条件には対応していない
    • カスタマイズで対応する場合、CDK利用など難易度が高いかも

参考2. Security Hub:セキュリティグループ関連のコントロール

CIS AWS Foundations Benchmark でも RDP/SSH の無制限許可を検出ができる
ただし、バージョンによって検出や設定方法が異なるため注意

  • CIS AWS Foundations Benchmark v1.2.0

  • CIS AWS Foundations Benchmark v3.0.0

    • SSHRDPの無制限許可を検出 (vpc-sg-port-restriction-check)
      • [EC2.53] EC2 security groups should not allow ingress from 0.0.0.0/0 to remote server administration ports [修復]
  • 参考)CIS AWS Foundations Benchmark v1.4.0 では、セキュリティグループのRDP/SSHの検出は未対応

  1. AWS Systems Manager Automation runbook reference > ユーザーガイド > AWS-DisablePublicAccessForSecurityGroup 2 3

  2. SSMドキュメントをカスタマイズする場合: 修復のカスタマイズ方法(SSMドキュメント)を参照 2 3

  3. セキュリティグループのインバウンドルールを削除する権限を付与する 3-2-1. 事前準備:IAMポリシーとロールの作成

  4. 入力トランスフォーマー EventBridgeからオートメーションを実行するときのパラメータの受け渡し方法: 入力トランスフォーマーを使用したオートメーションへのデータの受け渡し

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?