SSHが全開放されたセキュリティーグループを検知し、自動修正する

こんにちは、櫻井です。

 

セキュリティーグループでSSHを不必要に全解放(0.0.0.0/0)している場合、悪意のあるユーザからサーバにアクセスされてしまうリスクが増加してしまいます。「SSHを全開放しないように」ということを周知したとしても、人が操作している以上は間違いが起こる可能性があるため、フールプルーフ化させよう。ということが今回の目的です。

 

そのために、AWS ConfigでセキュリティーグループでSSHが全開放されていないかを監視するルールを作成します。作成されたルールで非準拠だった場合、Systems Manager オートメーションで全開放されているSSHを削除するという仕組みを作成します。

※セキュリティーグループのルールに追加されているHTTPポート及び、全解放ではないSSHは等は削除されません。

 

 

 

手順

 

早速ですが、全解放のSSHを自動修正する手順をご紹介します。

 

AWS Config のセットアップを行う

 

AWS Configを利用している方はセットアップは終わっていると思うので、こちらの手順はスキップしてください

 

AWS マネジメントコンソールからAWS Configに移動し、”1-Click セットアップ”をクリックします。

 

 

 

細かい内容はAWS 側で設定してくれているので “確認” をクリックしてセットアップを完了します。

 

 

 

Config ルールを作成する

 

 

先程のセットアップが完了すると、ページが自動的にダッシュボードに遷移します。左側のタブの”ルール” を選択し、”ルールの追加” をクリックします。

 

 

 

“ルールタイプの選択” で “AWS によって管理されるルールの追加” を選択し、”AWS マネージド型ルール” で “restricted-ssh” を選択し “次へ” をクリックします。

 

 

 

こちらは、デフォルトで選択されているものを変更せずに “次へ” をクリックします。

 

 

 

設定が間違っていないことを確認したら “ルールを追加” をクリックします。

 

 

 

Systems Manager オートメーション用のIAMロールを作成する

 

Systems Manager オートメーションが、セキュリティーグループに対して変更を行うことができるようにするためのIAMポリシーをアタッチしたIAMロールを作成します。

このIAMロールをSystems Manager にアタッチすることで、Systems Manager は先程作成したConfigルールに準拠していないセキュリティーグループのインバウンドルールを削除する権限を得ることが出来ます。

 

IAMロールにアタッチするポリシーを作成する

 

IAMに移動し”ポリシーの作成” をクリックします。

 

 

 

 

JSONタブをクリックし、以下のポリシーを貼り付け “次へ” をクリックします。

 

 

 

任意の名前をつけ “ポリシーの作成” をクリックします。

 

 

 

IAMロールを作成する

 

先ほど作成したIAMポリシーがアタッチされたIAMロールを作成します。

 

IAMで “ロールを作成” をクリックします。

 

 

“信頼されたエンティティタイプ” で “AWS のサービス” を選択し “ユースケース” で “Systems Manager” を選択して “次へ” をクリックします。

 

 

 

先ほど作成したIAMポリシーを選択し “次へ” をクリックします。

 

 

設定に間違いがなければ “ロールを作成” をクリックします。

 

 

作成したものは後ほど使うので、今作成したIAMロールのARNを控えておいてください。

 

 

 

自動修復の設定をする

 

再度Configに移動します。先ほど作成したルールを選択し “アクション” から “修復の管理” をクリックしてください。

 

 

“修復方法を選択” で “自動修復” を選択し “修復のアクションの詳細” は

“AWS-DisablePublicAccessForSecurityGroup”

を選択します。

 

 

 

“リソースIDパラメータ” に “GroupId” を選択し “AutmationAssumeRole” に先ほど控えたIAMロールのARNを入力して “変更を保存” をクリックしてください。

 

 

 

これでSSHが全開放されている場合は、自動で全開放されているSSHのみを削除する設定が完了しました。では、実際に動作の確認をしてみます。

 

 

動作確認

 

EC2に移動し、左側のタブから “セキュリティーグループ” を選択し “セキュリティーグループを作成” をクリックします

 

 

 

“ルールの追加” をクリックし”SSH” と”HTTP” を全解放(0.0.0.0/0)で作成します。HTTPについては、セキュリティーグループに登録されている全てのルールに対しての削除が行われないかの確認をするためのものです。Configが正常に動作した場合、SSHだけが削除され、HTTPは削除されないという結果になるはずです。

 

 

 

Configに移動し、先程作成したルールをクリックします。

 

 

 

“対象範囲内のリソース” を確認すると、先ほど作成したセキュリティーグループが非準拠になっていることがわかります。

 

 

 

何度かブラウザを更新すると “ステータス” の欄に “アクションが正常に実行されました” と出力されています。

 

 

その後、更に何度かブラウザを更新すると “評価結果がありません” となりました。

 

 

これでSSHの全解放のみが削除されているはずなので確認してみます。再度EC2に移動し、セキュリティーグループから先ほど作成したセキュリティーグループを確認します。

 

しっかりSSHだけが削除され、HTTPは残りました。

 

 

 

まとめ

 

以上でSSHが全開放されたセキュリティーグループのルールのみを自動で削除することができるようになりました。

これで、間違えてSSHを全開放してしまったセキュリティーグループのルールを作成してしまった場合も安心できます。

 

マルチアカウントで運用している場合、このようなセキュリティーに関する仕組みはCloudFormationなどのIaCを使ったデプロイをすることで、確実かつ楽に行うことができるので、後日CloudFormationを使った方法についても紹介する予定です。

 

 

一緒に働く仲間を募集中!

 

ギークフィードではAWSエンジニアを募集しています。

 

興味がある方はこちらからエントリーをしてぜひ一緒に働きましょう!

AWS・開発エンジニア募集

 

この記事が気に入ったら
いいね ! しよう

Twitter で
The following two tabs change content below.
櫻井
櫻井
2022年3月にギークフィードに入社。 エンジニア完全未経験からSAP・SAAを三週間で取得することが出来ました。そのためAWSに関することを中心に記事を作成する予定です。 自分が初心者だからこそわかる、エンジニア未経験の方や、エンジニアを始めたばかりの方の躓きポイントをうまく説明できるように頑張ります。

【採用情報】一緒に働く仲間を募集しています

採用情報
ページトップへ