AWS EC2 SSM×VaultでSSHポートを閉じる!EC2接続の最適解

AWS
つのまる
つのまる

まだEC2にSSHで入っていますか?実は、踏み台サーバーの管理やPEMキーの運用はもう不要です。今回は、セキュリティを最大化しつつ運用負荷を下げる『SSHレス接続』の正解を教えます!


結論:EC2接続は「SSH」から「Session Manager」へ移行すべき

現在、AWSのベストプラクティスでは、EC2への接続にSSH(ポート22)を利用しないことが推奨されています。

SSHのパスワード認証も不要です。

SSHパスワードの認証を有効にするリスクはこちら

PEMファイルによる鍵認証も不要です。

PEM管理を運用するリスクはこちら

理由は単純です。AWS Systems Manager (SSM) セッションマネージャーを利用することで、以下のメリットが得られるからです。

  • ポート22を閉鎖できる: インターネットからの攻撃リスクを遮断。
  • 鍵管理(PEM)が不要: IAM権限のみでアクセス制御が可能。
  • 踏み台サーバーが不要: コスト削減と管理工数の低減。

なぜ「SSH接続」を廃止する必要があるのか?

従来のSSH接続には、運用上の大きなリスクが潜んでいます。

リスク項目SSH接続(従来)Session Manager(推奨)
ポート開放22番を開ける必要あり完全閉鎖(0.0.0.0/0不要)
認証方式PEMキー(紛失・流出リスク)IAM(一時的な認証)
踏み台サーバー構築・運用コストが発生不要(AWSマネージド)
ログ記録誰が何をしたか追跡が困難CloudWatch等に全操作を記録

セキュリティホールとしての「22番ポート」

ポート22を開放していると、常に総当たり攻撃(Brute Force Attack)の標的になります。Session Managerを使えば、EC2がプライベートサブネットにあっても、インターネット経由で安全に操作可能です。

AWS SSM Session ManagerでSSHを不要にする

SSM接続の仕組み

SSM Session Managerは、EC2内にインストールされた「SSM Agent」がAWS APIと通信することで動作します。

  • インバウンドルールの変更: セキュリティグループで22番ポートを許可する必要はありません。
  • 認証: IAMポリシーで制御するため、個別のPEMファイル(キーペア)の配布・管理が不要になります。

設定の3ステップ

  1. IAMロールの付与: EC2インスタンスに AmazonSSMManagedInstanceCore ポリシーを持つIAMロールをアタッチ。
  2. SSM Agentの確認: 最近のAmazon Linux 2/2023なら標準インストール済み。
  3. 接続実行: マネジメントコンソール、またはAWS CLIから接続。

EC2の設定

EC2インスタンスに AmazonSSMManagedInstanceCoreをアタッチ

新規、または既存のEC2にアタッチするためのRoleにAmazonSSMManagedInstanceCoreのポリシーを追加します。今回は「EC2-Role」という名前のRoleを新規で作成しました。

EC2のインスタンス概要

EC2に接続し、ssm-agentのステータスを確認しておきましょう。

sudo systemctl status amazon-ssm-agent

フリートマネージャーにインスタンスが表示されているか確認

Roleをアタッチしてから5 ~ 10分程度待つと、System Manager -> フリートマネージャーにRoleをアタッチしたインスタンスが表示されます。これにてEC2側のセットアップは完了です。


AWS VaultでIAMアクセスキーを安全に保護する

EC2にローカル端末からSSM接続する前にAWSの認証情報をローカル端末に保持する必要があります。
SSMを利用するにはAWS CLIを使いますが、ローカルPCにアクセスキーを「プレーンテキスト」で保存されてしまいます。
例えばmacOSにAWS CLIをインストールし、IAMキーを設定すると以下のコマンドでアクセスキー、シークレットキーが平文で表示されます。

cat ~/.aws/credentials
# 出力
[default]
aws_access_key_id = xxxxxxxxxx
aws_secret_access_key = xxxxxxxxxx

このままではPCがウィルスに感染してしまったり、PCを落としてしまった場合に危険です。
そこで登場するのが AWS Vault です。

AWS Vaultとは?

PCのキーチェーン(macOS KeychainやWindows Credential Manager)にアクセスキーを暗号化して保存するツールです。

項目従来の ~/.aws/credentialsAWS Vault
保存状態生テキスト(危険)暗号化(安全)
一時認証対応なしSTSを利用した一時セッションを発行
MFA対応手動設定が面倒標準で強力にサポート

AWS CLIインストール方法

AWS CLIをインストールされていない方は以下ドキュメントを参考にインストールしてください。https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/getting-started-install.html

✅ 必要なもの
・AWS CLI本体のインストール

❌ 不要なもの
・aws configure での長期アクセスキー設定
・~/.aws/credentials にキー保存

AWS Vault が 一時的に環境変数へ認証情報を注入するため、アクセスキーの設定は不要です。

AWS Vaultインストール方法

  • macOSの場合
brew install aws-vault
  • Windows

GitHub Releases から exe をダウンロード

もしくは winget

winget install 99designs.aws-vault

AWS Vaultの使い方

まず、以下のコマンドで認証情報を登録します。
「tsunomaru」の部分は自分が分かりやすいプロファイル名にしてください。

aws-vault add tsunomaru

アクセスキー、シークレットアクセスキー、MFAの入力が求められます。
各値を入力してください。

これでAWS Vaultのセットアップは完了です!

SSM経由でEC2へ接続する

EC2にSSM経由で接続してみましょう!

以下コマンドでEC2にSSM経由で接続することができます。

aws-vault exec --region <region-name> <profile-name> -- aws ssm start-session --target <instance-id>

私の場合は以下のようになります。

aws-vault exec --region ap-northeast-1 tsunomaru -- aws ssm start-session --target i-01d83ce7bfac2d74f

無事EC2に接続することができました!


実務で利用する際の補足

操作はCloudTrailで追跡できる

操作は CloudTrail で追跡できる点を覚えておいてください。
CloudTrailでは以下のようにStartSessionやどのIAMユーザーがどのインスタンスに接続し、発信元IPアドレスまで参照できます。
仮に、IAMアクセスキーなどが漏れてしまった場合はIAMアカウントを無効化することで被害拡大を抑えることができます。
※ただし、EC2に入られた場合はバックドアの危険性があるため、アカウント無効化は被害を抑えるという観点にあることに注意してください。

SSH(22番)ポートは閉じてOK

以下のようにインバウンドルールの22番ポートは削除してOKです。
SSMを導入した以上、基本的には不要なポートになりますので削除しましょう!

まとめ:セキュアなAWS運用の第一歩を踏み出そう

22番ポートを開けっ放しにすることは、家の玄関に鍵をかけずに「見つからないだろう」と思っているのと同じです。

今すぐ取るべきアクション:

  1. EC2のセキュリティグループを見直し、22番ポートの許可を削除する。
  2. AWS Vault をインストールし、ローカルの credentials ファイルを削除する。
  3. IAMロール を適切に設定し、SSM Session Managerでの接続に切り替える。

これだけで、あなたのAWS環境のセキュリティレベルは劇的に向上します。