を行うコメント、問題を指摘し、テスト可能な、より良い解決策へのリンク...AWS小さなセットアップ、取り付けパブリックアクセスのアイデア..レビューを探しているNATゲートウェイと離れ
このアイデアは、EC2インスタンスへの安全なリモートアクセスを提供することですアップデートやパッケージのインストールなどのためにバックエンドインスタンスがインターネットに接続できるようにしてください。 私は自分でAWSをピックアップし始めましたが、AWSに関する以前の経験はありませんでした。 SSHのようなリモートアクセスを保護する方法を学んだのは、SSHソースIPを制限し、ジャンプ/バスティオンホストを作成し、バックエンド/プライベートサブネットのインターネットアクセスをNATインスタンス/ゲートウェイまたはプロキシにすることです。 < 20台のサーバーの小規模なセットアップでは、1〜2人の管理者が過度に見えました。
AWS CLI、セキュリティグループ、およびネットワークACLを使用して、小さな設定に「十分な」保護を提供すると思います。必須ではない場合にSSHを公開する必要はありません。また、特定のIP、追加のインスタンスのみに制限することも、AZごとにNATゲートウェイを支払う必要もありません。私はちょっと調べましたが、何を覚えているようにも見えないので、テストするための小さなスクリプトを作成しました。私のスクリプティングの経験は非常に低く、GUIの人が多いので、私に同行してください。
テストセットアップ。 1パブリックサブネット、セキュリティグループはhttp、https &すべてのIPからのsshを許可します。 ACLは、http/https &エフェメラルポートのイングレスを許可し、allへのアウトバウンドを許可します。自動的にパブリックIPを割り当てます。
1プライベート/バックエンドサブネット、セキュリティグループは、すべてのIPからパブリックサブネットおよびsshからの必須ポートを許可します。 ACLは、VPCのCIDR、一時的、および発信からすべてへのトラフィックを許可します。パブリックIPを割り当てないでください。 両方のサブネットがインターネットにアクセスできるようにするルーティングテーブル。
AWS CLIとアクセスキーで設定されたラップトップ。 ACLにSSHルールを追加して、現在のパブリックIPが特定のサブネットにアクセスできるようにするスクリプト。
aws ec2 create-network-acl-entry --network-acl-id acl-public/backend --ingress --rule-number 801 --protocol tcp --port-range From=22,To=22 --cidr-block “$(curl http://checkip.amazonaws.com)”/32 --rule-action allow
現在のインスタンスとIPを表示します。
aws ec2 describe-instances --output text --query 'Reservations[*].Instances[*].[InstanceId,NetworkInterfaces[*].Association.PublicIp,Tags[?Key==`Name`].Value]' --filters "Name=network-interface.subnet-id,Values=subnet-backend"
バックエンドインスタンスにアクセスしてインターネットにアクセスできるようにする。スクリプトパラメータとして上記のInstanceIdをコピー&ペーストします。
if [ ! -n "$1" ]
then
echo "need InstanceID"
exit
fi
#Get a EIP
aws ec2 allocate-address --domain vpc --output text > $1.txt
#read variables
read eip d ip < $1.txt
#Associate Ip to instance
echo "issuing instance "$eip " with ip "$ip
aws ec2 associate-address --output text --instance-id $1 --allocation-id $eip > $1"EIP".txt
#ssh to instance
echo "ssh to "$ip
ssh [email protected]$ip -i Vrigina-private-key.pem
#remove EIP
read asid < $1"EIP".txt
aws ec2 disassociate-address --association-id $asid
aws ec2 release-address --allocation-id $eip
echo "removed eip"
cat $1.txt $1"EIP".txt > $1"-"`date +"%Hh-%Mm-%d-%b-%y"`.txt
rm $1.txt $1"EIP".txt
次に、ACLのSSH許可ルールを削除する別のスクリプトがあります。 パブリックサブネットインスタンスは、SSHを追加してルールを削除するだけで済みます。
改善の余地があります。インスタンスの選択を自動化したり、AWS config/Lambdaを使用したり、バックエンドインスタンスのパブリックIPとACL SSHルールがまだ削除されていないかどうかを自動的にチェックします。スクリプトにエラーチェックがない、MFAがありません(どう考えているかなど)。
私はウェブサーバとDB設定でテストしませんでしたが、サービスが中断されることはありません。
問題?多すぎる努力?バックエンドインスタンスがインターネットにアクセスしている間、SGとACLは着信トラフィックをブロックします。プライベートネットワークACLは、パブリックサブネットインスタンスからSSHを拒否するように設定できます。だからそれはOKに見えます。
よろしく。
私は車輪を再発明しているのですか? AWSの初心者です。誰かが既にこれを自動化している可能性があります。私は彼女の/彼のソリューションをコピーすることができますし、その後、NATプラス、ジャンプサービスをセットアップする方が簡単になるはずです。この動きでは、私はAWSに取り組んでいないので、より多くの好奇心とAWSを学ぶことができます。以下の回答もご覧ください。 –