AWS小型设置,安全的公共访问理念......取消NAT网关

时间:2017-09-04 10:26:03

标签: amazon-web-services security amazon-ec2 amazon-vpc sysadmin

寻求评论,评论,指出问题,链接到可用的测试,更好的解决方案...

这个想法是提供对EC2实例的安全远程访问,并允许后端实例在需要更新,安装包等时到达互联网。 我刚刚开始自己​​选择AWS并且之前没有使用过AWS的经验。我了解到安全远程访问(如SSH)的方法是限制SSH源IP,创建跳转/堡垒主机,然后后端/私有子网的Internet访问将是NAT实例/网关或代理。对于< 20服务器的小型设置,1到2个管理员......看起来过度。

我想使用AWS CLI,安全组和网络ACL为小型设置提供“足够”的保护。无需在不需要时打开SSH,或者仅限制特定IP,额外实例或为每个AZ支付NAT网关。我搜索了一下但似乎无法找到什么,所以我做了一些小脚本来测试。我的脚本编写经验非常低,更像是一个GUI人..所以请耐心等待。

测试设置; 1公共子网,安全组允许http,https&来自所有IP的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"

访问后端实例并允许其访问Internet;我从上面复制并粘贴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 ec2-user@$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(不知道如何)等等。

我没有使用网络服务器和数据库设置进行测试,不确定是否会出现服务中断。

问题?付出太多努力?在后端实例获得访问Internet的持续时间内,SG和ACL会阻止传入流量。可以将专用网络ACL配置为从公共子网实例拒绝SSH。所以它看起来还不错......

问候。

2 个答案:

答案 0 :(得分:3)

为一个简单的设置付出太多努力。你需要的是: VPC with Public and Private Subnets (NAT)

为什么你认为NAT对你的设置来说太过分了?它非常适合您的设置。如果费用是个问题,请使用scollection = X509Certificate2UI.SelectFromCollection (fcollection, "Available digital certificate (s)", "Select digital certificate", X509SelectionFlag.SingleSelection, ptr); ,费用为每月5美元。除非你知道自己到底在做什么,否则不要乱用ACL。 NAT和堡垒(t2.nano)以及安全组可以解决您的问题。不要过度复杂化并重新发明AWS已经提供的东西。

答案 1 :(得分:0)

抱歉,评论框中没有足够的空间。

为了准备CSA-Associate考试,我设置了NAT实例和网关,然后跳转服务器进行手动操作,然后我认为不要再轻易取消它们(为了测试,我仍然需要知道)。然后,我不需要为HA设置2,测试故障转移,修补实例,监控它们,不需要跳转主机,ssh传递或过多关注ssh漏洞。

因此,它看起来比NAT和跳转框的设置简单。

我发现网络ACL易于理解,我认为应该将其配置为仅允许所需的流量。它与安全组合作得相当好; SG提供有状态和ACL无状态,两者都应该得到很好的利用。网络安全应遵循IAM最小权限概念。

9月7日加入; 技术它只是允许ssh从我当前的IP访问实例,然后将EiP添加到实例。使它就像一个面向公众的实例。

如果您知道如何使用Web控制台允许通过ACL进行ssh进入并将EIP分配给实例,则脚本只是代表我们执行此操作。一个更好的脚本将有助于使其更容易和更快。

如果担心搞乱ACL。对我来说,ACL和安全组应该收紧。如果我实现NAT实例和Bastion,它们将在另一个子网中,并且它们自己的ACL&amp; SG保护他们。这使它更复杂。 NAT和跳转功能不是具有限制性ACL和SG的替代或减少。

对我而言,这个想法很容易理解和实现,它是没有任何东西和实现NAT&amp;跳跃服务。不需要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到后端实例中..我可能只允许ssh通过ACL并临时添加EIP。

AWS是否会使用安全DNS发布共享代理网关?它应该更快,更便宜? (因为流量减少了),安全..我会用这个替换NAT网关/实例..如果我得到一份工作来处理AWS ...