ちょっと話題の記事

EC2 シリアルポートアクセスが可能になりました

EC2 トラブルシュートの懐かしくて新しい手段、シリアルポートアクセスが可能になりました
2021.03.31

こんにちは。
ご機嫌いかがでしょうか。
"No human labor is no human error" が大好きな ネクストモード株式会社 の吉井です。

EC2 へのシリアルポートアクセスが開始されました。
私は Solaris 産まれ Solaris 育ちでして、きしめんケーブル片手に全国を飛び回り保守作業をしていたことが懐かしく思い出されます。

サーバーの初期セットアップや HW 障害調査時には、物理サーバー背面のシリアルポートに PC を接続し作業を行っていました。
きしめんケーブルを指した瞬間に Break が走ってマシンが一時停止する、なんていうインシデントもまれによくありました。

どのような機能なのか

EC2 インスタンスへの接続は SSH やセッションマネージャーといったネットワーク接続が基本だと思います。
ただ、ブート時にトラブルがありネットワーク接続性が失われる、iptables のルールを誤って ssh をリジェクトしてしまったなどの予期しない事象により EC2 インスタンスへ接続できなくなることがあります。

そのような場合、EBS ボリュームを別の EC2 にマウントしてファイル修正を行うことで復旧できるかもしれませんが、手間と時間を要したり二次被害を引き起こす可能性も否定できません。

そこでシリアルポートアクセスの出番です。

前提条件

シリアルポートアクセスを行うためにはいくつかの前提条件があります。

インスタンスファミリー

Nitro ベースのインスタンスファミリーが対象です。
2021年3月31日時点では以下となっています。

  • A1
  • C5、C5a、C5ad、C5d、C5n、C6g、C6gd
  • M5、M5a、M5ad、M5d、M5dn、M5n、M5zn、M6g、M6gd
  • R5、R5a、R5ad、R5d、R5dn、R5n、R6、R6gd
  • T3、T3a、T4g
  • Z1d

最新の情報は 公式ドキュメント を参照ください。

有効化

シリアルポートアクセスは無効にされています。
マネジメントコンソールから有効にするには以下の方法です。

EC2 ダッシュボード を開きます。

右側の EC2 Serial Cosole をクリックします。

EC2 Serial Cosole タブから 管理 ボタンをクリックします。

Allow にチェックを入れて Update します。

IAM ポリシー

シリアルポートアクセスを IAM ユーザー/ロールに許可します。
許可が無い IAM ユーザー/ロールではシリアルポートアクセスは使えません。
逆に言えば許可する IAM ユーザー/ロールをしっかり管理したいところです。

Configure IAM policies for EC2 Serial Console access

許可するポリシー

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowSerialConsoleAccess",
            "Effect": "Allow",
            "Action": [
                "ec2-instance-connect:SendSerialConsoleSSHPublicKey"
            ],
            "Resource": "arn:aws:ec2:リージョン:アカウントID:instance/インスタンスID"
        }
    ]
}

禁止するポリシー

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowSerialConsoleAccess",
            "Effect": "Allow",
            "Action": [
                "ec2-instance-connect:SendSerialConsoleSSHPublicKey"
            ],
            "Resource": "*"
        },
        {
            "Sid": "DenySerialConsoleAccess",
            "Effect": "Deny",
            "Action": [
                "ec2-instance-connect:SendSerialConsoleSSHPublicKey"
            ],
            "Resource": "arn:aws:ec2:リージョン:アカウントID:instance/インスタンスID"
        }
    ]
}

OS ユーザーパスワード

予め接続する EC2 インスタンスの OS ユーザーとそのパスワードが必要です。
シリアルポートに接続する際に OS ユーザーでログインしますのでパスワードを忘れないように且つ厳重に管理ください。

接続してみた

前提条件を満たすとシリアルポートアクセスが可能になります。

方法は色々ありますが、今回はマネジメントコンソールから。
接続した EC2 インスタンスにチェックを入れて アクションモニタリングとトラブルシューティングEC2シリアルコンソール をクリックします。

以下の画面で 接続 をクリックします。

ブラウザの別タブに背景が黒いターミナルが表示されます。
Enter を押すとログインプロンプトが表示されます。 予め準備したユーザーでログインしましょう。

予め準備したユーザーでログインしメンテナンス作業を行います。
ブラウザのタブを閉じるとシリアルポートからのセッションが閉じます。

再起動してみた

シリアルポートに接続したまま OS を再起動すると、再起動中のコンソール出力を確認することが可能です。
まんまシリアルポートですね!

まとめ

EC2 へのシリアルポートアクセスを試してみました。
今までよりもブート時ネットワーク異常時のトラブルシュートが楽になると思います。

ssh やセッションマネージャーに代わるものではなくあくまでトラブルシュートの手段の一つとして考えください。

参考

Troubleshoot Boot and Networking Issues with New EC2 Serial Console
EC2 Serial Console for Linux instances
EC2でシリアルポートアクセスが可能になったのでWindows Serverの緊急管理サービス(EMS)を試してみた

以上、吉井 亮 がお届けしました。