テックブログ

AWS で プライベートサブネット内 EC2 へのSSH接続方法

こんにちは技術部のam です。

今回はAWSでEC2サーバを建てた際に踏み台サーバや、グローバルIP、VPNといったものを

利用せずにSSHで接続する方法として session manager 機能を紹介したいと思います。

Session Manager について

IAMを利用して、EC2インスタンスへのSSH接続になります。

上述しているようにグローバルIPアドレスも不要なので、プライベートサブネット環境に

あるマシンに対して踏み台マシンを用意せずともSSHログインが可能になります。

今回用意する環境

・ALB 1台

・EC2 1台

EC2 はプライベートサブネットにのみ配置

Session Manager の有効化

AWSでのVPC作成や、EC2インスタンス作成といった部分は割愛し、

ひとまず作成が完了し、マネージメントコンソールからECが実行中の状態になったところから

進めます。

Session Manager を有効にするには、ssm-agent と AWS が通信できる必要があります。

そのため以下の設定を進めていきます。

マネージメントコンソールから接続する場合は、EC2 インスタンスへ、ロールを当てる必要があります。

参考

https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/getting-started-create-iam-instance-profile.html

https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/session-manager-getting-started-instance-profile.html

どういった要件で作成するのかは各自のポリシーで判断してください

またVPCエンドポイントの設定や IAMロールの設定も必要です。

参考

https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/session-manager-getting-started-privatelink.html

エンドポイントには セキュリティーグループでhttps(443)のインバウンドルールでVPCネットワークIPの

許可を忘れないでください。

Session Manager は AWS Systems Manager 内にありますがまずうまくいっているか確認する方法としては以下の2点です。

・EC2 の 接続 ボタンからセッションマネージャータブへ移動

以下の表示になっていれば接続可能な状態です。

接続できない場合は、インスタンスに接続できないメッセージになります。

・Systems Manager で確認

Systems Manager の中に フリートマネージャーがあります。

その機能を利用すると SSMマネージャーと通信できているインスタンスが表示されます。

AWS マネージメントコンソール上の Session Manager

AWS Systems MAnager 内に ある Session Manager へ移動します。

今のバージョンのコンソールだと画面右セッションの開始というボタンがあると思うのでそこをクリックします

そうすると接続可能なインスタンス一覧が表示されるので、接続したいインスタンスにチェックを入れ

セッションを開始するボタンをクリックします。

問題がなければ新しいタブで接続できます。

localhost で接続されていることがわかると思います。

あとは普通にターミナルでSSH接続したときと同じように

操作ができます。

ただこれだとブラウザ操作となりいろいろ不都合がある人も多いと思います。

そのためこれを利用してターミナルでSSH接続する方法があります。

SSH ターミナルソフトを利用した Linux マシンからの接続設定

こちらの場合は必要なIAMユーザに権限を当てて AWS コマンドで接続します。

参考

https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/session-manager-getting-started-enable-ssh-connections.html

ssh config で重要なのはインスタンスIDと proxycommand です。

host i-*****
ProxyCommand sh -c "aws ssm start-session --target %h --document-name AWS-StartSSHSession --parameters 'portNumber=%p'"

ブラウザでのSession Manager が問題なければここで問題が出ることはあまりないと思います。

実際に接続すると以下のようにこちらも localhost での接続となります。

またこちらの場合は Amazon linux のデフォルトのままだと SSH key が要求されます。

そのため事実上、IMAのAPIキーかつ、SSH key の2つの情報がなければ接続できないといった

環境になります。

以上で Session Maneger 経由での接続のご紹介は終了となります。

制限としてはIAM上でインスタンスや、IPを指定することで可能になります。

運用が特殊になり、設定も少々複雑ですが、セキュアな構成を考えると、比較的容易にでき、

追加機器もなしにできるといった点でメリットがあるかと思います。

その他考えられること

上記は Amazon Linux でテストしているため、 SSM Agent がデフォルトでインストールされています。

そのため、そういったAMI を利用しない場合は、User data の利用及び

インスタンスから外部へのGWもしくは S3 へのエンドポイントを適切に準備し、

初回起動時に SSM Agent をインストール及び、起動させないと、プライベート環境でEC2 を作成しても接続できません。

また プライベート環境にマシンがあることにより、外部から接続できません。

FTPといったこともできないため、Session Manager 経由でのSCP(SFTP)や、サーバから

データを取得してコンテンツを管理するといったことを考えていく必要があります。

開放しなければならないよりは圧倒的にセキュアになるので、

AWSでEC2インスタンスを作成する際はこういったこともできることを

覚えておくと役に立つ日がくるかもしれません。

また機会があれば AWS機能を紹介できればと思います。

ありがとうございました。

この記事をシェアする

  • facebook
  • twitter
  • hatena
  • line
URLとタイトルをコピーする

実績数30,000件!
サーバーやネットワークなど
ITインフラのことならネットアシストへ、
お気軽にご相談ください