【AWS】SSHを閉じてSSMに移行した話

Posted by Akkey on 2026/02/14

ALBのコストを見直す流れの中で、まずやったのが「SSHを廃止してSSMに移行」です。

SSHポートを開放せずに、ブラウザやCLIからインスタンスへ安全にアクセスし、操作できるSSM(AWS Systems Manager )はなんとなく知っていたものの、よくわからなかったので慣れているSSHで構成してしまいました。そしてそのまま数ヶ月が経過・・・。

EC2へ直接SSH接続する運用は、IPを固定するためにElasticIPが必要でお金がかかりますし、なによりSSHを開けているということは、22番ポートがインターネットに公開されているというセキュリティリスクを含んでいます。

そこで今回は、

  • SSH(22番ポート)を閉じる
  • Systems Manager(SSM)へ移行する

という作業を行いました。

結果から言うと…めちゃくちゃ簡単。


なぜSSHをやめるのか

従来の構成はこう。

インターネット
   ↓
ALB
   ↓
EC2(SSH開放)

SSHを開けているということは、

  • 22番ポートがインターネットに公開されている
  • キーペア管理が必要
  • IP制限をしていても攻撃対象になる

という状態。

またSSH用にElasticIPが取得済みで割り当ててあります。ElasticIPは使っているいないにかかわらず、持っているだけでコスト(つまりお金)がかかります。(2026年2月現在)

だいたいの費用(チャッピー計算による)は

約 $0.005 / 時間

で、1ヶ月で計算すると・・・

0.005 × 24 × 31 ≒ $3.72 / 月

1$を152円とすると大体566円支払うことになります。


SSM(AWS Systems Manager )とは?

AWS Systems Manager の Session Manager を使うと、

  • SSH不要(=ElasticIP不要)
  • ポート開放不要
  • ブラウザからシェル接続可能
  • IAMでアクセス制御

が実現できます。つまりこうなります。

インターネット
   ↓
ALB
   ↓
EC2
   ↑
SSM(AWS内部経由)

SSMポートの解放は不要でセキュリティ的にも良くなります。I

(しかし、SSMってSystemsMangerの略なのか、SessionManagerの略なのか・・・?)


実際にやったこと

① IAMロール作成

AWSコンソールからIAMサービスに行ってロールの作成を行います。

  • 信頼されたエンティティタイプ:AWSのサービス
  • ユースケース:EC2
  • ポリシー:AmazonSSMManagedInstanceCore

注:EC2のユースケースはいろいろありますが、EC2を選んで自分でSSMのポリシーを指定します。

② EC2へロールをアタッチ

AWSコンソールからECSサービス・インスタンス でSSMを利用したいEC2インスタンスを指定し、インスタンスの概要を表示したら

アクション → セキュリティ → IAMロールを変更

で、①で作成したIAMロールを選択しIAMロールを更新します。

③ SSM Agent確認

EC2側でもSSMを受けられるか確認する必要があるので、念の為確認します。まずはSSHでサーバーにログインし、

sudo systemctl status amazon-ssm-agent

を叩きます。active (running) であればOK。Amazon標準のEC2であれば標準で稼働しており、特に問題ないとのこと。(runningじゃなかったケースはやってないので調べてね。)

④ Session Manager接続

これでもう準備は完了。早速接続してみます。

AWSコンソールからECSサービス・インスタンス でSSMを利用したいEC2インスタンスを指定し、インスタンスの概要を表示したら

接続 → SSM Session Manager

SSM エージェントのステータスのPing StatusがOnlineになっていれば準備OK。ちなみにこの設定を入れても数分はOfflineでした。Onlineになるまでちょっと待つので、設定したはずなのにOfflineっていう場合はちょっと待ちましょう。

で、Onlineになったことを確認後、接続ボタンを押せば、ブラウザにシェルが表示されます。

接続後whoamiの実行:

sh-4.2$ whoami
ssm-user

これで成功。


そしてSSHを閉じる

EC2のSecurity Groupのインバウンドルールから

  • TCP 22
  • SSH

を削除。SSHが閉じられたはずなので、SSHで接続しようとしてみてタイムアウトすればOK。

これで完了。


そしてElasticIP解放といきたいところだが・・・

たしかにSSH用に使っているElasticIPは不要で解放したいところですが、ALBを外した場合、EC2についていたこのIPアドレスをインターネット公開用のIPアドレスにしようと思うので解放はまだしません。ALBを外すことができたらALBについていたIPアドレスを解放することにします。


ここまでで何が変わったか

  • SSH廃止
  • ポート22閉鎖
  • IAMベースのアクセス制御
  • キーペア依存なし

セキュリティレベルが上がりました。


終わり

正直、もっと大変だと思っていましたが、現状はAIのサポートもあり、なんとかなるもんです。

実際は、

  • ロールを付ける
  • 数分待つ
  • ボタンを押す

だけ。関係ないボタンやらリンクの情報が多すぎてわけわからんですが、AIに聞きつつやってみれば簡単でした。最近はAIの発展でいろんな最初のハードルが下がっている気がします。AI様様ですね。


次回予告

いよいよ、

Application Load Balancer を外し、

EC2単体でHTTPS公開する構成へ移行します。(ALBはオーバースペックでした。)

次回は、ロードバランサーなしでの公開構成をまとめます。

ではまた。