7
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への接続方法(四種類)

Last updated at Posted at 2025-12-21

EC2への接続方法は四種類

今回はプライベートサブネット上に構築したAmazonLinuxのEC2の接続方法について、設定方法を確認していこうと思います。

{5DB2ECAB-E045-4E79-BEA6-90E21F38D16E}.tmp.png

コンソール上から確認できるLinuxEC2への接続方法は下記四つです。

・EC2InstanceConnect
・セッションマネージャー
・SSHクライアント
・EC2シリアルコンソール

四種類の接続方法の違いについて

特にEC2InstanceConnectとセッションマネージャーの使い分けに迷ったので、それぞれの接続方法の特徴を自分なりにまとめてみました。

EC2InstanceConnectの特徴
SessionManagerの特徴
EC2シリアルコンソールの特徴
SSHやRDPでの接続の特徴
  • Linuxの場合はTeratermなどのクライアントソフトを使用し、EC2作成時に指定したキーペアを使用して接続。
  • Windowsの場合はRDPで接続。PWはEC2作成後にコンソール上に表示されるAdministratorのパスワード。
  • 秘密鍵やパスワードの管理は必要。
  • ローカルPCから接続するため、ローカルからEC2に対して直接ファイル転送が行える。
  • EC2のSGにて、接続元IPからのSSH/RDPのインバウンド接続許可設定が必要。
  • プライベートサブネット上のEC2の場合は、踏み台サーバーの構築・設定が必要。
それぞれの接続方法の使い分けについて

それぞれの使用方法について、下記のような使い分けになるかと思います。

  • 構築中は踏み台サーバーなどを利用し、SSHやRDPでEC2に直接接続
  • 構築完了後は、EC2InstanceConnectかSSMを利用
    →コストを重視したい場合はEC2InstanceConnect、安定的に利用したいのであればSSMという住み分けになりそうです。
  • EC2InstanceConnect/SSMでの接続が行えなくなった場合に備え、EC2シリアルコンソールを設定
    →構築完了後、運用フェーズに入っても、「NWの設定変更を失敗しSSMでの接続が行えなくなってしまった」「OSのルーティング設定を変更したら通信が遮断された」といったトラブルが考えられます。そうした場合に備え、EC2シリアルコンソールは設定しておくことをお勧めします。
参考URL

■AWS Re:post

■個人の方ブログ

それぞれの設定方法について

今回はEC2InstanceConnectとEC2シリアルコンソールの設定方法について、構築しながら確認していきます。

※セッションマネージャーとSSH接続については過去記事で設定方法をご紹介したため、こちらのページでは過去記事のリンクを掲載します。

EC2Instance Connect

構成の確認

現在、環境には10.0.0.0/21のVPCを立て、パブリックサブネット(10.0.0.0/24)とプライベートサブネット(10.0.2.0/24)上にそれぞれEC2を配置しています。

パブリックサブネット上のインスタンス・プライベートサブネット上のインスタンスについて、InstanceConnectでの接続方法を確認していきます。

image.png

パブリックサブネット上のインスタンスへのEC2InstanceConnect設定

事前準備(SGへのインバウンド接続設定の追加)

パブリックサブネット上のEC2に対してInstanceConnectを行う場合は、EC2のSGやNACLに対してEC2InstanceConnectのプレフィックスリストのインバウンド接続設定を追加しておく必要があります。

AWSコンソールにログインし、EC2の一覧を表示します。
対象のインスタンスのチェックボックスにチェックをいれ、詳細画面の「セキュリティ」タブに移動し、「セキュリティグループ」のリンクを押下します。

image.png

セキュリティグループの詳細画面が表示されます。
「インバウンドルール」のタブを表示し、「インバウンドのルールを編集」を押下します。

image.png

インバウンドルールの編集画面が表示されます。

image.png

「ルールを追加」を押下し、追加された枠に下記の情報を入力します。

項目 設定値
タイプ SSH
ソース カスタム
ソースIP 入力ボックスにcom.amazonaws.<リージョン名>.ec2-instance-connectを入力し、ヒットしたプレフィックスリストを選択

※東京リージョンの場合はソースIPは「com.amazonaws.ap-northeast-1.ec2-instance-connect」と入力するとプレフィックスリストが表示されます。

image.png

情報を入力したら、「ルールを保存」を押下します。

EC2InstanceConnectのインストール

AmazonLinux2023の場合は、InstanceConnectがプリインストールされています。
インスタンスにInstanceConnectがインストールされているかどうかを確認するには、下記コマンドを実行してみてください。

rpm -qa | grep ec2-instance-connect

下記のような形で返り値が表示されれば、既にEC2InstanceConnectはインストール済の状態です。

[ec2-user@ip-10-0-0-169 ~]$ rpm -qa | grep ec2-instance-connect
ec2-instance-connect-1.1-19.amzn2023.noarch
ec2-instance-connect-selinux-1.1-19.amzn2023.noarch

下記のバージョンよりも新しいLinux系AMIを使用している場合は、EC2InstanceConnectはプリインストール済の状態となっているようです。

  • バージョン 2.0.20190618 より前の Amazon Linux 2 *
  • AL2023 最小 AMI または Amazon ECS 最適化 AMI
  • CentOS Stream 8 および 9
  • 14.2.1 より前の MacOS Sonoma、13.6.3 より前の Ventura、12.7.2 より前の Monterey *
  • Red Hat Enterprise Linux (RHEL) 8 および 9
  • Ubuntu 16.04 および 18.04

参考:EC2InstanceConnectのインストール条件

EC2InstanceConnectが存在しない場合は、ユーザーガイドに従ってインストールを行ってください。

接続確認

SGへの設定・EC2InstanceConnectのインストール確認が完了したら、AWSコンソールからInstanceConnectにてEC2に接続してみます。

EC2の一覧から接続対象のインスタンスにチェックを入れ、「接続」を押下します。

image.png

接続画面が表示されます。
「パブリックIPを使用して接続」にチェックをいれ、ユーザー名を入力し、「接続」を押下します。
※Linux系の場合は、デフォルトだと「ec2-user」を利用します。

image.png

接続できることを確認します。

{5DB2ECAB-E045-4E79-BEA6-90E21F38D16E}.tmp.png

プライベートサブネット上のインスタンスへのEC2InstanceConnect設定

エンドポイント用のセキュリティグループ作成

プライベートサブネット上のEC2に対してInstanceConnectを行う場合は、EC2InstanceConnectのエンドポイントを作成する必要があります。

エンドポイントを作成する前に、エンドポイント用のセキュリティグループの作成から行います。
EC2のサービス画面から「セキュリティグループ」を選択し、「セキュリティグループの作成」を押下します。

image.png

セキュリティグループの作成画面が表示されます。
セキュリティグループ名・セキュリティグループの説明を入力します。
VPCは、接続先EC2が存在するVPCを指定します。

ユーザーガイドの下記記載の記載によると、InstanceConnectのエンドポイントへのトラフィックはSGのインバウンドルールに関係なく許可されるようです。そのため、インバウンドルールは何も設定しなくて大丈夫です。

エンドポイントへのトラフィックは EC2 Instance Connect エンドポイントサービスから送信され、エンドポイントセキュリティグループのインバウンドルールに関係なく許可されます。

image.png

アウトバウンドルールはデフォルトの状態(0.0.0.0で許可)のままとします。
制限をかける場合は、下記のような形で設定しましょう。

  • 接続したいインスタンスのセキュリティグループのIDに対して、22番ポートを許可
  • 接続したいインスタンスがあるVPCのCIDRに対して、22番ポートを許可

アウトバウンドルールを設定し、Nameタグの設定を行ったら、「セキュリティグループを作成」を押下します。

image.png

セキュリティグループが作成できたことを確認します。

{5DB2ECAB-E045-4E79-BEA6-90E21F38D16E}.tmp.png

これで、セキュリティグループの作成が完了しました。

EC2InstanceConnectエンドポイントの作成

EC2InstanceConnectのエンドポイントを作成します。
VPCのサービス画面から、「エンドポイント」を選択し、「エンドポイントを作成」を押下します。

image.png

エンドポイントの作成画面が表示されます。
名前タグを入力しまう。「タイプ」は「EC2インスタンス接続エンドポイント」を指定します。

image.png

ネットワーク設定を行います。
VPCは、接続対象のEC2があるVPCを選択します。

「クライアントIPの保持」について、チェックを入れると、EC2InstanceConnectを使用して接続する際の接続元IPが、接続元となるクライアントPCのIPアドレスとなるようです。

今回はクライアントIPの保持のチェックを入れます。不要な場合はオフにしてください。

image.png

セキュリティグループには、先ほど作成したセキュリティグループを指定します。
サブネットは、エンドポイントを配置したいプライベートサブネットを指定します。
Nameタグの設定を入力し、「エンドポイントの作成」を押下します。

image.png

これで、エンドポイントの作成が完了します。

EC2側のセキュリティグループ変更

EC2InstanceConnectで接続が行えるよう、EC2側のセキュリティグループを変更します。
接続対象のEC2のセキュリティグループを表示し、「インバウンドルールの編集」を押下します。

image.png

インバウンドルールの編集画面が表示されます。
「ルールを追加」を押下し、追加された枠に下記の情報を入力します。

項目 設定値
タイプ SSH
ソース カスタム
ソースIP EC2InstanceConnectエンドポイントのSGを指定

image.png

EC2側のインバウンドルールについては、下記いずれかの方針で設定してください。

  • InstanceConnectエンドポイントのセキュリティグループIDを指定
    →クライアントIPの保持設定にかかわらず対応可能。
  • InstanceConnectエンドポイントを配置しているVPCのCIDR/サブネットのCIDRを指定
    →InstanceConnectエンドポイントのIPは指定したサブネットのCIDRから割り振られるため、クライアントIPの保持設定を有効化していない場合はこれでも大丈夫です。
  • InstanceConnectで接続予定のクライアントIPアドレスを許可
    →クライアントIPの保持設定を有効化している場合は、接続元PCのパブリックIPなどを許可する形でも大丈夫です。

ターゲットインスタンスセキュリティグループのルール

ルールが設定出来たら、「ルールを保存」を押下します。

EC2InstanceConnectのインストール

AmazonLinux2023の場合は、InstanceConnectがプリインストールされています。
インスタンスにInstanceConnectがインストールされているかどうかを確認するには、下記コマンドを実行してみてください。

rpm -qa | grep ec2-instance-connect

下記のような形で返り値が表示されれば、既にEC2InstanceConnectはインストール済の状態です。

[ec2-user@ip-10-0-0-169 ~]$ rpm -qa | grep ec2-instance-connect
ec2-instance-connect-1.1-19.amzn2023.noarch
ec2-instance-connect-selinux-1.1-19.amzn2023.noarch

※詳細は前項をご確認ください。

接続確認

SGへの設定・EC2InstanceConnectエンドポイントの作成・EC2InstanceConnectのインストール確認が完了したら、AWSコンソールからInstanceConnectにてEC2に接続してみます。
EC2の一覧から接続対象のインスタンスにチェックを入れ、「接続」を押下します。

image.png

接続画面が表示されます。
「プライベートIPを使用して接続」を選択します。
先程作成したEC2InstanceConnectエンドポイントを指定し、「接続」を押下します。

image.png

接続が行えることを確認します。

{5DB2ECAB-E045-4E79-BEA6-90E21F38D16E}.tmp.png

セッションマネージャー

セッションマネージャーでの設定方法はすでに過去記事でご紹介しているため、今回は概要を記載します。
下記のような設定を行うことで、SSM接続が可能となります。

  • (EC2がプライベートサブネット上にある場合)VPCエンドポイントの作成
    下記エンドポイントを作成
    ・ssm.region.amazonaws.com
    ・ssmmessages.region.amazonaws.com
  • EC2が存在するVPCでのDNSホスト名・DNS名前解決有効化
  • EC2からSSMエンドポイントへの名前解決が行える状態にしておく
    →DHCPオプションセットのネームサーバーをAmazonProvidedDNSやVPCPrivateHostedZoneのVPCエンドポイントIPにするか、VPC上からインターネットへの名前解決を行えるようにしておく。
  • EC2に対するIAMロール設定を行う
    →「AmazonSSMManagedInstanceCore」権限の付与

詳細は下記記事をご参照ください。

CloudWatchAgentをインストールしてサーバーの監視を行う①(VPCエンドポイント作成)
CloudWatchAgentをインストールしてサーバーの監視を行う②(EC2への権限追加・SSMによるEC2への接続)

SSHクライアント

SSHクライアントでの接続についても過去記事でご紹介しているため、今回は概要を記載します。
下記のような設定を行うことで、SSHクライアントでの接続が可能となります。

  • EC2のSGへのインバウンド接続許可設定
    →接続元のパブリックIPや踏み台サーバーからのSSH接続を許可
  • (EC2がプライベートサブネット上にある場合)踏み台サーバーの作成
  • 接続にはEC2作成時に指定したキーペアを使用

詳細は下記記事をご参照ください。

AWSのパブリックサブネットに踏み台サーバーを構築し、プライベートサブネットのサーバーへSSHする②(踏み台Linuxサーバー構築)
AWSのパブリックサブネットに踏み台サーバーを構築し、プライベートサブネットのサーバーへSSHする③(踏み台経由のSSH接続)

EC2シリアルコンソール

EC2シリアルコンソールは、利用できないインスタンスタイプがある(Nitro世代インスタンスと一部のベアメタルインスタンスでのみ使用可能)点にご注意ください。
EC2シリアルコンソールは、SGの許可設定やEC2に対するIAMロール設定を行わなくても使用可能です。
パブリックサブネット・プライベートサブネットどちらのEC2からも利用することが可能です。
ただし、事前に下記設定が必要となります。

  • EC2管理画面からのシリアルコンソール接続有効化
  • シリアルコンソール接続用のOSユーザーの作成

事前準備:EC2シリアルコンソール有効化

EC2シリアルコンソールの有効化設定を行います。
EC2のサービス画面から「管理」を選択します。
管理画面が表示されたら、「EC2シリアルコンソール」タブを表示し、「管理」を押下します。

image.png

管理画面が表示されます。
「許可」のチェックボックスにチェックをいれ、「更新」を押下します。

image.png

シリアルコンソール接続の許可設定が有効化されたことを確認します。

image.png

事前準備:接続用のユーザーを作成する

EC2シリアルコンソールを利用する場合は、OS側にシリアルコンソール用のユーザーを作成しておく必要があります。
SSmやInstanceConnect・クライアントからのSSH接続が行えない緊急時に使用することを考慮し、root権限のあるユーザーを作成しておきます。
EC2にログイン後、下記コマンドを実行していきます。

ユーザー追加

今回は「serial-user」というユーザーを作成しています。

sudo adduser serial-user

ユーザーが追加されたことを確認します。

sudo cat /etc/passwd

下記のような形でユーザー名が表示されたら作成成功です。

root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:65534:65534:Kernel Overflow User:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/usr/sbin/nologin
systemd-oom:x:999:999:systemd Userspace OOM Killer:/:/usr/sbin/nologin
systemd-resolve:x:193:193:systemd Resolver:/:/usr/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/usr/share/empty.sshd:/sbin/nologin
rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
libstoragemgmt:x:997:997:daemon account for libstoragemgmt:/:/usr/sbin/nologin
systemd-coredump:x:996:996:systemd Core Dumper:/:/usr/sbin/nologin
systemd-timesync:x:995:995:systemd Time Synchronization:/:/usr/sbin/nologin
chrony:x:994:994:chrony system user:/var/lib/chrony:/sbin/nologin
ec2-instance-connect:x:993:993::/home/ec2-instance-connect:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
ec2-user:x:1000:1000:EC2 Default User:/home/ec2-user:/bin/bash
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
ssm-user:x:1001:1001::/home/ssm-user:/bin/bash
serial-user:x:1002:1002::/home/serial-user:/bin/bash
パスワード変更

「serial-user」のパスワードを変更しておきます。

sudo passwd serial-user

パスワード入力を求められるので、パスワードを入力します。

Changing password for user serial-user.
New password: 
BAD PASSWORD: The password fails the dictionary check - it does not contain enough DIFFERENT characters
Retype new password: 
passwd: all authentication tokens updated successfully.
ユーザーをwheelグループへ追加

sudoコマンドが実行できるよう、serial-userをwheelグループへ追加しておきます。

sudo usermod -aG wheel serial-user

下記コマンドを実行し、ユーザーが追加されたことを確認します。

sudo getent group wheel

下記のような形で表示されたらOKです。

wheel:x:10:ec2-user,serial-user
sudoコマンドをパスワード入力無しで使えるようにユーザーを設定する

serial-userがsudoコマンド実行時に、都度パスワード入力を求められないようにしておきます。
sudoers.dにserial-userの設定ファイルを作成します。

sudo touch /etc/sudoers.d/serial-user

設定ファイルが作成されたことを確認します。

sudo ls -la /etc/sudoers.d/

下記のように表示されたらOKです。

total 28
drwxr-x---.  2 root root    75 Dec 18 04:05 .
drwxr-xr-x. 77 root root 16384 Dec 18 03:56 ..
-r--r-----.  1 root root   128 Dec 10  2024 90-cloud-init-users
-rw-r--r--.  1 root root    35 Dec 18 04:05 serial-user
-r--r-----.  1 root root    58 Jul 22 02:22 ssm-agent-users

設定ファイルを編集します。

sudo vi /etc/sudoers.d/serial-user

下記のように追記します。

serial-user ALL=(ALL) NOPASSWD:ALL
ユーザーの動作確認

ユーザーを切り替え、sudoコマンドが実行できることを確認します。

su serial-user

PWなしで実行できることを確認します。

sudo ls -la /etc/sudoers.d/

これで、OSユーザーの作成が完了しました。

シリアルコンソールでの接続確認

シリアルコンソールの有効化・OSユーザーの作成が完了したら、シリアルコンソールでの接続が行えるようになります。

EC2の一覧から接続対象のインスタンスにチェックを入れ、「接続」を押下します。

image.png

「EC2シリアルコンソール」のタブを表示し、「接続」を押下します。

image.png

最初は真っ黒な画面が表示されます。エンターキーを押下すると、パスワード入力を求められます。
正しいパスを入力しログインが完了すると、コマンドが実行できるようになります。

image.png

これで、今回ご紹介する手順は以上となります。ここまでお読みいただきありがとうございました。

7
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
7
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?