目的
AWS セキュリティグループでRDP/SSHの無制限公開のルールを検出し、自動削除する
-
AWS Security Hub
で非準拠のセキュリティグループのルールを検出する- RDP/SSHポートのインバウンド通信の無制限許可を検出 (リスクの高いTCPポート)
-
EventBrigde
+Systems Manager(SSM) オートメーション
でルールを自動削除する- 修復は
SSM ドキュメント
で設定
- 修復は
Security Hub
を有効にするとAWS Config
にルールが作成されるが、Configの修復アクションでは自動化アクションを設定できないため EventBridge
を使う
参考)AWS Configによる非準拠の検出と自動修復、カスタマイズ方法の詳細は下記を参照
概要
Security Hubを使った非準拠ルールの検出と自動修復
- 非準拠ルールの検出は、
Security Hub
を有効化することで自動的に設定される - 非準拠ルールを自動修復したい場合、個別対応が必要 (本記事で説明)
仕組み
実装の特徴
- コーディング不要
-
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)
-
EC2.19 Security groups should not allow unrestricted access to ports with high risk
- リスクの高いTCPポートの無制限許可を検出できる
- SSMドキュメント
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-DisablePublicAccessForSecurityGroup
1,Custom-AWS-DisablePublicAccessForSecurityGroup
2 - セキュリティグループのインバンドルールの削除許可
ec2:RevokeSecurityGroupIngress
3
{
"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)
{
"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 -
入力パス: 非準拠ルールで検出された
セキュリティグループID
をGroupId
の値にセットしてテンプレートに渡す入力パス{"GroupId": "$.detail.findings[0].Resources[0].Details.AwsEc2SecurityGroup.GroupId"}
-
テンプレート: SSMドキュメントのパラメータをJSON形式で設定
テンプレート{"GroupId": [<GroupId>]}
- GroupId: セキュリティグループのID (必須):
[<GroupId>]
で指定
- GroupId: セキュリティグループのID (必須):
-
EventBridgeのロール:
Amazon_EventBridge_SecurityHub-AutoRemediate-EC2.19
を選択
-
3. 動作確認
-
必ず
リソースが設定されていない未使用状態
のセキュリティグループで検証すること -
セキュリティグループのインバウンドルールに タイプ:
RDP
、SSH
、ソース:0.0.0.0/0
のルールを追加し、数分後にルールが自動削除されることを確認する -
EventBridgeのルールのモニタリングで実行されたか確認
- ターゲットを追加し
CloudWatch Logs
へ出力したり、SNS
で通知するとよい (非準拠の検出の履歴を残す、原因調査などで必要)
- ターゲットを追加し
-
オートメーションが実行されているかは
AWS Systems Manager > Automation
のExecutions
やCloudTrail
で実行履歴を確認する
補足情報
参考1. 代替手段:AWSでの自動化されたセキュリティ対応 (CloudFormation)
- 多くの自動修復が用意されている+CloudFormationで導入できる
- マルチアカウント・マルチリージョン環境に対応
- セキュリティグループの非準拠ルールの自動修復について:
-
すべてのTCP
、すべてのトラフィック
の条件には対応していない - カスタマイズで対応する場合、CDK利用など難易度が高いかも
-
参考2. Security Hub:セキュリティグループ関連のコントロール
CIS AWS Foundations Benchmark でも RDP/SSH の無制限許可を検出ができる
ただし、バージョンによって検出や設定方法が異なるため注意
-
CIS AWS Foundations Benchmark v1.2.0
-
SSH
とRDP
の無制限許可を検出 (restricted-ssh、restricted-common-ports)
-
-
CIS AWS Foundations Benchmark v3.0.0
-
SSH
とRDP
の無制限許可を検出 (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の検出は未対応
-
AWS Systems Manager Automation runbook reference > ユーザーガイド > AWS-DisablePublicAccessForSecurityGroup ↩ ↩2 ↩3
-
SSMドキュメントをカスタマイズする場合: 修復のカスタマイズ方法(SSMドキュメント)を参照 ↩ ↩2 ↩3
-
セキュリティグループのインバウンドルールを削除する権限を付与する 3-2-1. 事前準備:IAMポリシーとロールの作成 ↩
-
入力トランスフォーマー EventBridgeからオートメーションを実行するときのパラメータの受け渡し方法: 入力トランスフォーマーを使用したオートメーションへのデータの受け渡し ↩