EC2インスタンスにWindowsとMacからセッションマネージャーを利用して接続してみた

2020.12.25

こんにちは!DA(データアナリティクス)事業本部 インテグレーション部の大高です。

AWS Systems Mangerのセッションマネージャーを利用すると、SSHではなくAWS CLI経由でEC2インスタンスに接続することができます。

今回、Windows、MacからEC2インスタンスに接続をする機会があったので、AWS CLIのインストール・設定からEC2へ接続をするまでを、本エントリでまとめたいと思います。

前提

前提として、EC2インスタンス側のセットアップは完了しており、本エントリではクライアント側から接続するための方法について記載します。

また、試した環境はそれぞれ以下の通りとなります。

  • Windows
    • Windows 10 Pro (64bit)
  • Mac
    • macOS Catalina (64bit)

Windows編

では、まずはWindowsからです。

AWS CLI v2のインストール

接続にはAWS CLIが必要となるので、ドキュメントの通りインストールを行います。なお、今回は最新のAWS CLI v2をインストールします。

インストールは以下から最新版のインストーラをダウンロードして、インストールを行います。

https://awscli.amazonaws.com/AWSCLIV2.msi

インストーラを実行するだけなので、特にこちらは問題ないかと思います。インストールが完了したらPowerShellで以下のコマンドを実行して確認してみます。

> aws --version
aws-cli/2.1.14 Python/3.7.9 Windows/10 exe/AMD64 prompt/off

問題なくインストールされました。

Session Manager plugin のインストール

AWS CLIのインストールは完了しましたが、AWS CLIを利用して接続するには追加で「Session Manager plugin」をインストールする必要があります。続けて、今度はこちらをインストールします。

インストールは以下から最新版のインストーラをダウンロードして、インストールを行います。

https://s3.amazonaws.com/session-manager-downloads/plugin/latest/windows/SessionManagerPluginSetup.exe

こちらもインストーラを実行するだけなので、特にこちらは問題ないかと思います。インストールが完了したらPowerShellで以下のコマンドを実行して確認してみます。なお、PowerShellを立ち上げたままの場合はインストールされたことが認識されずにエラーとなるので、PowerShellを立ち上げ直してから実行します。

> session-manager-plugin                                                                      
The Session Manager plugin was installed successfully. Use the AWS CLI to start a session.

上記のように表示されれば問題ありません。これでインストールは完了です。

AWS CLIの設定

最後に、AWS CLIの設定を行います。今回はIAMユーザのアクセスキーが発行されていることを前提として、PowerShellで以下のようにaws configureコマンドを利用して設定を行います。

> aws configure
AWS Access Key ID [None]: AKIXXXXXXXXXXXXXXXXX
AWS Secret Access Key [None]: KO8XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Default region name [None]: ap-northeast-1
Default output format [None]: json

これで設定は完了です。なお、デフォルトプロファイルではなく、名前付きプロファイル(ここではssmとします)として定義する場合には、%HOMEPATH%\.awsフォルダ配下にあるconfigファイルとcredentialファイルを、それぞれ以下のように記載して設定します。

config

[default]
region = ap-northeast-1
output = json

[profile ssm]
region = ap-northeast-1
output = json

credentials

[default]
aws_access_key_id = AKIXXXXXXXXXXXXXXXXX
aws_secret_access_key = KO8XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

[ssm]
aws_access_key_id = AKIXXXXXXXXXXXXXXXXX
aws_secret_access_key = KO8XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

接続確認

設定が完了したら、PowerShellで接続を試してみます。接続時には--targetの引数として、対象のEC2インスタンスのインスタンスID(i-XXXXXXXXXXXXXXXXX)を指定します。

なおWindows環境では、標準設定の場合にターミナルのコードページが932 (Shift-JIS)となっているかと思います。そのため、日本語の文字化けを避けるためchcpコマンドで65001 (UTF-8)に変更してからPowerShellで接続しています。

> chcp 65001
Active code page: 65001
> aws ssm start-session --target i-XXXXXXXXXXXXXXXXX

Starting session with SessionId: foobar-XXXXXXXXXXXXXXXXX
sh-4.2$

無事に接続できました!なお、切断にするにはexitコマンドで切断します。

名前付きプロファイルを指定する場合には、同様に以下のように--profile [プロファイル名]というオプションを指定して接続します。

> chcp 65001
Active code page: 65001
> aws ssm start-session --target i-XXXXXXXXXXXXXXXXX --profile ssm

Starting session with SessionId: foobar-XXXXXXXXXXXXXXXXX
sh-4.2$

こちらも問題ありませんね。以上、Windows編でした。

Mac編

引き続き、Mac編です。流れはほとんどWindows編と同じとなります。

AWS CLI v2のインストール

接続にはAWS CLIが必要となるので、ドキュメントの通りインストールを行います。なお、今回は最新のAWS CLI v2をインストールします。

インストールは以下から最新版のインストーラをダウンロードして、インストールを行います。

https://awscli.amazonaws.com/AWSCLIV2.pkg

インストーラを実行するだけなので、特にこちらは問題ないかと思います。インストールが完了したらターミナルで以下のコマンドを実行して確認してみます。

$ aws --version
aws-cli/2.1.14 Python/3.7.4 Darwin/19.6.0 exe/x86_64 prompt/off

問題なくインストールされました。

Session Manager plugin のインストール

AWS CLIのインストールは完了しましたが、AWS CLIを利用して接続するには追加で「Session Manager plugin」をインストールする必要があります。続けて、今度はこちらをインストールします。

インストールは以下のようにターミナルから最新版のインストーラをダウンロードして、インストールを行います。

$ cd /tmp
$ curl "https://s3.amazonaws.com/session-manager-downloads/plugin/latest/mac/sessionmanager-bundle.zip" -o "sessionmanager-bundle.zip"
$ unzip sessionmanager-bundle.zip
$ sudo ./sessionmanager-bundle/install -i /usr/local/sessionmanagerplugin -b /usr/local/bin/session-manager-plugin

インストールが完了したら以下のコマンドを実行して確認してみます。

$ session-manager-plugin

The Session Manager plugin was installed successfully. Use the AWS CLI to start a session.

上記のように表示されれば問題ありません。これでインストールは完了です。

AWS CLIの設定

最後に、AWS CLIの設定を行います。今回はIAMユーザのアクセスキーが発行されていることを前提として、ターミナルで以下のようにaws configureコマンドを利用して設定を行います。

$ aws configure
AWS Access Key ID [None]: AKIXXXXXXXXXXXXXXXXX
AWS Secret Access Key [None]: KO8XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Default region name [None]: ap-northeast-1
Default output format [None]: json

これで設定は完了です。なお、デフォルトプロファイルではなく、名前付きプロファイル(ここではssmとします)として定義する場合には、~\.awsフォルダ配下にあるconfigファイルとcredentialファイルを、それぞれ以下のように記載して設定します。

config

[default]
region = ap-northeast-1
output = json

[profile ssm]
region = ap-northeast-1
output = json

credentials

[default]
aws_access_key_id = AKIXXXXXXXXXXXXXXXXX
aws_secret_access_key = KO8XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

[ssm]
aws_access_key_id = AKIXXXXXXXXXXXXXXXXX
aws_secret_access_key = KO8XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

接続確認

設定が完了したら、ターミナルで接続を試してみます。接続時には--targetの引数として、対象のEC2インスタンスのインスタンスID(i-XXXXXXXXXXXXXXXXX)を指定します。

$ aws ssm start-session --target i-XXXXXXXXXXXXXXXXX

Starting session with SessionId: foobar-XXXXXXXXXXXXXXXXX
sh-4.2$

無事に接続できました!なお、切断にするにはexitコマンドで切断します。

名前付きプロファイルを指定する場合には、同様に以下のように--profile [プロファイル名]というオプションを指定して接続します。

$ aws ssm start-session --target i-XXXXXXXXXXXXXXXXX --profile ssm

Starting session with SessionId: foobar-XXXXXXXXXXXXXXXXX
sh-4.2$

こちらも問題ありませんね。以上、Mac編でした。

まとめ

以上、EC2インスタンスにWindowsとMacからセッションマネージャーを利用して接続してみました。

どなたかのお役に立てば幸いです。それでは!

参考