はじめに
前回、こちらの記事でAWS Systems Manager(以降、SSM)のSession Managerを使った、AWSマネジメントコンソールからのEC2インスタンスアクセスを紹介しました。
普段の運用では、AWSマネジメントコンソールからではなく、Tera Termなどを使ってローカル端末からアクセスしているパターンもあるかと思いますが、もちろんその方法でもアクセス可能です。
そのため、普段の運用を大きく変えずに、SSHポートを開放しないなどのセキュリティ上のメリットを得ることができます。
今回は、SSMを使ったポートフォワードによる、Tera TermでのEC2アクセス方法を紹介します。
具体的には、AWS CLIでSSMのコマンドを実行し、ポートフォワードのセッションを開始。その後Tera Termなどでアクセスする形になります。
前提
前回の記事で前提とした環境を使用します。
また、前回の記事で行ったSSM接続の設定が完了し、AWSマネジメントコンソールからEC2への接続確認ができている状態とします。
使用するローカル端末はWindows端末とし、Tera Termはインストール済みとします。
※注意事項※
今回はIAMユーザーのアクセスキーを使用しますが、現在アクセスキーの利用は一部非推奨になっているため、作成中に警告等が表示されると思います。
AWSからの推奨設定として、AWS IAM Identity Center(旧AWS SSO)の利用などが挙げられますが、IAMユーザー管理から直ぐに移行するのは難しいと思われるため、アクセスキーを使用する方法のまま紹介します。
ただし、アクセスキーの漏洩などリスクがあるため、アクセスキーのローテーションや使用しなくなったアクセスキーの無効化など、対策を取るようにしてください。
設定の流れ
- IAMユーザーの権限を追加
- IAMユーザーのアクセスキー発行
- ローカル端末(Windows)の設定
- AWS CLIインストール
- SSM Pluginインストール
- アクセスキーの設定
設定手順
IAMユーザーの権限を追加
前回の記事で作成したIAMポリシー(例:ssm-user-policy)に、ポートフォワードを行うための権限を追加します。
Action:"ssm:StartSession"
のブロックに、Resource:"arn:aws:ssm:ap-northeast-1::document/AWS-StartPortForwardingSession"
を追記してください。(~前略) { "Effect": "Allow", "Action": [ "ssm:StartSession" ], "Resource": [ "arn:aws:ec2:ap-northeast-1:<account-id>:instance/<instance-id>", "arn:aws:ssm:ap-northeast-1:<account-id>:document/SSM-SessionManagerRunShell" "arn:aws:ssm:ap-northeast-1::document/AWS-StartPortForwardingSession" ], "Condition": { "BoolIfExists": { "ssm:SessionDocumentAccessCheck": "true" } } }, (後略~)
追記後、ポリシーの変更を保存します。
IAMユーザーのアクセスキー発行
AWS CLIを使用するため、AWSマネジメントコンソールにログインし、ご自身のIAMユーザーでアクセスキーを発行します。
- AWS > IAM > ユーザー から、前回使用した接続テスト用ユーザーを選択
セキュリティ認証情報
タブから、アクセスキーを作成
を選択- ユースケース:コマンドラインインターフェイス
説明タグ値:わかりやすい名前を入力(例ではssm-port-forward-from-windows) - アクセスキーが発行されるので、コピーする
※csvファイルのダウンロードも実施
ローカル端末(Windows)の設定
次に、接続に使用するWindows端末を設定します。
- AWS CLI v2をダウンロード&インストール
https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/getting-started-install.html#getting-started-install-instructions
公式ドキュメント内のリンクからインストーラーをダウンロードし、実行
インストーラーに従い、インストールを完了してください - SSM Pluginインストール
https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/install-plugin-windows.html
公式ドキュメント内のリンクからインストーラーをダウンロードし、実行
インストーラーに従い、インストールを完了してください - アクセスキーの設定
https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/cli-authentication-user.html#cli-authentication-user-configure.title
コマンドプロンプトからaws configure
コマンドを実行し、各設定を入力
C:\Users\*********>aws configure AWS Access Key ID [None]:コピーしたアクセスキーID AWS Secret Access Key [None]:コピーしたシークレットアクセスキー Default region name [None]:ap-northeast-1 Default output format [None]:
※もし他のアクセスキーがすでに登録されている場合は、プロファイルを付けて登録します。
C:\Users\*********>aws configure --profile プロファイル名
- AWS CLI v2をダウンロード&インストール
Tera Termでの接続確認
設定が終わりましたので、接続確認を行っていきます。
ポートフォワードのコマンドでセッションを開始する
コマンドプロンプトから、AWS CLIを使ってポートフォワードのセッションを開始します。
接続するEC2のインスタンスIDが必要なため、AWSマネジメントコンソールから確認しコピーしてください。
localPortNumberはご自身の環境で使用していないポート番号を設定してください。(例では10022ポートを使用します)C:\Users\*********>aws ssm start-session --target インスタンスID --document-name AWS-StartPortForwardingSession --parameters portNumber=22,localPortNumber=10022
※アクセスキー登録時にプロファイルを使用した場合は、最後に
--profile プロファイル名
を追加してください。以下のように出力され、Waiting状態になれば完了です。
Starting session with SessionId: ユーザー名-0123456789abcdefg Port 10022 opened for sessionId ユーザー名-0123456789abcdefg. Waiting for connections...
セッションが開始されると、AWSコンソール上でセッション情報が確認できるようになります。
AWS Systems Manager > Session Manager > セッション or セッション履歴
Tera TermでEC2インスタンスに接続する
- Tera Termを起動して接続
ホスト:localhost
SSH:指定したローカルポート(例では10022)
ユーザ名:接続したいユーザ(例ではec2-user)
パスフレーズ:ユーザに設定したパスフレーズ(ec2-userの場合は無し)
RSA/DSA/ECDSA/ED25519鍵を使う:ユーザに設定した秘密鍵(ec2-userの場合はインスタンス作成時のキーペア秘密鍵)
接続に成功すると、普段使用されているような、インスタンスへ指定ユーザーでログインした表示になります。
- Tera Termを起動して接続
おわりに
前回の記事の応用として、SSM+Tera Termでの接続手順を紹介しました。
普段の運用手順を大きく変えることなく、よりセキュアなインスタンスアクセスを実現できます。
ぜひ活用してみてください。
参考
- アクセスキーの更新(公式ドキュメント) https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/id_credentials_access-keys.html#Using_RotateAccessKey
- AWS CLI の最新バージョンを使用してインストールまたは更新を行う(公式ドキュメント)
https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/getting-started-install.html - AWS CLI 用の Session Manager プラグインをインストールする(公式ドキュメント)
https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/session-manager-working-with-install-plugin.html - IAM ユーザー認証情報を使用して認証を行う(公式ドキュメント)
https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/cli-authentication-user.html