web-dev-qa-db-ja.com

NATサーバーを介してVPCプライベートサブネットのec2インスタンスにSSHで接続する方法

AWSでパブリックサブネットとプライベートサブネットを持つVPCを作成しました。プライベートサブネットは外部ネットワークに直接アクセスできません。したがって、NATサーバーがパブリックサブネットにあり、すべての送信トラフィックをプライベートサブネットから外部ネットワークに転送します。

現在、パブリックサブネットからプライベートサブネットにSSHで接続できます。NATからプライベートサブネットに接続します。ただし、必要なのは、任意のマシン(ホームラップトップ、オフィスマシン、モバイル)からインスタンスへのSSHです。プライベートサブネット内。

NATボックスを設定して、SSHをプライベートサブネットのインスタンスに転送するように設定できることを確認しましたが、うまくいきませんでした。

これを可能にするためにセットアップする必要があるものを誰でもリストできますか?.

命名は:

ラップトップ(VPC外の任意のデバイス)

nat(NATパブリックサブネットのサーバー)

宛先(接続するプライベートサブネット内のサーバー)

以下が制限であるかどうかわからない:

「宛先」には、パブリックIPはなく、サブネットIPのみが含まれます(例:10.0.0.1)。「宛先」は、natのパブリックを介して「nat」に接続できません。複数の「宛先」サーバーがありますが、それぞれに1つずつセットアップする必要がありますか?

ありがとう

17
jasonfungsing

要塞ホストを設定して、VPC内の任意のインスタンスに接続できます。

http://blogs.aws.Amazon.com/security/post/Tx3N8GFK85UN1G6/Securely-connect-to-Linux-instances-running-in-a-private-Amazon-VPC

踏み台インスタンスとして機能する新しいインスタンスを起動するか、既存のNATインスタンスを踏み台として使用するかを選択できます。

新しいインスタンスを作成する場合、概要として、次のことを行います。

1)ノートパソコンからのSSHアクセスを許可する要塞ホストのセキュリティグループを作成します(ステップ4のこのセキュリティグループに注意してください)

2)VPCのパブリックサブネットで別のインスタンス(要塞)を起動します

3)起動時に、またはElastic IPを割り当てることにより、その要塞ホストにパブリックIPを提供します

4)パブリックIPを持たない各インスタンスのセキュリティグループを更新して、踏み台インスタンスからのSSHアクセスを許可します。これは、要塞ホストのセキュリティグループID(sg-#####)を使用して行うことができます。

5)SSHエージェント転送(ssh -A user @ publicIPofBastion)を使用して、最初に要塞に接続し、次に要塞に接続したら、SSHで任意の内部インスタンス(ssh user @ private-IP-of-Internal-Instance)に接続します。エージェント転送が秘密鍵の転送を処理するため、要塞インスタンスに格納する必要はありません(どのインスタンスにも秘密鍵を格納しないでください!!

上記のAWSブログの投稿は、プロセスに関する要点を提供できるはずです。要塞ホストに関する追加の詳細が必要な場合に備えて、以下も含めました。

要塞ホストの概念: http://en.m.wikipedia.org/wiki/Bastion_Host

説明が必要な場合は、コメントしてください。

30
jca-

それを機能させる唯一の方法。

1)このプライベートインスタンスのセキュリティグループに、パブリックサブネットからのセキュリティグループがインバウンドルールに含まれていることを確認してください

ポートプロトコルソース
すべてすべてsg-0b6616e070b9ea2d(公安グループ)

2)プロキシコマンドを使用して、ssh構成ファイルを次のように構成します。

vim ~/.ssh/config

Host publichost
   HostName 24.123.34.45
   User ubuntu
   IdentityFile ~/mypem.pem
   ProxyCommand none
Host privatehost
   HostName 10.0.2.133
   User ubuntu
   IdentityFile ~/mypem.pem
   ProxyCommand ssh publichost -W %h:%p

ssh privatehostを実行します

1

明確にするために:要塞ホストにsshしたら、NAT Host as user ec2-user]にsshする必要があります。これにより、通常、 ubuntuユーザーはAWSのubuntuです。

laptop> ssh -A ubuntu@ssh_bastion
ssh_bastion> ssh ec2-user@nat_private_dns_or_private_ip

また、ssh_bastionには、他のホストやsgへのトラフィックを許可する送信ルールが必要です。

0
Joel

完全にではなく多くの助けとなる受け入れられた回答に加えて、セキュリティグループが受信トラフィックと送信トラフィックを許可することを確認する必要がありました。一見すると、すでにそうであるように見えましたが、私はCloudFormationテンプレートを使用していたため、プライベートサブネットへの着信トラフィックのソースが自分のELBであることに気付きませんでした。したがって、すべてのトラフィックを許可しましたが、ELBからのトラフィックのみを許可しました。これをパブリックサブネットに変更すると、問題が解決しました。

0
Milan Markovic