- 公開日
- 最終更新日
【AWS Config】SSH全開放を自動で直す!Systems Manager Automationではじめる自動修復ワークフロー入門
この記事を共有する
目次
はじめに
こんにちは、パーソル&サーバーワークスの相澤です。
AWS環境を運用していると、「セキュリティグループのインバウンドルールでSSH(ポート22番)を0.0.0.0/0に開けてしまった」という、
ヒヤッとする状況に遭遇することがあります。
全開放は不特定多数から接続可能になってしまい攻撃のリスクが高まるため、運用品質の観点でも避けたい設定です。
そこで今回は、AWS ConfigとAWS Systems Manager Automation(以下、SSM Automation)を使って、セキュリティグループの全開放ルールを自動で削除する仕組みを作ってみました。
本記事で作成する構成
- AWS Configが、セキュリティグループのSSH全開放を「ルール非準拠」として検知する
- SSM Automationが、セキュリティグループに対してランブックを実行し、該当のルールを削除する
STEP 1:検証用セキュリティグループの作成
まず最初に、監視対象となるセキュリティグループを作成していきます。
後程インバウンドルールにSSH全開放を設定し、自動で修復されることを確認しますので、この段階ではインバウンドルールは空のままで作成します。
手順
①AWSマネジメントコンソールにログインして、右上のリージョン選択箇所にて[東京]リージョンを選択する
②[VPC]>[セキュリティグループ]>[セキュリティグループの作成]画面を開く
③以下の通り設定し[セキュリティグループを作成]をクリックする
・セキュリティグループ名:任意の名前
・VPC:デフォルト

STEP 2:IAMポリシー・IAMロールの作成
次に、IAMポリシーとIAMロールを作成します。
このIAMロールは、SSM Automationが自動修復ランブックを実行する際、セキュリティグループのインバウンドルールを削除する為に必要な権限を与えるものです。
手順
①[IAM]>[ポリシー]>[ポリシーの作成]画面を開く
②[ポリシーエディタ]を[JSON]に切り替え、以下の通り入力し、[次へ]をクリックする
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ec2:RevokeSecurityGroupIngress",
"ec2:DescribeSecurityGroups"
],
"Resource": "*"
}
]
}
ec2:RevokeSecurityGroupIngress : セキュリティグループのインバウンドルールを削除する権限
ec2:DescribeSecurityGroups : セキュリティグループの情報(ルール)を読み取る権限
③[ポリシー名]は任意の名前を設定し、[ポリシーの作成]をクリックする
④[IAM]>[ロール]>[ロールの作成]画面を開く
⑤[信頼されたエンティティを選択]画面で以下の通り設定し、[次へ]をクリックする
・信頼されたエンティティタイプ:AWSのサービス
・サービスまたはユースケース:Systems Manager
・ユースケース:Systems Manager
⑥[許可を追加]画面で、先程作成したIAMポリシーにチェックをつけ[次へ]をクリックする
⑦[ロール名]は任意の名前を設定し、[ロールの作成]をクリックする
STEP 3:AWS Config のセットアップ
ここでは、AWS Configにて、以下の2つの設定を行います。
①セキュリティグループを監視し、インバウンドルールにSSH全開放が登録されたら「ルール非準拠」として検知する
②上記で検知したセキュリティグループに対し「自動修復」を行う
自動修復とは、「SSM AutomationがSystems Managerランブックを実行し、0.0.0.0/0からのSSHインバウンドルールを削除する」という一連の操作を自動で行うことです。
手順
①[AWS Config]>[ルール]>[ルールを追加]画面を開く
②[AWSによって管理されるルールの追加]を選択し、検索窓に[SSH]と入力する
③[restricted-ssh]を選択し[次へ]をクリック
restricted-ssh : 0.0.0.0/0からのSSHを許可しているセキュリティグループを、非準拠と判定するルール
④[評価モード]画面にて以下の通り入力し、ルールを保存する(記載していない項目はデフォルト値で設定する)
・変更範囲:リソース
・リソース:AWS EC2 SecurityGroup
[評価モード]画面では、ルール準拠の評価を行う範囲を設定します。今回はセキュリティグループを評価の対象とします。
続いて、自動修復の設定を行います。
①[restricted-ssh]を選択>[アクション]>[修復の管理]を選択する
②以下の通り設定し、[変更を保存]をクリックする
・修復方法:自動修復
・修復アクションを選択:AWS-DisablePublicAccessForSecurityGroup
・リソースIDパラメータ:GroupId
・AutomationAssumeRole:STEP 2で作成したIAMロールのARN
AWS-DisablePublicAccessForSecurityGroup:セキュリティグループの全開放ルールを自動的に削除して、安全な状態へ戻すための修復ランブック
STEP 4:動作確認
以上で自動修復の設定が完了したので、実際に動作確認をしてみましょう。
STEP1で作成したセキュリティグループに、インバウンドルールを追加します。
今回は、SSH全開放のルール以外もまとめて削除されてしまわないか確認するために、HTTPのルールも追加しておきます。
手順
①[VPC]>[セキュリティグループ]>[STEP 1で作成したセキュリティグループのID]をクリックする
②[インバウンドのルールを編集]をクリックする
③[ルールを追加]をクリック、以下の通り設定し、[ルールを保存]をクリックする
・タイプ:SSH ソース:Anywhere-IPv4
・タイプ:HTTP ソース:マイ IP
④数分時間を置き、画面を更新する
SSH全開放のルールだけが削除されていることを確認できました!
Systems Manager側でも動作確認しておきましょう。
⑥[AWS Systems Manager]>[自動化]を開く
⑦[オートメーションの実行]画面で、ドキュメント名AWS-DisablePublicAccessForSecurityGroupの実行が記録されているので、実行IDをクリックする
こちらの画面から、実行結果のステータスや開始/終了時刻などの、詳細な情報を確認することができます。
もし自動修復に失敗した場合は、ここから原因を調査することが可能です。
調査方法については、以下の記事で紹介されていますので併せてご確認ください。
【AWS Config】修復が失敗した際のログ確認方法
おわりに
今回は、AWS Configで非準拠を検知し、SSM Automationで自動修復する仕組みを作成しました。
セキュリティグループの設定ミスを自動で正したい場面や、まずはシンプルに自動修復を導入したいケースで役立つ仕組みだと思います。
本記事が、自動化の第一歩を踏み出す際の参考になりましたら幸いです!
この記事は私が書きました
相澤 紗由希
記事一覧将来の目標は、わかりやすく説明できるエンジニアになることです。 「説明うまい!」と言ってもらえる日を夢見て奮闘中です。 編み物が好きです。