使用 aws ssm cli 连接跳板机

哈德韦

共 2836字,需浏览 6分钟

 ·

2021-07-31 10:53

背景

在云原生开发越来越热的今天,公司采用云服务提供商的托管 Kubernetes 集群部署应用很常见。如果采用了 AWS 的 EKS,并且公司网络和集群的网络没有打通的情况下,要查看集群资源,可以通过 AWS 的会话管理器,启动 Web Console 来进行。但是这样手动步骤过多,对开发不够友好。


并且目前的 AWS web console,有一个 BUG,即在 web console 里通过 kubectl edit cm/xxxconfigmap 对 configmap 进行编辑后,无法使用常用的 ESC 或者 Ctrl + [ 退出 vi 的插入模式,因为这两个按键方式都会被浏览器截获,导致失去编辑窗口的焦点。尽管我通过试验 Ctrl + o 可以不失去焦点成功退出vi 的插入模式,但是如果能够不用 web console 是最理想的。



aws ssm cli

可以通过 aws ssm cli 来避免使用 web console。但是直接使用会报连接失败的错误。


解决方案

通过脚本自动登录并获取 AWS 临时令牌,以获得连接权限。


先决条件

Python3 已安装:


python3 --version

Python 3.8.2


克隆脚本

git clone git@github.com:Jeff-Tian/aws-adfs-auth.git

cd aws-adfs-auth



安装依赖

sudo pip3 install --upgrade pip         # upgrade to latest pip3

sudo pip3 install -r requirements.txt   # install dependencies


获取临时令牌

CYBERARK_SERVER=pam.corp.your-company.com ADFS_DOMAIN=adfs.corp.your-company.com ADFS_DOMAIN_USERNAME=cnXXX ADFS_DOMAIN_PASSWORD=***** python3 main.py -r cn-north-1 --no-certificate-verify


安装 ssm 插件

curl "https://s3.amazonaws.com/session-manager-downloads/plugin/latest/mac/session-manager-plugin.pkg" -o "session-manager-plugin.pkg"

sudo installer -pkg session-manager-plugin.pkg -target /

ln -s /usr/local/sessionmanagerplugin/bin/session-manager-plugin /usr/local/bin/session-manager-plugin



连接跳板机

aws ssm start-session --target i-1234-instance-id-of-ec2



使用 kubectl 命令查看集群资源

aws ssm start-session --target i-1234-instance-id-of-ec2

 

Starting session with SessionId: jeff-sqs-test-0a8d0d4f75545e986

sh-4.2$ sudo su

[root@ip-172-20-20-231 bin]# kubectl get pod

NAME                                       READY   STATUS    RESTARTS   AGE

adminer-f5cc4fcc7-dx7d9                    1/1     Running   0          12d

yapi-deployment-mongo-855fff7c6d-fshs4     1/1     Running   0          12d

[root@ip-172-20-20-231 bin]# exit

exit

sh-4.2$ exit

exit

 

 

Exiting session with sessionId: jeff-sqs-test-0a8d0d4f75545e986.



总结

第一次使用需要执行一系列命令,因为需要安装一些依赖。在随后的工作中,只需要执行如下两个命令就行了:


CYBERARK_SERVER=pam.corp.your-company.com ADFS_DOMAIN=adfs.corp.your-company.com ADFS_DOMAIN_USERNAME=cnXXX ADFS_DOMAIN_PASSWORD=***** python3 main.py -r cn-north-1 --no-certificate-verify


aws ssm start-session --target i-1234-instance-id-of-ec2



临时令牌只有一个小时的有效期,但是由于执行命令比起操作网页快得多,因此很方便自动化。


浏览 38
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报