なんだかんだでやっぱりAWSといえばEC2を使うことが多々あります。
なので、プライベートサブネットにどうやってインターネットからアクセスするか、
が結構ネックになっており、一昔前ではパブリックサブネットに踏み台サーバを立てる、というやり方が主流でした。
実際にAzureやOracle CloudはBastionという名前で踏み台サーバ方式になっています。
一方、AWSではSystems Managerの機能で踏み台サーバいらずでプライベートサブネットのEC2にログインすることは可能だった。
過去にも↓の通りブログ記事にも書いた。
AWS Systems Managerを使ってプライベートなEC2にログイン
AWSたのしいいいいいい
今回はこのSystems Manager(SSM)の機能を使うのではなく、
「EC2 Instance Connect Endpoint」という機能でプライベートサブネットのEC2にSSH/RDP接続してみよう、というお話。
SSMとの違いは以下。
- EC2インスタンスにSSM用のIAMロールが不要
- SSMのエンドポイントが不要(代わりにInstance Connect用のエンドポイントが必要)
- RDP接続時はAWS CLIだけでOK(SSMは別途プラグインのインストールも必要)
SSM用のエンドポイントを作ると有料になってしまうが、(代わりにNATゲートウェイを建てる方法もあるけど、どちらにしろ有料)
Instance Connect用のエンドポイントは無料なので、
デフォルトで作っておいてもいいレベル。
Instance Connect用エンドポイント作成
やり方は簡単。
VPCのコンソールのエンドポイントから「エンドポイントを作成」をクリック。
サービスカテゴリに「EC2 Instance Connect Endpoint」を選択し、エンドポイント作成先のVPCを選択。
セキュリティグループとサブネットをそれぞれ選択。
ここでのセキュリティグループとしては、
インバウンド:RDP/SSHを許可(宛先はVPCのCIDRでOK)
となるようなセキュリティグループを選ぶ。
しばらく待つとエンドポイントが作成される。
エンドポイントの作成は以上!
Instance ConnectでGUI接続(Linuxのみ)
Linuxであればコンソール経由でInstance Connectの接続が可能。
EC2を選択して、「接続」をクリック。
インスタンス接続画面で、「EC2 Instance Connect」を選び、
「EC2 Instance Connectエンドポイントを使用して接続する」を選択。
OSにログインするユーザー名(Amazon Linuxならec2-user)を設定し、
Instance Connectエンドポイントで先ほど作成したエンドポイントを選び、最後に「接続」をクリックする。
ブラウザベースになるけど、ログインすることができた。
Instance ConnectでCLI接続(Linux)
Windowsのコマンドプロンプト(要OpenSSH)やMacのターミナルアプリからでも同様にInstance Connect経由でSSHログインはもちろん可能。
AWS CLIを最新版にアップデートは事前にしておくこと。
その後、以下のコマンドを実行。
aws ec2-instance-connect ssh --instance-id i-xxxxxxxxxxxxx --connection-type eice
実際に実行した結果がこちら。
Amazon LinuxであればOSユーザー名省略でOK。
それ以外のLinuxなら「--os-user <ユーザー名>」のオプションを追加すればOK。
Instance ConnectでRDP接続(Windows)
次にWindowsにリモートデスクトップ接続したい時。
その場合は以下のコマンドを実行する。
aws ec2-instance-connect open-tunnel --instance-id i-xxxxxxxxxxxxx --remote-port 3389 --local-port 13389
localhostのポートの13389をリモート先EC2の3389に転送するようになる。
上記のようにコマンド実行後に「Listening for connections...」というメッセージが表示されればOK。
この状態でlocalhost:13389に対してリモートデスクトップ接続を行う。
Macのリモートデスクトップアプリだと以下のような感じ。
接続先EC2のユーザー名とパスワードを聞かれるので入力する。
証明書の警告が出るので、「Continue」をクリックする。
WindowsにRDP接続できた。
参考:Instance ConnectできるIAM権限
作業ベンダーなど、EC2にログインだけさせたいような場合は
専用のIAMユーザーを作って専用の権限を付与するのが安全。
どのような権限が必要なのかは公式サイトをご確認くださいw
やり方によっては接続元IPアドレス制限をかけたりすることもできるそうな。
SSMよりは遥かに手軽なので、EC2を立てる時はデフォルトで設定するのをオススメ
以前まではSSMのセッションマネージャー・フリートマネージャーを使う必要があったけど、
これからはEC2 Instance Connectで十分使える。
既にSSMを使っているところも、
EC2 Instance Connectに切り替えることでエンドポイントの費用が若干浮くので、
VPCを作成したらデフォルトで作ってもいいんじゃなかろうか。
と思ったけど、EC2 Instance ConnectはVPCに1つしか作ることができないので、
AZ障害が発生すると使えないという欠点もある。
あとはログ出力もSSMのほうが豊富っぽい。→EC2 Instance ConnectとSSMの違い
気軽に使うならEC2 Instance Connect、
厳格な要件で使うのならSSMのセッションマネージャー、
という棲み分け方かな??
うまく活用してもらえたらと思います。
0 件のコメント:
コメントを投稿