0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

EC2へのSSH接続をセキュアに行う方法メモ(EC2 Instance Connect vs Session Manager)

Last updated at Posted at 2025-11-29

はじめに

AWS EC2環境への接続方法について、従来のような「踏み台サーバー」や「常時SSHポート開放」を行わずに、セキュアに接続するサービスについて整理しました。

主に以下の2つのサービスについて、特徴と設定方法をまとめます。

  1. EC2 Instance Connect (EIC)
  2. AWS Systems Manager Session Manager (SSM)

結論:どっちを使えばいい?

それぞれの特徴を比較しました。

特徴 EC2 Instance Connect (EIC) Session Manager (SSM)
主な用途 手軽にSSHしたい、既存のSSH運用を変えたくない場合 とにかくセキュアにしたい、ログを残したい、ポートを開けたくない場合
ポート開放 (22) 必要 (接続元IP または EICサービスIPから) 不要 (インバウンド全拒否でもOK)
エージェント 必要 必要
IAM権限 接続用の一時鍵Push権限が必要 SSM操作権限が必要
プライベート接続 EIC Endpoint を使えば可能 標準で対応 (VPCエンドポイント経由含む)
ログ・監査 CloudTrail (API実行履歴のみ) CloudTrail + S3/CloudWatch Logs (操作ログ)

使い分けの指針

  • Session Manager: セキュリティ要件が厳しい、ポート22を閉塞したい、操作ログを完全に取りたい場合(推奨)。
  • EC2 Instance Connect: コストをかけず手軽に導入したい、単純なSSH接続だけで十分な場合。

1. EC2 Instance Connect (EIC)

IAMポリシーを使用して一時的なSSH公開鍵(60秒間有効)をインスタンスのメタデータにプッシュし、認証を行う方式です。

主な特徴

  • キー管理不要: 一時的な鍵を使うため、恒久的なSSH鍵ペアの管理が不要。
  • コスト: 基本機能は追加コストなし。
  • クライアント: マネージドコンソール(ブラウザ)、AWS CLI、任意のSSHクライアントが利用可能。
  • EIC Endpoint: パブリックIPを持たないインスタンスにも、EIC Endpoint経由で接続が可能(後述)。

接続までの流れ(標準的なパブリック接続)

1. EC2側の準備

まずはEC2にエージェントをインストールします。最近のAmazon Linux 2/2023やUbuntuなどのAMIであれば、デフォルトでインストールされています。
もし入っていない場合は、エージェントをインストールします。
参考: EC2 Instance Connect のセットアップ

2. IAMポリシーの設定

作業者のIAMユーザーまたはグループに、以下のポリシーをアタッチします。
Resource を絞ることで、接続可能なEC2を制限できます。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "ec2-instance-connect:SendSSHPublicKey",
            "Resource": "arn:aws:ec2:region:account-id:instance/i-xxxxxxxxx"
        }
    ]
}

※ アクションは ec2-instance-connect:SendSSHPublicKey が最低限必要です。

3. セキュリティグループの設定

接続方法によって、EC2側で許可すべきインバウンド通信(ポート22)が異なります。

接続元 / 許可するトラフィック

  • EC2コンソール (ブラウザ)
    AWSが公開している EC2 Instance Connect サービスのIP範囲 (リージョン別)

  • CLI / SSHクライアント
    自分のPCのグローバルIPアドレス

4. 接続実行

AWS CLIでの接続

以下のコマンド一発で接続できます。

# --os-user は ec2-user や ubuntu など環境に合わせて指定
aws ec2-instance-connect ssh --instance-id i-exampleId --os-user ubuntu

任意のSSHクライアントでの接続

裏側では「公開鍵の登録(API)」と「SSH接続」が行われているため、手動で分ければTera Term等でも接続可能です。

手順

  1. 鍵ペアを生成 (ssh-keygen)
  2. 公開鍵をAWSへ登録 (有効期限60秒)
  3. SSH接続
# 1. 鍵を生成
ssh-keygen -t rsa -f my_key

# 2. 生成した公開鍵をインスタンスメタデータに一時登録
aws ec2-instance-connect send-ssh-public-key     --region ap-northeast-1     --availability-zone ap-northeast-1a     --instance-id i-xxxxxxxx     --instance-os-user ubuntu     --ssh-public-key file://my_key.pub

# 3. 通常のsshコマンドで接続(60秒以内に実施)
ssh -o "IdentitiesOnly=yes" -i my_key ubuntu@<EC2-Public-IP>

ただしこちらの方法だと、ssh時のログインは CloudTrail に残らないみたいです。

EC2 Instance Connect Endpoint (EICE)

パブリックIPを持たないプライベートサブネットのEC2に対し、セキュアに接続する機能です。

  • 仕組み:
    VPC内に作成した「EIC Endpoint」を経由してインスタンスへ接続します。

  • SG設定:
    EC2側のセキュリティグループで、「EIC EndpointのセキュリティグループID」からのポート22を許可します。

  • 権限:
    ec2-instance-connect:OpenTunnel 権限が必要です。

2. SSM Session Manager

SSM AgentとTLS/WebSocketベースのセキュアな通信チャネルを通じて接続します。SSHプロトコルを使わないため、非常にセキュアです。

主な特徴

  • ポート開放不要: インバウンドポート(22など)を一切開ける必要がありません。
  • 対象範囲: EC2だけでなく、オンプレミスサーバーやVMも管理可能。
  • 監査: 操作ログを S3 や CloudWatch Logs に出力可能。

利用までの手順

1. SSM Agentの確認

Amazon Linux系やUbuntuなどの主要AMIにはプリインストールされています。
参考:https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/ssm-agent-get-version.html

2. ネットワーク要件

EC2からAWS Systems Managerのエンドポイントへ、アウトバウンドのHTTPS(443) 通信が必要です。

  • パブリックサブネットの場合:IGW経由でアクセス
  • プライベートサブネットの場合:NAT Gateway または VPCエンドポイント を利用

3. IAMロールの設定

EC2インスタンスプロファイル(IAMロール)に、適切なポリシーをアタッチします。
AmazonSSMManagedEC2InstanceDefaultPolicy の使用が推奨されています。
参考:https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/session-manager-getting-started-instance-profile.html

4. 接続実行

ブラウザのコンソール、または以下のコマンドで接続します。(CLI利用時は Session Manager Plugin のインストールが必要です)

aws ssm start-session --target i-xxxxxxxxx

ログイン時は ssm-user というユーザーになり、デフォルトでsudo権限を持っています。

Session Manager 経由での SSH / SCP

「ポート22は開けたくないが、使い慣れたSSHコマンドやSCPなどを使いたい」という場合に便利です。

設定方法

~/.ssh/config に以下を追記します。

# Linux/macOS の場合
host i-* mi-*
    ProxyCommand sh -c "aws ssm start-session --target %h --document-name AWS-StartSSHSession --parameters 'portNumber=%p'"

使い方

# SSH接続 (鍵はEC2に登録されているものを指定)
ssh -i ~/.ssh/my-key.pem ubuntu@i-xxxxxxxxx

# SCP転送
scp -i ~/.ssh/my-key.pem local-file.txt ubuntu@i-xxxxxxxxx:/home/ubuntu/

メリット

セキュリティグループでSSHポートを開ける必要がない(SSMのトンネルを通るため)。
IAM認証(SSM接続許可)と SSH鍵認証の 二要素認証 のような構成になる。

その他

料金について

両サービスとも、基本機能は無料です。ただし、付随するネットワークリソースに料金が発生する場合があります。

まとめ

  • EICは手軽に標準的なSSH接続の延長で使える。一時的な鍵配布により、鍵管理の手間を削減できる。ポート22の許可設定は必要。
  • Session Manager はポート全閉塞が可能で最もセキュア。操作ログの記録が可能。SSH/SCPのトンネリングも可能なので、実運用上の不便も少ない。

基本的には Session Manager の利用を第一候補とし、要件に応じて EIC を検討するのが良さそうです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?