こんにちは!
クラウドインテグレーション部(CI部)技術2課の反町です。
今回は、AWS Systems Managerを利用することで踏み台を利用せずにローカル環境からプライベートな環境にあるEC2に接続することができて、「便利だなあ...」と感じたので、接続準備や接続手順をブログに書き残しておこうと思います。
事前準備
前提として、AWS CLIはインストール済みでクレデンシャル情報は管理者権限をもつIAMユーザーを利用しました。 EC2(Amazon Linux 2)も構築済みで、ローカルの環境はWindowsです。
以下、構成図です。
1. IAMロールを作成する
IAMポリシー「AmazonSSMManagedInstanceCore」をもつIAMロールを作成します。
2. EC2にIAMロールをアタッチする
作成したIAMロールをローカル環境から接続させたいEC2(今回はAmazon Linux 2)にアタッチします。
アクション>セキュリティ から「IAMロールを変更」をクリックします。
作成したIAMロールを選択して「保存」をクリックします。
EC2インスタンスをマネージドインスタンスにする
1. EC2インスタンスにログインし最新のSSMエージェントをインストールします。
次のコマンドよりSSMエージェントのインストールを行います。
Amazon Linux2にはデフォルトでSSMエージェントがインストールされていますが、今回は最新バージョンのSSMエージェントにするため、インストールを行いました。
sudo yum install -y https://s3.ap-northeast-1.amazonaws.com/amazon-ssm-ap-northeast-1/latest/linux_amd64/amazon-ssm-agent.rpm
エージェントをインストールした後、次のコマンドを実行して、インスタンスで実行されているかどうかを確認します。
実行されていればactive(running)
を返します。
sudo systemctl status amazon-ssm-agent
2. VPCエンドポイントを作成します。
上の図のような構成で、NATゲートウェイもインターネットゲートウェイもなくインターネットへ出る経路がない場合は次の3つのVPCエンドポイントを作成します。
com.amazonaws.ap-northeast-1.ssm
com.amazonaws.ap-northeast-1.ssmmessages
com.amazonaws.ap-northeast-1.ce2messages
VPC>エンドポイント から「エンドポイントの作成」をクリックします。
対象のエンドポイントを選択し、VPC・サブネットではローカル環境から接続したいEC2が存在しているVPC・サブネットを選択します。 セキュリティグループでは、VPC内からHTTPS(443)のインバウンド通信を許可してください。
そのほかの設定値はデフォルトのままスクロールして「エンドポイントの作成」をクリックします。 3つ分のエンドポイント作成を繰り返します。
ここまでくれば、マネージドインスタンスになっているはずなのでSystems Managerのコンソールから確認します。
3. Systems Managerからマネージドインスタンスを確認する。
Systems Manager>フリートマネージャーからマネージドインスタンスを確認します。
マネージドインスタンスになりました!
ローカル環境を設定する
1. ローカル端末にAWS CLI 用の Session Manager plugin をインストールします。
次のサイトの手順に従って、端末OS用の Session Manager plugin をインストールします。
2. Configファイルを編集します。
Session Manager plugin をインストールするとC:¥Users¥[username]¥.ssh
の下にconfigファイルができます。
*存在しない場合は作成してOKです。
そのconfigファイルに以下設定を追記します。
# SSH over Session Manager host i-* mi-* ProxyCommand C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe "aws ssm start-session --target %h --document-name AWS-StartSSHSession --parameters portNumber=%p"
ここまでくれば、もうインスタンスへ接続できるはずなのでSSHで接続をしてみます!
SSH接続してみる
次のコマンドでssh接続を実行してみます。
コマンドプロンプトを立ち上げて、次のコマンドを入力します。
$ ssh -i [秘密鍵のパス] ec2-user@[インスタンスid]
yes/noを聞かれたらyesと答えてください。
無事接続できました!!
おまけ
SCPファイル転送を実行してみる
次のSCPコマンドを利用して、ローカル環境に作成したtest.txt
というファイルをEC2インスタンスへ転送してみました。
(ローカル)C:¥Users¥user¥test.txt → (EC2)/home/ec2-user
$ scp -i [秘密鍵のパス] C:¥Users¥user¥test.txt ec2-user@[インスタンスid]:/home/ec2-user
ファイル転送もできました!!!
まとめ
設定や確認する項目は多いですが、Systems Managerを利用してローカル環境からプライベートなEC2に接続できれば踏み台サーバーもいらず、構築後の運用でも便利だなと感じました。