エンジニア2年目が書いた記事として読んでね
前回の振り返り
・Ansibleのお勉強をしたいよ
・ServerからClientへAnsible-playbookコマンドが弾かれるよ
・サーバの鍵をなくしている事でSSH接続できない事が原因
■ こういう事したい!(前回記事から引用)
公開鍵・秘密鍵のおさらい
良い機会なので改めておさらい
今のところのざっくりとした認識はこれ
・秘密鍵で暗号化したデータは、公開鍵でしか複合できない。
・公開鍵で暗号化したデータは、秘密鍵でしか複合できない。
・秘密鍵は原則外部に漏らしたらダメ!
今の問題を、この状況と照らし合わせてみる。
問題① teratermからEC2(server)へアクセスできないのはなぜ?
鍵を再度取得する必要があるのは分かったが、公開鍵・秘密鍵どちらをPCのローカルに保存するべきなのだろうか
"秘密鍵は外部に漏らしたらダメ"
この一文に倣うなら、アクセス先のEC2(server)の公開鍵をローカルにおとしてきて、これを用いてEC2(server)にアクセスしようとしている。
と、考えるのが自然だと思ったが、実際はちょっと違う。
■参考にさせていただいた記事
なるほど。
暗号化の対象は、ローカルから送信するデータであり、これを暗号化するための秘密鍵を(OpenSSHを用いる場合は).pemファイルとしてローカルに保存するのね。
そして公開鍵はEC2(server)へ自動保存されると。
問題② EC2(Server)からEC2(Client)へSSH接続するにはどうする?
問題①で学んだから簡単!
EC2(Client)の.pemファイルを、EC2(Server)へ保存すればいいのね。
...あれ?どうやって?
と、思ったのも、.pemファイルはAWSのコンソール画面からブラウザを通じてダウンロードしている。
これをEC2(Server)へ保存させるにはどうするべきなのだろうか?
SCPってこうやればいいのか!
答えは「scpでローカルに保存した.pemファイルをEC2(Server)へ転送する」でした。
お仕事で、ローカルで作成したコマンドファイルをSQL実行サーバに転送するときにWinSCPを使った事はあったけど、実態はこういう事だったのね。学び。
SCPコマンド
PowerShellからEC2(Server)へ鍵転送!
$ scp -i EC2(Server)の鍵のパス 転送したいEC2(Client)の鍵のパス ec2-user@接続先IP:保存先パス
無事転送完了!
次回
EC2(Server)からEC2(Client)へのSSH接続をやっとこさ試せますね。
余談
実は前回記事でも記載したように、今回の環境は過去に作成したものを流用している。
ちょっと不都合があった関係で作り直しを行った。
どう問題があったのかをまとめる。
■実際の環境
※実際のアドレス帯は違うんだけど、イメージ先行で一旦↓のように記載
EC2がそれぞれ違うVPCに配置されている。
これの何が問題かっていうと、
・VPCをまたぐ通信のためには新しくNAT GWを配置する必要がある。※これが課金対象
・EC2(Client)側のアクセス制御に問題がある。
NAT GWは通信料に対して課金される。その他にVPC PearLinkなどの方法があるけど、一旦今回の検証範囲ではないのでまた今度
アクセス制御について
AWSを実際に利用した事がある人はわかると思うが、EC2を立てるときにSecurityGroupを作成する。
簡単に言うと、EC2ごとに設定できるステートフルなFWみたいなイメージ。
アクセス元のIPを制限するときには、以下の選択肢から選べる
・任意(0.0.0.0/0のアクセス許可)
・自分のIP(今アクセスしている自分の端末のGIP)
・カスタム(アドレス指定)
今回はEC2(Client)に、EC2(Server)以外からのSSH接続を拒否させたい。
EC2のローカルIPは自動割り当てで、今後変わる事を考えるとどうしたもんか...
調べていくと"アクセス元のSecurityGroupを指定できる"との事!
■ 参照
ただ、異なるVPCのSecurityGroupは指定できない....うーん...
作り直そう!
EC2って別のVPCに移行できるの?
vMotionみたいに簡単にぽーんと移動できる方法が無いか調べてみたんだけど...
変更不可とのこと
既存のEC2をAMI(簡単にいうとテンプレート)にして、それを別のVPCで立て直す方法で事なきを得たんだけど、それはまた別記事で...