Teleport堡垒机介绍

青春须早为,岂能长少年。这篇文章主要讲述Teleport堡垒机介绍相关的知识,希望能为你提供帮助。
什么是堡垒机
堡垒机,即在一个特定的网络环境下,为了保障网络和数据不受来自外部和内部用户的入侵和破坏,而运用各种技术手段监控和记录工程师对服务器、网络设备等的操作行为,以便问题溯源和审计定责。堡垒机的核心功能是身份验证,授权控制,账号管理,安全审计,也就是我们常说的4A规范,通过堡垒机可以实现统一的运维入口,规范运维工作,提高标准化水平,并为生产环境的安全添砖加瓦。
Teleport介绍
在堡垒机的选择上,有开源堡垒机、自建堡垒机和商用堡垒机三种,自建堡垒机成本较高,大部分企业都会选择开源或者商用堡垒机,经过一番调研和对比,我们最终选择了海外的一款开源产品 Teleport,大部分堡垒机主要工作方式是作为一个代理,实现用户登录,和 SSH/RDP 跳转,在被管理的终端实例上,仍然使用用户名密码,或者 SSH Key 的方式进行登录,但是Teleport与此有很大不同。Teleport基于自动下发证书的方式,实现用户和被管终端之间连接的认证和登录,不再依赖ssh服务,也不需要借助 SSH 用户密码或 SSH Key去登录服务器。
Teleport 是一个身份管理、多协议的访问代理,兼容 SSH、HTTPS、Kubernetes API、mysql 和 PostgreSQL 协议,支持对内网的 Linux 计算实例、Kubernetes 集群、Web 应用程序、PostgreSQL 和 MySQL 数据库的安全访问,可以方便在 Linux 守护进程或Kubernetes pod 中部署。Teleport 对用户端使用的工具透明,在完成认证后,用户可以继续使用原有的 SSH,Kubectl,psql,mysql等其他远程连接工具,接入到被管理的资源中。
主要功能和优势:

  • 使用自动下发证书的方式实现与目标资源之间的安全认证和通信,不需要在目标操作系统上管理密码和 SSH Key
  • 除了支持 SSH 外,还支持 Kubernetes, MySQL,PostgreSQL 和 HTTP 的安全远程代理访问,用户可选择使用 Web 或 CLI 进行连接
  • 用户可以继续使用原有的 CLI/GUI 工具进行远程安全连接,例如 OpenSSH, kubectl,mysql client, MySQL workbench等,为用户提供一致的运维体验
  • 功能完善,原生支持 MFA 认证,用户会话审计日志和屏幕录制
  • 云原生集成,用户会话审计日志可发送到 DynamoDB,会话屏幕录制文件可存放到 S3
  • 企业版还支持企业SSO统一认证,权限申请和审批工作流等
Teleport 主要包含三个组件:
  • Teleport Proxy Service:  允许从外部访问集群资源,只有 Proxy 服务才需要对公网开放。
  • Teleport Auth Service:  集群的证书颁发机构,它向客户端颁发证书并维护审计日志。
  • Teleport Node:  一个 Node 就是一个需要被远程访问的目标资源, Node 服务在目标资源上或者附近运行,并使用其原生协议,例如 SSH、Kubernetes API、HTTPS、PostgreSQL 或 MySQL 协议,它将用户请求从 Proxy 路由到其目标资源。
另外Teleport 提供两个 CLI 工具:
  • tctl (Teleport Control): 管理员用来管理 Teleport 集群的命令行工具
  • tsh: 终端用户命令行工具,运行在用户的个人电脑中,用来发起到堡垒机的认证和连接,支持Linux,MacOS,Windows
Teleport 各组件需要开放的端口:
Service
Port
Description
Proxy
3023
For clients SSH connect
Proxy
3024
Used to create “reverse SSH tunnels”
Proxy
3026
For clients database connect
Proxy
3080
HTTPS connection to authenticate tsh users and web users
Auth
3025
Serve its API to other nodes in a cluster.
Node
3022
Teleport’s equivalent of port #22 for SSH.
Teleport 主要目录:
  • /etc/teleport.yaml: Teleport 配置文件
  • /var/lib/teleport  : 数据目录
  • /usr/local/bin/: Teleport 命令行工具目录,包括 teleport, tctl, tsh
Teleport 架构介绍:



  1. 用户登录到 Teleport Proxy,并进行认证,可通过 Proxy 提供的 Web Console,或者 tsh 命令行工具
  2. Proxy 服务将用户连接请求转发到 Auth 服务进行认证, 通过认证后 Auth 服务将为用户颁发的证书,证书将被 Proxy 服务转发回用户,保存在用户电脑中的 ~/.tsh 目录下,证书默认有效期为12h
  3. 用户通过认证后,利用原有CLI或GUI工具,例如 SSH,Kubectl,mysql等,进行远程连接,连接将被 Proxy 代理到后端的目标资源
  4. 被连接的目标资源通过 Auth 验证用户的证书,验证通过后建立与 Proxy 的连接
后端存储:
【Teleport堡垒机介绍】Teleport 集群将不同类型的数据存储在不同的位置。默认情况下,所有内容都存储在 Auth 服务器的本地目录中,下图为各种数据的可选存储方式,我们选择用etcd存储集群状态信息,用ceph 的对象存储保存操作日志。

部署架构图:

server和node节点的安装包是一致的,他们的区别是两者配置文件不同,只有server启动了proxy和auth服务。
授权:
Teleport支持基于角色的访问控制机制,即RBAC授权,在角色中可以定义不同的标签,角色中的标签对应node节点上的标签,最终可以根据需要赋予用户期望的机器权限,
kind: role
metadata:
description: prod-ke-mysql
id: 37057560
name: prod-ke-mysql
spec:
allow:
app_labels:
*: *
db_labels:
*: *
kubernetes_labels:
*: *
logins:
- internal.logins
node_labels:
app: mysql
env: prod
lob: ke
rules:
- resources:
- event
verbs:
- list
- read
deny:
options:
cert_format: standard
enhanced_recording:
- command
- network
forward_agent: true
max_session_ttl: 30h0m0s
port_forwarding: true
version: v3

上面是一个名为prod-ke-mysql 的角色,里面定义了“app: mysql , env: prod ,lob: ke”,这三个标签,如果给用户授予此角色,那么用户登录teleport以后,就只能看到同时满足这三个标签的node节点(服务器),但是,如果业务耦合比较严重,按照此方法授权,就会出现权限过大的问题,那么可以把角色中的标签改为主机名或者ip地址,这样每个角色可以只对应一台机器,就可以做到单机授权了。
需要说明的是,授予用户服务器登录权限以后,只是说明用户可以看到对应的机器,如果服务器上没有对应的用户,依然无法成功登录,不过teleport支持在用户登录服务器的时候调用linux pam模块,自动创建用户,具体操作方法请参考官网文档
简单演示:





    推荐阅读