[アップデート] Amazon EC2 Instance ConnectがRHELやCentOS StreamなどのOSをサポートしました
RHELのEC2インスタンスにEC2 Instance Connectで接続したい
こんにちは、のんピ(@non____97)です。
皆さんはRHELのEC2インスタンスにEC2 Instance Connectで接続したいと思ったことはありますか? 私はあります。
EC2 Instance Connectを用いることで、パスワードや鍵を用意しなくとも簡単にアクセスすることが可能です。
ただし、EC2 Instance Connectで接続できるOSはAmazon LinuxとUbuntuと限られたOSのみでした。
今回、アップデートによりEC2 Instance ConnectがRHELやCentOS Stream、macOSをサポートするようになりました。
実際に触ってみたので紹介します。
いきなりまとめ
- 以下OSが新たにEC2 Instance Connectをサポート
- CentOS Stream 8, 9
- macOS Sonoma, Ventura, and Monterey
- Red Hat Enterprise Linux (RHEL) 8, 9
- ただし、上述のOSのAMIにはEC2 Instance Connectで接続するための設定は組み込まれていない
- AMIにプリインストールされているOSは以下のとおり
- Amazon Linux 2023
- Amazon Linux 2 2.0.20190618 or later
- Ubuntu 20.04 or later
- EC2 Instance Connectで接続するために、EC2 Instance Connect用のパッケージをインストールする必要がある
- RHEL、CentOS Streamでインストールするパッケージは us-west-2 のS3バケットでのみ公開されている
- us-west-2 以外のリージョンではS3のGateway型VPC Endpoint経由では取得できないので注意
対応OSの確認
AWS公式ドキュメントを確認して、具体的にどのOSをサポートしているのか確認します。
Launch the instance with one of the following supported AMIs:
Amazon Linux 2 prior to version 2.0.20190618
CentOS Stream 8 or 9
macOS Sonoma, Ventura, and Monterey
Red Hat Enterprise Linux (RHEL) 8 or 9
Ubuntu 16.04 and 18.04If your instance was launched with a later version of Amazon Linux 2 or Ubuntu, it comes preinstalled with EC2 Instance Connect and you can skip this procedure.
Install EC2 Instance Connect on your EC2 instances - Amazon Elastic Compute Cloud
以下OSが新規でサポートされていそうです
- CentOS Stream 8, 9
- macOS Sonoma, Ventura, and Monterey
- Red Hat Enterprise Linux (RHEL) 8, 9
また、先述のAWS公式ドキュメントに記載のとおり、追加サポートされたOSのAMIにはEC2 Instance Connectの設定はプリインストールされていないようです。
やってみた
RHELにEC2 Instance Connectの設定を行う
実際に試してみます。
まず、OSに対してEC2 Instance Connectの設定を行います。以下AWS公式ドキュメントにOS毎の設定手順があるので、そちらを参考に行います。
今回はRHEL 9.2のEC2インスタンスで試します。
- AMI名 : RHEL-9.2.0_HVM-20230503-x86_64-41-Hourly2-GP2
- AMI ID : ami-026ebd4cfe2c043b2
EC2 Instance Connectのパッケージをダウンロードします。
$ mkdir /tmp/ec2-instance-connect
$ curl https://amazon-ec2-instance-connect-us-west-2.s3.us-west-2.amazonaws.com/latest/linux_amd64/ec2-instance-connect.rpm \
-o /tmp/ec2-instance-connect/ec2-instance-connect.rpm
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 3883k 100 3883k 0 0 3766k 0 0:00:01 0:00:01 --:--:-- 3766k
$ curl https://amazon-ec2-instance-connect-us-west-2.s3.us-west-2.amazonaws.com/latest/linux_amd64/ec2-instance-connect-selinux.noarch.rpm \
-o /tmp/ec2-instance-connect/ec2-instance-connect-selinux.rpm
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 6040 100 6040 0 0 18875 0 --:--:-- --:--:-- --:--:-- 18875
コマンドから分かるように、S3バケット上に置かれているようです。
us-west-2以外のリージョンのS3バケットもあるかと思い確認してみましたが、us-west-2以外はなさそうです。
$ curl https://amazon-ec2-instance-connect-us-east-1.s3.us-east-1.amazonaws.com/latest/linux_amd64/ec2-instance-connect.rpm -I
HTTP/1.1 404 Not Found
x-amz-request-id: 1VR9227VKTDWB6SB
x-amz-id-2: drWILVG7Gonq/MjySFaNmG0HKpZGoG3wg93Z7FnDMNIMkE3GjNCdvWD+goDaDu8/hFeHhyVSxkc=
Content-Type: application/xml
Date: Thu, 07 Dec 2023 04:50:58 GMT
Server: AmazonS3
プライベートサブネット上のEC2インスタンスからダウンロードしたい場合、us-west-2 以外のリージョンではS3のGateway型VPC Endpoint経由では取得できないので注意が必要ですね。
ダウンロードしたRPMパッケージをインストールします。
$ sudo yum install -y \
/tmp/ec2-instance-connect/ec2-instance-connect.rpm \
/tmp/ec2-instance-connect/ec2-instance-connect-selinux.rpm
Red Hat Enterprise Linux 9 for x86_64 - AppStream from RHUI (RPMs) 41 kB/s | 4.5 kB 00:00
Red Hat Enterprise Linux 9 for x86_64 - AppStream from RHUI (RPMs) 28 MB/s | 27 MB 00:00
Red Hat Enterprise Linux 9 for x86_64 - BaseOS from RHUI (RPMs) 85 kB/s | 4.1 kB 00:00
Red Hat Enterprise Linux 9 for x86_64 - BaseOS from RHUI (RPMs) 40 MB/s | 15 MB 00:00
Red Hat Enterprise Linux 9 Client Configuration 43 kB/s | 2.0 kB 00:00
Dependencies resolved.
============================================================================================================================================
Package Architecture Version Repository Size
============================================================================================================================================
Installing:
ec2-instance-connect x86_64 2.0.0-1.rhel9 @commandline 3.8 M
ec2-instance-connect-selinux noarch 2.0.0-1 @commandline 5.9 k
Transaction Summary
============================================================================================================================================
Install 2 Packages
Total size: 3.8 M
Installed size: 7.6 M
Downloading Packages:
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
Preparing : 1/1
Running scriptlet: ec2-instance-connect-selinux-2.0.0-1.noarch 1/2
Installing : ec2-instance-connect-selinux-2.0.0-1.noarch 1/2
Running scriptlet: ec2-instance-connect-selinux-2.0.0-1.noarch 1/2
Running scriptlet: ec2-instance-connect-2.0.0-1.rhel9.x86_64 2/2
Installing : ec2-instance-connect-2.0.0-1.rhel9.x86_64 2/2
Running scriptlet: ec2-instance-connect-2.0.0-1.rhel9.x86_64 2/2
Running scriptlet: ec2-instance-connect-selinux-2.0.0-1.noarch 2/2
skipping the directory /sys
skipping the directory /proc
skipping the directory /mnt
skipping the directory /var/tmp
skipping the directory /home
skipping the directory /root
skipping the directory /tmp
Verifying : ec2-instance-connect-2.0.0-1.rhel9.x86_64 1/2
Verifying : ec2-instance-connect-selinux-2.0.0-1.noarch 2/2
Installed products updated.
Installed:
ec2-instance-connect-2.0.0-1.rhel9.x86_64 ec2-instance-connect-selinux-2.0.0-1.noarch
Complete!
インストール後、eic_run_authorized_keys
というバイナリファイルがあることと、AuthorizedKeysCommand
で公開鍵を探索するようになっていることを確認します。
$ ls -l /opt/aws/bin/
total 7756
-rwxr-xr-x. 1 root root 7941486 Dec 5 20:36 eic_run_authorized_keys
$ sudo cat /etc/ssh/sshd_config.d/60-ec2-instance-connect.conf
AuthorizedKeysCommand /opt/aws/bin/eic_run_authorized_keys %u %f
AuthorizedKeysCommandUser ec2-instance-connect
動作確認
動作確認です。
マネジメントコンソールからEC2 Instance Connect Endpointを介して接続してみます。
問題なく接続できました。
プロセスツリーを確認してみると、内部でSSHを使っていることがよく分かります。
$ pstree -ulpc
systemd(1)─┬─NetworkManager(643)─┬─{NetworkManager}(644)
│ └─{NetworkManager}(645)
├─agetty(959)
├─agetty(960)
├─amazon-ssm-agen(1819)─┬─ssm-agent-worke(1929)─┬─ssm-session-wor(1990)─┬─sh(2004,ec2-user)───bash(2005)
│ │ │ ├─{ssm-session-wor}(1991)
│ │ │ ├─{ssm-session-wor}(1992)
│ │ │ ├─{ssm-session-wor}(1993)
│ │ │ ├─{ssm-session-wor}(1994)
│ │ │ ├─{ssm-session-wor}(1995)
│ │ │ ├─{ssm-session-wor}(1996)
│ │ │ ├─{ssm-session-wor}(1997)
│ │ │ ├─{ssm-session-wor}(1998)
│ │ │ └─{ssm-session-wor}(1999)
│ │ ├─ssm-session-wor(2548)─┬─sh(2561,ec2-user)───bash(2562)
│ │ │ ├─{ssm-session-wor}(2550)
│ │ │ ├─{ssm-session-wor}(2551)
│ │ │ ├─{ssm-session-wor}(2552)
│ │ │ ├─{ssm-session-wor}(2553)
│ │ │ ├─{ssm-session-wor}(2554)
│ │ │ ├─{ssm-session-wor}(2555)
│ │ │ ├─{ssm-session-wor}(2556)
│ │ │ └─{ssm-session-wor}(2582)
│ │ ├─{ssm-agent-worke}(1930)
│ │ ├─{ssm-agent-worke}(1931)
│ │ ├─{ssm-agent-worke}(1932)
│ │ ├─{ssm-agent-worke}(1933)
│ │ ├─{ssm-agent-worke}(1934)
│ │ ├─{ssm-agent-worke}(1935)
│ │ ├─{ssm-agent-worke}(1961)
│ │ ├─{ssm-agent-worke}(1964)
│ │ ├─{ssm-agent-worke}(1965)
│ │ ├─{ssm-agent-worke}(1966)
│ │ ├─{ssm-agent-worke}(1967)
│ │ ├─{ssm-agent-worke}(2549)
│ │ └─{ssm-agent-worke}(2612)
│ ├─{amazon-ssm-agen}(1820)
│ ├─{amazon-ssm-agen}(1821)
│ ├─{amazon-ssm-agen}(1822)
│ ├─{amazon-ssm-agen}(1823)
│ ├─{amazon-ssm-agen}(1825)
│ ├─{amazon-ssm-agen}(1826)
│ ├─{amazon-ssm-agen}(1927)
│ └─{amazon-ssm-agen}(2583)
├─auditd(574)───{auditd}(575)
├─chronyd(618,chrony)
├─crond(958)
├─dbus-broker-lau(600,dbus)───dbus-broker(606)
├─gssproxy(657)─┬─{gssproxy}(659)
│ ├─{gssproxy}(660)
│ ├─{gssproxy}(661)
│ ├─{gssproxy}(662)
│ └─{gssproxy}(663)
├─irqbalance(609)───{irqbalance}(612)
├─polkitd(898,polkitd)─┬─{polkitd}(911)
│ ├─{polkitd}(912)
│ ├─{polkitd}(913)
│ ├─{polkitd}(914)
│ └─{polkitd}(917)
├─rhsmcertd(651)───{rhsmcertd}(653)
├─rpcbind(571,rpc)
├─rsyslogd(610)─┬─{rsyslogd}(615)
│ └─{rsyslogd}(616)
├─sshd(2107)───sshd(2628)───sshd(2652,ec2-user)───bash(2653)───pstree(2700)
├─systemd(2642,ec2-user)───(sd-pam)(2644)
├─systemd-journal(500)
├─systemd-logind(611)
├─systemd-udevd(513)
└─tuned(652)─┬─{tuned}(899)
├─{tuned}(903)
└─{tuned}(905)
プライベートサブネットのEC2インスタンスにできるだけコストをかけずに接続したい場合に
Amazon EC2 Instance ConnectがRHELやCentOS StreamなどのOSをサポートしたアップデートを紹介しました。
NAT Gateway経由でインターネットに出ることを許容できない環境において、プライベートサブネットのEC2インスタンスにできるだけコストをかけずに接続したい場合に役立ちそうですね。
ただし、追加サポートされたOSにEC2 Instance Connectに接続する際は、いずれもパッケージのインストールが必要なのがネックです。
RHELとCentOS Streamについては個別のRPMパッケージが配布されているため対応は楽そうです。
RPMパッケージを自アカウントのS3バケットに配置しておいて、ユーザーデータでS3バケット上のRPMパッケージのダウンロード→設定といった形もできるのではないでしょうか。
この記事が誰かの助けになれば幸いです。
以上、AWS事業本部 コンサルティング部の のんピ(@non____97)でした!