やってみていること
EC2が3つあります。
- 踏み台サーバとして起動。パブリックIPあり。
- Webサーバとして起動。パブリックIPあり。
- Webサーバとして起動。パブリックIPなし。
なんで、3.はパブリックIPなしかと言うと、元々ELB経由で接続する予定なので、パブリックIPアドレスは不要なのですが、2.のときにうっかり付けて起動してしまった、というわけです。しかも、後からは外せない
今のところはプロト環境として構築中なので、本番のときは付けないで起動せねば!と心に固く誓うだけじゃなく、しっかりメモしたところです。
EC2 Instance Connectってのがあるらしいじゃない!?
保守作業に当たってのアクセス制限とか操作記録とか、どうしようかといろいろ考え中にEC2 Instance Connectというのがあるのを知って試してみています。
環境構築
元々、踏み台サーバからsshでアクセスできるようにしてあったので、そこは割愛します。
実は、踏み台サーバへのログインもどうしようかと、まだ考え中で。。。AWSコンソール使う?余計なもの見せたくないしなぁ。。。もし機会があれば投稿しようと思います。
少なくとも、踏み台サーバからEC2インスタンスへはEC2 Instance Connectでログインするようにしようかと思ったわけです。ログに残るし(未確認)、IAMで制御できるし(まだよく分かってない
)というのが狙いです。
- IAMユーザー(実際にやったのはユーザーが属するグループ)にEC2InstanceConnectポリシーを追加。
- 踏み台サーバにログインして、
pip install ec2instanceconnectcli
を実行。とドキュメントには書いてあったけど、その前にsudo easy_install pip
しないとpipが使えない。。。 - IAMユーザーのアクセスキーを作る。それを以下のように設定(AWSのドキュメントにあるサンプルなのでご安心を)。リージョンも設定しておくと接続のときに指定しなくていいので楽(かも)。
$ aws configure
AWS Access Key ID [None]: AKIAIOSFODNN7EXAMPLE
AWS Secret Access Key [None]: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
Default region name [None]: us-west-2
Default output format [None]: json
いよいよ接続!
mssh 2.のWebサーバのインスタンスID
としたところ、だんまり。。。しばらくしてタイムアウト
一方でmssh 3.のWebサーバのインスタンスID
としたところ、無事接続。
タイムアウトのメッセージを見ると、パブリックIPアドレスに対してコネクションタイムアウト、とのこと。そりゃWebサーバに外からsshつながるようにポート開けてないし。msshはIPアドレス指定できなから、インスタンス起動した時点で詰んでたってこと!?
まだ旅の途中
保守作業などでログインするときに人別にIDを付与して、操作記録を残すのは原則だと思うのです。AWSでのベストプラクティスを探す旅路の途中です。ガンダーラはあるのか。。。