1

尋求審查,評議,指出問題,鏈接到可用的測試,更好的解決辦法...AWS小設置,確保公衆獲得的想法。與NAT網關做掉

這個想法是提供安全的遠程接入到EC2實例並允許後端實例在需要更新,安裝軟件包等時到達互聯網。 我剛剛開始自行取得AWS,並且此前沒有AWS的經驗。我學到了保護遠程訪問(如SSH)的方法是限制SSH源IP,創建跳轉/堡壘主機,然後對後端/私有子網的Internet訪問將是NAT實例/網關或代理。對於一個小型的< 20臺服務器,1到2個管理員看起來過度。

我想使用AWS CLI,安全組和網絡ACL爲小型設置提供「足夠」的保護。無需在不需要時將SSH公開給公衆,或僅限於特定IP,額外實例或按照AZ支付NAT網關。我搜索了一下,但似乎無法找到想法,所以我做了一些小腳本來測試。我的腳本經驗非常低,更多的是GUI用戶。所以請耐心等待。

測試設置; 1公有子網,安全組允許來自所有IP的http,https & ssh。 ACL允許http/https &短暫端口的入口,並向所有端口出站。自動分配公共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 

然後,另一個刪除SSH的腳本允許ACL中的規則。 公有子網實例,只需要添加SSH並刪除規則即可。

有改進的餘地;如自動選擇實例,自動每日檢查(可能使用AWS config/Lambda),並在未刪除後端實例公用IP和ACL SSH規則時發出警報。腳本缺乏錯誤檢查,沒有MFA(不知道如何)等。

我沒有測試與Web服務器和數據庫設置,不知道會有服務中斷。

問題?太多的努力?在後端實例訪問互聯網期間,SG和ACL會阻止傳入的流量。可以將專用網絡ACL配置爲拒絕來自公共子網實例的SSH。所以它看起來不錯..

問候。

回答

3

對於微不足道的設置而言,需要付出極大的努力。你需要的東西是這樣的: VPC with Public and Private Subnets (NAT)

爲什麼你認爲NAT對你的設置是一個矯枉過正?它非常適合您的設置。如果費用是問題,請使用價格爲5美元/月的t2.nano。除非你知道你到底在做什麼,否則不要亂用ACL。 NAT和堡壘(包括t2.nano)以及安全組都可以解決您的問題。不要過度複雜並重新創建AWS已經提供的內容。

+0

我不知道我是否重新發明輪子,因爲我AWS新手。有人可能已經自動化了。我可以複製她/他的解決方案,然後設置NAT和Jump服務應該更容易。在這個運動中,它更加好奇並且學習AWS,因爲我沒有在AWS上工作。請參閱下面的答案.. –

0

對不起,評論框中沒有足夠的空間。

爲了準備CSA-Associate考試,我設置了NAT實例和網關,並且跳轉服務器以進行動手操作,然後我認爲只要廢除它們就不是那麼容易了(對於測試,我仍然需要知道)。然後,我不需要爲HA設置2,測試故障轉移,修補實例,監控它們,不需要跳轉主機,ssh傳遞或關注ssh漏洞。

因此,它看起來像一個比NAT和跳轉框更簡單的設置。

我發現網絡ACL容易理解,我認爲它應該配置爲只允許所需的流量。它與安全組合作得很好; SG提供有狀態和ACL無狀態,都應該被善加利用。網絡安全應遵循IAM最小特權的概念。

添加於9 9月; 技術它只是允許SSH從我的當前IP訪問實例,然後將EiP添加到實例。使它像一個面向公衆的實例。

如果您知道如何使用Web控制檯通過ACL允許ssh入口並將EIP分配給實例,那麼腳本就是代表我們執行此操作。一個更好的腳本將有助於使它更容易和更快。

如果擔心ACL搞亂了。對我而言,ACL和安全組應該收緊。如果我確實實現了NAT實例和Bastion,它們將位於另一個子網和它們自己的ACL中以保護它們。這使得它更復雜。 NAT和跳轉功能不能替代或減少ACL和SG的限制。

對我來說,這個想法很容易理解和實現,它沒有任何東西和實現兩個NAT服務之間的中間地帶。不需要PAT(NAT),SSH希望,配置Winscp帶隧道傳輸文件,額外的子網,ACL,SG等。

從AWS發現這個,它列出了更多的有Bastion主機的缺點,去掉它。 https://aws.amazon.com/blogs/mt/replacing-a-bastion-host-with-amazon-ec2-systems-manager/

我覺得上面的建議很好。一旦Bastion主機被刪除,如果有需要直接SSH到後端實例..我可能只是通過ACL允許ssh和臨時添加EIP。

AWS將使用安全DNS發佈Shared Proxy網關嗎?它應該更快,更便宜? (因爲減少流量),安全..我會用這個替換NAT網關/實例..如果我曾經得到一份工作交付AWS ..