AWS Systems Managerを利用してプライベートなEC2にローカル環境から接続する

記事タイトルとURLをコピーする

こんにちは!

クラウドインテグレーション部(CI部)技術2課の反町です。

今回は、AWS Systems Managerを利用することで踏み台を利用せずにローカル環境からプライベートな環境にあるEC2に接続することができて、「便利だなあ...」と感じたので、接続準備や接続手順をブログに書き残しておこうと思います。

事前準備

前提として、AWS CLIはインストール済みでクレデンシャル情報は管理者権限をもつIAMユーザーを利用しました。 EC2(Amazon Linux 2)も構築済みで、ローカルの環境はWindowsです。

以下、構成図です。 f:id:swx-miyu-sorimachi:20210714190246p:plain

1. IAMロールを作成する

IAMポリシー「AmazonSSMManagedInstanceCore」をもつIAMロールを作成します。 f:id:swx-miyu-sorimachi:20210709142643p:plain

2. EC2にIAMロールをアタッチする

作成したIAMロールをローカル環境から接続させたいEC2(今回はAmazon Linux 2)にアタッチします。

アクション>セキュリティ から「IAMロールを変更」をクリックします。

f:id:swx-miyu-sorimachi:20210709144702p:plain

作成したIAMロールを選択して「保存」をクリックします。

f:id:swx-miyu-sorimachi:20210709144843p:plain

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エンドポイントを作成します。

f:id:swx-miyu-sorimachi:20210714192003p:plain 上の図のような構成で、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つ分のエンドポイント作成を繰り返します。 f:id:swx-miyu-sorimachi:20210709152506p:plain

ここまでくれば、マネージドインスタンスになっているはずなのでSystems Managerのコンソールから確認します。

3. Systems Managerからマネージドインスタンスを確認する。

Systems Manager>フリートマネージャーからマネージドインスタンスを確認します。

f:id:swx-miyu-sorimachi:20210709153658p:plain マネージドインスタンスになりました!

ローカル環境を設定する

1. ローカル端末にAWS CLI 用の Session Manager plugin をインストールします。

次のサイトの手順に従って、端末OS用の Session Manager plugin をインストールします。

docs.aws.amazon.com

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と答えてください。

f:id:swx-miyu-sorimachi:20210709160450p:plain

無事接続できました!!

おまけ

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

f:id:swx-miyu-sorimachi:20210709163814p:plain

ファイル転送もできました!!!

まとめ

設定や確認する項目は多いですが、Systems Managerを利用してローカル環境からプライベートなEC2に接続できれば踏み台サーバーもいらず、構築後の運用でも便利だなと感じました。