AWS小设置,确保公众获得的想法。与NAT网关做掉

AWS小设置,确保公众获得的想法。与NAT网关做掉

问题描述:

寻求审查,评议,指出问题,链接到可用的测试,更好的解决办法...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。所以它看起来不错..

问候。

对于微不足道的设置而言,需要付出极大的努力。你需要的东西是这样的: VPC with Public and Private Subnets (NAT)

为什么你认为NAT对你的设置是一个矫枉过正?它非常适合您的设置。如果费用是问题,请使用价格为5美元/月的t2.nano。除非你知道你到底在做什么,否则不要乱用ACL。 NAT和堡垒(包括t2.nano)以及安全组都可以解决您的问题。不要过度复杂并重新创建AWS已经提供的内容。

+0

我不知道我是否重新发明*,因为我AWS新手。有人可能已经自动化了。我可以复制她/他的解决方案,然后设置NAT和Jump服务应该更容易。在这个运动中,它更加好奇并且学习AWS,因为我没有在AWS上工作。请参阅下面的答案.. –

对不起,评论框中没有足够的空间。

为了准备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 ..