PCからAWS Systems Manager 経由で SSH トンネルを使用してプライベート VPCのEC2へログイン
参考URL AWS Systems Manager 経由で SSH トンネルを使用してプライベート VPC リソースにアクセスしたいと考えています。どうすればよいですか?
前提条件
- ローカルマシンの Session Manager プラグイン v1.1.23 以降が導入済み。
- ローカルマシンの AWS コマンドラインインターフェイス (CLI) v1.16.12 以降が導入済み。
- (オプション)jqコマンドが使えると便利です。
Windowsでjqコマンドをインストールしてコマンドプロンプトで使う方法。その他OSへのインストール方法まとめ。
事前準備 AWS SSOログインのURL (ex) https://d-XXXXXXXX.awsapps.com/start
AWS CLI 導入ガイド macOS での AWS CLI バージョン 2 のインストール、更新、アンインストール Windows での AWS CLI バージョン 2 のインストール、更新、アンインストール
Session Managerプラグイン導入ガイド (オプション) AWS CLI 用の Session Manager plugin をインストールする
SSO ユーザで ローカルPC AWS CLI 実行手順 (任意のTerminalSoftを使用ください。WindowsはPowerShellまたは、Windows Terminalで使用可能です)
以下手順はWindows Treminal(PowerShell)の例となります。基本的にはMac、WSLのTerminalも同様です。
1. AWS シングルサインオン を使用するための AWS CLI の設定
# AWS SSO を使用するための名前付きプロファイルの設定 PS C:> aws --version aws-cli/2.0.61 Python/3.7.7 Windows/10 exe/AMD64 PS C:> aws configure sso SSO start URL [None]: https://d-95671852ef.awsapps.com/start SSO Region [None]: ap-northeast-1 Attempting to automatically open the SSO authorization page in your default browser. If the browser does not open or you wish to use a different device to authorize this request, open the following URL: https://device.sso.ap-northeast-1.amazonaws.com/ Then enter the code: XXXX-WWWW There are 6 AWS accounts available to you. : :
SSO画面に登録されているAWSアカウントがリストされます。ログインしたいAWSアカウントを選択します。
ブラウザが起動し、「Sing into AWS CLI」ボタンをクリックします。
SSOログイン画面が表示されます。ログインします。
Treminalに戻ります。
## Profileを設定します。profile name は任意です。 Using the account ID 682167675618 The only role available to you is: AdministratorAccess Using the role name "AdministratorAccess" CLI default client Region [None]: ap-northeast-1 CLI default output format [None]: json CLI profile name [AdministratorAccess-682167675618]: poc To use this profile, specify the profile name using --profile, as shown: aws s3 ls --profile poc PS C:> ## AWS CLI 確認 (S3 backet 一覧表示) PS C:> aws s3 ls --profile poc 2020-10-30 15:44:29 XXXXXX1 2020-09-10 11:22:23 XXXXXX2 2020-10-28 21:34:29 XXXXXX3 2020-11-02 21:52:42 XXXXXX4 2020-10-30 15:53:02 imageXXXXXXXX 2020-10-23 23:40:06 imageXXXXYYYY 2020-10-23 09:53:50 imageYYYYYYYY 2020-10-24 13:11:18 imageXXXXXXXX 2020-10-27 15:28:30 imageZZZZZZZZ PS C:> ## ローカルPCでIAM権限に応じたAWS CLI(--profile 付与)を実行することが可能です。
2. SSMセッションマネージャー経由でのEC2ログイン手順
参考 ステップ 8: (オプション) Session Manager を通して SSH 接続を有効にする
「.ssh/config」 の設定例
# SSH over Session Manager host i-* mi-* ProxyCommand sh -c "aws ssm start-session --profile ${profile} --target %h --document-name AWS-StartSSHSession --parameters 'portNumber=%p'"
AWS CLIでEC2インスタンスのinstance-id取得
## Instance-ID 取得 $ aws ec2 describe-instances --profile poc | jq '.Reservations[].Instances[] | {InstanceId, InstanceName: (.Tags[] | select(.K ey=="Name").Value)}' : { "InstanceId": "i-015XXXXXXXXXXXX", "InstanceName": "CentOS" } : ## インスタンス起動確認 $ aws ec2 describe-instance-status --instance-ids i-015XXXXXXXXXXXX --profile poc| jq '.InstanceStatuses[] | {InstanceId, In stanceState: .InstanceState.Name, SystemStatus: .SystemStatus.Status, InstanceStatus: .InstanceStatus.Status}' { "InstanceId": "i-015XXXXXXXXXXXX", "InstanceState": "running", "SystemStatus": "ok", "InstanceStatus": "ok" }
EC2(CentOS7)へssh接続
$ export profile="poc" ssh <user>@<instance-id> -i <秘密鍵> $ ssh centos@i-015XXXXXXXXXXXX -i .ssh/aEC2.pem Last login: Wed Nov 4 07:51:36 2020 from localhost [centos@ip- ~]$ [centos@ip- ~]$ who centos pts/0 Nov 5 04:57 (localhost)
一般サイト SCP でファイル転送 ポートフォワードしてプライベートサブネットのRDS接続
(参考情報) AWS CLI でインスタンス停止
## インスタンス停止 $ aws ec2 stop-instances --profile poc --instance-ids i-015b2XXXXXXXXXX { "StoppingInstances": [ { "CurrentState": { "Code": 64, "Name": "stopping" }, "InstanceId": "i-015b2XXXXXXXXXXX", "PreviousState": { "Code": 16, "Name": "running" } } ] } ## 停止確認 $ aws ec2 describe-instances --profile poc --instance-ids i-015b2XXXXXXXXXX | jq '.Reservations[].Instances[] | {InstanceId, InstanceState: .State.Name}' { "InstanceId": "i-015b2XXXXXXXXXXXXX", "InstanceState": "stopped" }