📝

EC2 Instance Connect でEC2へアクセス

2024/05/01に公開

ブラウザからEC2にログインできる機能がEC2 Instance Connectになります。以下EC2は立ち上がっている前提で進めます。

手順

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

  1. EC2コンソールから左メニュー「インスタンス」→「ログインしたいEC2」をクリックします。
  2. 画面中部に「セキュリティタブ」があるのでクリックします。
  3. その中にある「セキュリティーグループ」をクリックします。
  4. 「インバウンドルールの編集」をクリックします。
  5. 今回は東京リージョンを使っている前提でIPアドレスの範囲を3.112.23.0/29に設定し「ルールを保存」をクリックします。

これでセキュリティグループが設定できました。ざっくり解説するとInstance Connectから接続するための穴を開けたという作業になります。

EC2へアクセス

  1. EC2コンソールから左メニュー「インスタンス」→「ログインしたいEC2」をクリックします。
  2. 「接続ボタン」を押します。
  3. 「EC2 Instance Connect」タブが選択されていることを確認してあとは初期設定のまま「接続ボタン」を押します。
  4. 以下のように表示されたら成功です。

エラーが出たら

要因がいくつか考えられます。

セキュリティグループの確認

セキュリティグループが正しく設定されているか確認してください。前述のIPは東京リージョンのInstance Connectが使っているIPアドレスになるのでリージョンが違う場合は設定を変えなければなりません。
下記URLから「EC2_INSTANCE_CONNECT」というキーワードを検索し、かつ使用しているリージョンのIPを探して設定してみてください。

https://ip-ranges.amazonaws.com/ip-ranges.json

AMIの確認

AMI(インスタンスの型のようなもの)にはプリインストールされていないものがあります。私もDocker用のAMIを使用した際、この問題にあたりました。

エラーメッセージ

Failed to connect to your instance
Error establishing SSH connection to your instance. Try again later.

私の環境ではterraformでしたので以下のようにインスタンスの設定をしました。


resource "aws_instance" "example" {
  ami           = "ami-059fab84a3cc4b17f"
  instance_type = "t4g.micro"

  user_data = <<-EOF
    #!/bin/bash
    # 必要なパッケージのインストール
    yum install -y ec2-instance-connect

    # sshd_configのバックアップ作成
    cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak

    # 設定の変更
    sed -i 's/^#?AllowTcpForwarding .*/AllowTcpForwarding yes/' /etc/ssh/sshd_config
    sed -i 's/^#?PubkeyAuthentication .*/PubkeyAuthentication yes/' /etc/ssh/sshd_config

    # 設定の追加
    echo "AuthorizedKeysCommand /opt/aws/bin/eic_run_authorized_keys %u %f" >> /etc/ssh/sshd_config
    echo "AuthorizedKeysCommandUser ec2-instance-connect" >> /etc/ssh/sshd_config

    # sshdの再起動
    systemctl restart sshd
  EOF

  # その他の設定...
}

上記をざっくり説明すると起動時にインスタンスコネクトをインストールしつつ、sshに必要な設定をしているという内容ですね。

SSHで接続している方の場合はログインしてEOFの間を実行すればいけると思います。

ユーザー名

OSによってデフォルトのユーザー名が違います。インスタンスコネクトの画面で入力するユーザー名も確認します。

https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/managing-users.html#ami-default-user-names

ネットワークACL

ネットワークのACLも絞っているとインスタンスコネクトの妨げになることがあるようです。

パブリックIP

インスタンスにパブリックIPアドレスがない場合接続できないようです。

ユーザー権限

AWSコンソールにログインしているユーザーに権限がないと接続できないようです。 IAMユーザー(インスタンスコネクトを使うユーザー)またはロールに、ec2-instance-connect:SendSSHPublicKeyアクションがあるか確認しましょう。

参考URL

https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/ec2-instance-connect-prerequisites.html

https://docs.aws.amazon.com/vpc/latest/userguide/aws-ip-ranges.html

https://ip-ranges.amazonaws.com/ip-ranges.json

Discussion