基于 AWS 平台跳板机配置

阅读数:15 2019 年 11 月 20 日 08:00

基于AWS 平台跳板机配置
很多用户通过跳板机对部署在 AWS 平台的应用系统进行日常维护,为管理私有网络的服务器提供便利,最小化了应用系统的安全风险,从而有利于提升整体架构的安全。
复制代码
为达到更好的安全性,需要进行恰当的规划,通常可以考虑以下几个问题:
1. 跳板机应该放置在哪个子网?
2. 如何安全访问跳板机?
3. 跳板机如何安全访问受管理服务器?
以下是结合这些问题基于 AWS 部署 linux 跳板机相关步骤。
### 一.网络规划
对于 vpc 的规划通常需要划分为若干个子网,分为公有子网和私有子网。公有子网中的实例可以直接从 Internet 接收入站数据流,私有子网中的实例则不可。公有子网中的实例可以直接向 Internet 发送出站数据流,私有子网中的实例则不可。但是,私有子网中的实例可以使用位于公有子网中的网络地址转换 (NAT) 网关访问 Internet。
根据以上描述不同子网的特点,我们需要把跳板机放置在公有子网中,以便接受管理人员通过 internet 的访问,受管理的服务器根据其在业务系统中充当的角色选择放置在公有子网或私有子网。在实际生产环境中根据需要可为跳板机设置一个独立的公有子网 。
如下图所示的 vpc 规划中,为跳板机实例划分了一个专用的公有子网,管理员可以通过登录到跳板机对放置在私有子网的服务器的管理:
!
### 二.跳板机部署
请参考以下链接,在公有子网中部署一台 linux EC2 实例,并为跳板机 EC2 分配 EIP:
http://docs.aws.amazon.com/zh_cn/AWSEC2/latest/UserGuide/EC2_GetStarted.html
在实际部署中考虑到跳板机所需的工作负载,可以部署配置较低的实例类型。此外,出于成本和安全考虑,您也可以在不进行运维操作的时候将跳板机状态设置为”停止”, 在每次运维需要的时候再“开启”跳板机。
为跳板机实例配置安全组。在创建 EC2 的过程中,在安全组规则中添加 SSH 服务的安全规则,根据实际情况限定连接的源 IP 地址。如下图所示,只接受特定的 管理终端连接:
!
配置受管理服务器的安全组。配置安全组规则仅接受来自跳板机所对应安全组的访问请求:
!
配置管理终端。在管理终端依次导入跳板机和受管理服务器的证书私钥,登录跳板机后私钥信息将转发到受管理服务器完成身份验证。以下是针对 linux 环境和 windows 环境的管理终端为例:
#### 在 linux 管理终端下通过 ssh 从跳板机登录到受管理服务器:
步骤一:在 linux 管理终端上运行 ssh-agent 启动 ssh-agent 进程
步骤二:将跳板机和受管理服务器对应证书的私钥依次添加到管理终端,执行方式如下(例如,私钥文件名称为 xxx.pem):
ssh-add xxx.pem
步骤三:使用 ssh -A 参数登录跳板机,-A 表示通过跳板机转发本地管理端保存的私钥信息,实现跳板机与受管理服务器之间的身份验证:
ssh –A ec2-user@跳板机公网 ip 地址 ——(以下假定 linux ssh 用户名为 ec2-user)
步骤四:从跳板机直接通过受管理服务器的内网 IP SSH 登录服务器:
ssh ec2-user@受管理服务器的内网 ip 地址
#### 在 windows 环境下通过 Putty 从跳板机登陆到受管理的服务器:
下载 putty 客户端,并且通过 puttygen 将私有证书生成 ppk 格式。
下载 Putty 环境下的 SSH agent—-pageant
步骤一:将受管理服务器及跳板机所对应证书的私钥添加进 pageant
启动 pageant 并右击图标,您可以先查看 key list,如果受访问服务器所需私钥没有添加进 key list 里,则执行”Add Key”的操作。并将保存在本地的私钥添加进去。
!!
步骤二:通过 putty 登陆跳板机
在这一步中,如图填写跳板机公有 IP 地址,并在左侧 SSH-Auth 目录下勾选“Allow agent forwarding” 来允许跳板机上的 ssh 客户端与管理终端本地的 ssh-agent 通信并使用管理终端本地的密钥完成与受管理服务器的 ssh 认证流程。下面以 AWS 上的一台 EC2 为例登陆跳板机:
!
这里需要添加的私钥为跳板机所对应证书的私钥。
!
步骤三:从跳板机直接登录受管理的服务器
通过命令”ssh ec2-user@受管理服务器内网 ip 地址”来实现对受管理服务器的访问,需要注意的是,在这里输入受管理服务器的私有 IP 地址实现对其的访问,提高了受管理服务器的安全性。
这样,您便实现了从跳板机上登陆受管理服务器的操作。
!
### 三.安全加固
在上面部署跳板机的过程中,跳板机所附件的安全组规则中开放了 TCP 22 端口,根据实际情况建议严格限制来源 ip 地址,只允许指定的 IP 地址访问。在这基础上,还可以对安全进行优化:
* 当管理员需要登录跳板机通过 AWS CLI 在安全组添加规则打开 tcp 22 端口;
完成管理任务后,退出 ssh 会话,AWS CLI 将从安全组中关闭 tcp 22 端口;实现以上效果,可以执行以下脚本 ,请根据实际环境替换安全组 id。
\#!/bin/bash
aws ec2 authorize-security-group-ingress –group-id 安全组 id –protocol tcp –port 22 –cidr 0.0.0.0/0 &
sleep 5
ssh -A ec2-user@跳板机公网 IP
aws ec2 revoke-security-group-ingress –group-id 安全组 id –protocol tcp –port 22 –cidr 0.0.0.0/0
要成功运行以上脚本,需要配置 AWS CLI 运行环境,具体请参考:
http://docs.aws.amazon.com/cli/latest/userguide/installing.html
执行脚本登录前,将跳板机安全组中的 ssh 服务规则删除,即无法访问 tcp 22 端口:
!
执行脚本登录时,将执行脚本中的第一条语句,通过 AWS CLI 添加了 ssh 服务相关规则,然后 ssh 成功登录到跳板机:
!
在跳板机上完成管理任务后 exit 结束 ssh 会话,AWS CLI 删除安全组 ssh 服务规则,即无法访问 tcp22 端口:
!
下图显示,安全组规则相应被删除:
!
### 四.跨 vpc 管理服务器
跳板机是否可以管理不同 vpc 中的服务器呢?答案当然是可以的。如下图所示,需要在 vpc 之间建立 peering 连通两个 vpc,跳板机即可实现跨 vpc 安全管理应用服务器。
!
建立 vpc peering 的过程如下,也可以参考以下链接获取更详细的信息:http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/vpc-peering.html
步骤一:新建 Peering Connection
进入 console 里面 VPC 下的”Peering Connections”页面,新建”VPC Peering Connection”。 在这里您需要提供跳板机以及受管理服务器所在 VPC 的 ID,点击”Create VPC Peering Connection”。
!
步骤二: 配置路由表
创建成功之后,您可以看到 peering 的相关信息,比如”status” ,”Local Vpc”以及”Peered Vpc”信息。同时您可以看到 peering 的状态为”pending-accept”,您需要点击上方的”Action”, 并选择接受请求。
!
!
当您接受请求之后,您会收到创建新的路由表的通知,您需要点进页面进行路由表的配置。当为本地 VPC 配置路由表信息时,您需要提供受访服务器所在 VPC 的 CIDR 作为跳板机路由表的 Destination,新创建的 peering 作为 Target。
同理,在配置受访服务器所在 VPC 的路由表信息时,您只需将本地 VPC 的 CIDR 作为 Destination。
!
在配置完路由表信息后,您可以看到 peering 的状态变成了”active”, 并且可以看到路由表的相关信息。
!
步骤三: 通过本地跳板机登陆受访服务器
这一步类似于前面提到的在同一 VPC 下从公有子网的跳板机访问私有子网的受管理服务器。您需要配置好您的安全组信息,在访问的时候,您需要在管理终端保存受管理服务器公钥所对应的私钥。然后在跳板机上执行 ssh ec2-user@受管理服务器内网 ip 地址
如下图:位于 192.168.0.0/24 网段的跳板机 直接 ssh 访问位于 172.16.0.0/24 网段的应用服务器
!
五.关于 windows 环境下的跳板机配置
Windows Server 的管理基于 windows RDP 协议实现,可以通过配置 RDP 网关服务器管理位于私有子网的 windows 服务器,具体的规划及配置请参考以下白皮书:
作者介绍:
李艺明
!
亚马逊 AWS 解决方案架构师,负责基于 AWS 的云计算方案架构咨询和设计,在国内推广 AWS 云平台技术和各种解决方案。拥有超过 10 年的 IT 从业经验,为各种规模的企业客户提供 IT 项目实施和顾问服务。在加入 AWS 之前,服务于微软担任解决方案工程师,负责 Windows Azure 方案和架构设计,在此之前负责企业私有云和企业协同应用系统的架构规划和设计。
杨婉洁
!
亚马逊 AWS 解决方案架构师实习生,喜欢编程,熟悉 Java、C++、JSP、HTML 以及关系型数据库。曾在学校和企业参与数据分析项目,熟悉各类数据分析的算法。热爱大数据、云计算。

本文转载自 AWS 技术博客。

原文链接:
https://amazonaws-china.com/cn/blogs/china/aws-linux/

欲了解 AWS 的更多信息,请访问【AWS 技术专区】

评论

发布