こんにちは、櫻井です。
EC2を使って開発を行う際、ターミナル上でSSH接続を行いVimなどで開発する方法や、VS CodeのRemote-SSHを使う方法などが挙げられます。
今回はセキュリティーグループでSSHのポートを開けずに、AWS Systems Manager セッションマネージャー(以下セッションマネージャー)でVS CodeのRemote-SSHを使えるようにすることで、セキュリティーが堅牢なシステムを構築、及びスムーズに開発できる環境を紹介します。
セッションマネージャー越しにSSHをするメリットをまとめている記事があるので、気になる方は以下のリンクを参照してください。
セッションマネージャー越しにSSHアクセスすると何が嬉しいのか
目次
前提
- WindowsのPCを使っている
- VS Codeをインストール済み
- セッションマネージャーを使ってログインできるEC2と環境がある(下記リンクの見出し”AWS CLI 用の Session Manager プラグインをインストールする” までを進めた状態)
SSMセッションマネージャーを使って安全にEC2にログインする
手順
ローカルPCに公開鍵、及び秘密鍵を作成する
すでに公開鍵、及び秘密鍵がある方はこの手順はスキップしてください。
コマンドプロンプトを起動し、以下のコマンドで鍵を発行します。
1 2 3 4 5 6 7 8 9 10 11 |
$ssh-keygen Generating public/private rsa key pair. # keyの配置場所を問われています。今回はデフォルトのC:\Users\ユーザ名/.ssh/id_rsaでいいので、何も入力せずにEnterキーを押下しますが、指定したい場合は任意のパスを指定してください。 Enter file in which to save the key (C:\Users\ユーザ名/.ssh/id_rsa): # パスワードを設定します。今回はパスワードを設定しないので、何も入力せずにEnterキーを押下します。 Enter passphrase (empty for no passphrase): # 再度同じパスワードを入力します。先程何も入力せずにEnterキーを押下したのでこちらも何も入力せずにEnterキーを押下します。 Enter same passphrase again: |
“ssh-keygen”で指定したkeyの配置場所にある公開鍵(id_rsa.pub)については後ほど使うのでテキストエディタ等で開いて、文字列を控えておいてください。
EC2に公開鍵を配置する
前提で示した通り、セッションマネージャーで接続できるEC2がある前提で進めます。
コマンドプロンプトでaws configure を設定します。詳しくは、公式ドキュメントを参照してください。
1 2 3 4 5 |
$aws configure --profile testProfile AWS Access Key ID: {アクセスキーID} AWS Secret Access Key: {シークレットアクセスキー} Default region name: {利用しているリージョン} Default output format: {jsonもしくはyaml} |
EC2にログインします。
1 |
aws ssm start-session --profile プロファイル名 --target インスタンスID |
ログインが出来たら、先程控えた公開鍵の文字列を任意のユーザ(今回はec2-userを使います)の”.ssh/authorized_keys”に貼り付けます。
1 2 3 4 |
$ vi /home/ec2-user/.ssh/authorized_keys #ここに控えた文字列を貼り付ける ssh-rsa AAAAB***********************... |
これでEC2での作業は終了なので、ログアウトしてください。
VS CodeのRemote-SSHのインストールと設定
VS Codeを起動し、拡張機能からRemote-SSHをインストールします。
①拡張機能のアイコンをクリックし、②検索ボックスに”remote”と入力して検索します。③Remote-SSHという拡張機能が出てくるので、インストールをクリックします。
インストールが完了すると、左側のタブにRemote-SSHのアイコンが出現します。①Remote-SSHのアイコンをクリックし、②歯車のアイコンをクリックすると、画面上部にタブが展開されるので、③コンフィグファイルのパスをクリックします。
するとコンフィグファイルが開かれるので、以下のように設定を記述し保存(ctrl + s)します。
1 2 3 4 5 |
Host 任意のホスト名 HostName インスタンスID IdentityFile 秘密鍵(id_rsa)のパス ProxyCommand C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe "aws ssm start-session --profile プロファイル名 --target %h --document-name AWS-StartSSHSession --parameters 'portNumber=%p'" User 公開鍵を配置したユーザ名 |
※ProxyCommand内の “%h” はHostNameを指定しており、”%p” はポート番号(デフォルトは22)を指定しています。
VS CodeのRemote-SSHでセッションマネージャー越しにSSHする
ひとつ前のステップでコンフィグの設定をし、保存が終わるとSSH TARGETSに先程設定した任意のホスト名が出現するので、その右側のアイコンをクリックします。
新しいタブが開かれ、セッションマネージャー越しにEC2にSSH接続が開始されます。以下のようになっていれば接続に成功です。
あとは普段通りのVS Codeの使い方と同様に、EC2内のファイルを編集することや、作成することが出来ます。
試しに先程公開鍵を配置した”authorized_keys” の中身をVS CodeのRemote-SSHから参照してみます。
①”Open Folder” をクリックすると画面上部に検索ボックスが現れるので、②”authorized_keys”が配置されたフォルダーのパスを入力し、③OKをクリックします。
すると、”authorized_keys”が配置されたフォルダーがワークツリー内に現れるので、”authorized_keys” をクリックすると、画面右側に、先ほど貼り付けた “id_rsa.pub”内の文字列を参照することが出来ました。
まとめ
これでセッションマネージャー越しにVS Code Remote-SSHで 接続し、開発できるようになりました。
セッションマネージャー越しにVS Code Remote-SSHすることで、安全且つスムーズに開発を進めることができるようになるので、ぜひ利用してみてください。
一緒に働く仲間を募集中!
ギークフィードではAWSエンジニアを募集しています。
興味がある方はこちらからエントリーをしてぜひ一緒に働きましょう!
- 特定の時間あたりのlambda実行数をSlackに通知する - 2023-12-23
- 公衆電話からでも使える電話帳サービスをLEX + AmazonConnectで作ってみた - 2023-12-19
- SQSを使ってlambdaを10秒ごとに定期実行する - 2023-12-14
- Slack と AWS の電話番号登録アプリ – Bolt + CDK ソースコード解説 - 2023-03-26
- SlackとAWSを組み合わせた電話番号登録アプリの開発 – Boltフレームワーク+CDKで作ってみた - 2023-03-26