青春须早为,岂能长少年。这篇文章主要讲述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 Proxy Service: 允许从外部访问集群资源,只有 Proxy 服务才需要对公网开放。
- Teleport Auth Service: 集群的证书颁发机构,它向客户端颁发证书并维护审计日志。
- Teleport Node: 一个 Node 就是一个需要被远程访问的目标资源, Node 服务在目标资源上或者附近运行,并使用其原生协议,例如 SSH、Kubernetes API、HTTPS、PostgreSQL 或 MySQL 协议,它将用户请求从 Proxy 路由到其目标资源。
- tctl (Teleport Control): 管理员用来管理 Teleport 集群的命令行工具
- tsh: 终端用户命令行工具,运行在用户的个人电脑中,用来发起到堡垒机的认证和连接,支持Linux,MacOS,Windows
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. |
- /etc/teleport.yaml: Teleport 配置文件
- /var/lib/teleport : 数据目录
- /usr/local/bin/: Teleport 命令行工具目录,包括 teleport, tctl, tsh
- 用户登录到 Teleport Proxy,并进行认证,可通过 Proxy 提供的 Web Console,或者 tsh 命令行工具
- Proxy 服务将用户连接请求转发到 Auth 服务进行认证, 通过认证后 Auth 服务将为用户颁发的证书,证书将被 Proxy 服务转发回用户,保存在用户电脑中的 ~/.tsh 目录下,证书默认有效期为12h
- 用户通过认证后,利用原有CLI或GUI工具,例如 SSH,Kubectl,mysql等,进行远程连接,连接将被 Proxy 代理到后端的目标资源
- 被连接的目标资源通过 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模块,自动创建用户,具体操作方法请参考官网文档
简单演示:
推荐阅读
- #yyds干货盘点#jackson学习之六(常用类注解)
- #yyds干货盘点# Python网络爬虫之js逆向之远程调用(rpc)免去抠代码补环境简介
- go语言学习--注释
- Shell标准输入输出和错误
- awk-printf 语句自定义函数
- MySQL数据库——索引
- Nginx Rewirte指令
- 笨叔(ARM64体系结构与编程之cache必修课(下))
- #私藏项目实操分享#愚公系列2022年02月 阿里云 无影云桌面产品测评