Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
DIY Session Manager
Search
geibee
February 25, 2022
Technology
290
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
DIY Session Manager
geibee
February 25, 2022
More Decks by geibee
See All by geibee
レガシー刷新と現行踏襲 - 現行業務を維持しながらシステムを刷新する要望にどう向き合うか
geibee
0
26
EKS AnywhereとIAM Anywhereを組み合わせてみた
geibee
0
2.9k
Other Decks in Technology
See All in Technology
AIのためのEthernet技術動向 (SerDes)
markunet
1
270
LLM・AIエージェントシステムベストプラクティス
shibuiwilliam
6
1.6k
名刺メーカーDevグループ 紹介資料
sansan33
PRO
0
1.2k
Sansan Engineering Unit 紹介資料
sansan33
PRO
1
5k
Genie Codeハンズオン応用編
taka_aki
0
140
Oracle MCP Servers Explained
thatjeffsmith
0
350
Contract One Engineering Unit 紹介資料
sansan33
PRO
0
19k
What's new in Go 1.27?
ciarana
0
290
AIに狂うスタートアップが、あえて「人との協働」に全振りした新卒エンジニア研修 / New Graduate Engineer Training at a Startup Accelerating AI Adoption
ohnoeight
0
170
Sets in Go
ramalho
1
1.2k
:syncing_time:
sksat
2
220
生成 AI の基礎 〜 サンプル実装で学ぶ基本原理
enakai00
7
4.5k
Featured
See All Featured
How STYLIGHT went responsive
nonsquared
100
6.2k
Paper Plane (Part 1)
katiecoart
PRO
1
10k
GitHub's CSS Performance
jonrohan
1033
470k
The World Runs on Bad Software
bkeepers
PRO
72
12k
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
500
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
490
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
123
22k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
23k
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
1
280
Crafting Experiences
bethany
1
260
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
420
Become a Pro
speakerdeck
PRO
31
6.2k
Transcript
DIY Session Manager 氏名 竹中 太基 経歴 2019年4月~ ヤフー入社、サーバーサイドエンジニア 2021年7月~
BTC入社、AWSエンジニア GitHub: geibee
モチベーション ・EC2インスタンスにSSOで接続したい ・Session Managerを用いない 参考: DIY Single Sign-On for SSH
https://smallstep.com/blog/diy-single-sign-on-for-ssh/ EC 2 step cli step ca IdP on Fargate ①IdPにサインイン ②SSH証明書 ③証明書認証 実装を通して、インスタンスにログインするとはそもそもどういうことなのか知る Session ManagerではAWSの資格情報でSSHのような操作が可能 →Session ManagerのGUIはヒントになりそう
Session Managerとは Systems Managerの一機能 EC2インスタンスへのGUI等でのアクセス 秘密鍵やパスワードの認証を必要としない GUIで数クリックすれば、踏み台なしで任意のインスタンスを操作できる インスタンス選択 Session Managerタブを開く
接続完了
ユーザーの端末 EC2インスタンス AWSの内部システム HTTPS HTTPS※ Session Managerの接続の流れ HTTPS経由でAWSの踏み台に接続し、AWSの内部ネットワーク経由でEC2に接続 # 443のOUTPUTを遮断すると接続できなくなる
$ sudo iptables –A OUTPUT -p tcp --dport 443 -j DROP $ aws ssm start-session --target <instance-id> --document-name AWS-StartSSHSession –debug # 22のOUTPUTを遮断しても接続できる $ sudo iptables –A OUTPUT -p tcp –dport 22 -j DROP $ aws ssm start-session --target <instance-id> --document-name AWS-StartSSHSession –debug GUI/CLIで共通 Internet AWSの内部ネットワーク
今回扱う範囲 ユーザーの端末 HTTPS Internet AWS CLI # ssm-userでログインされる $ aws
ssm start-session --target <instance-id> --document-name AWS-StartSSHSession –parameters ‘portNumber=%p’ func (s *Session) Execute(log log.T) (err error) { (中略) if err = s.OpenDataChannel(log); err != nil { log.Errorf("Error in Opening data channel: %v", err) return } } 参考 https://github.com/aws/session-manager-plugin # ec2-userでログインされる $ ssh –i <path-to-key> ec2-user@<instance-id> -o ProxyComand=“sh –c <上記のコマンド>” session-managerプラグインのWebSocketとブラウザを接続する Proxy Commandを用いる場合
xterm.jsを使った実装 $ aws ssm start-session --target <instance-id> --debug b'{"SessionId":“<session-id>", “StreamUrl”:“wss://ssmmessages.ap-northeast-1.amazonaws.com/v1/data-channel/<params>”,
"TokenValue":“<token-value>"}' 1. セッション情報を取得 参考 https://xtermjs.org/ 2. WebSocketオブジェクトをxterm.jsのTerminalに渡す ・ブラウザでTerminalを実装するOSS ・Azure Cloud Shell, VSCode, RStudioをはじめ多くの採用例
None
まとめ ・Session ManagerのGUIはWebSocketで通信している →SSH over HTTPSという概念もあるらしいので試してみたい ・ソースコードを読むのも大事 GitHub: geibee AWS
CLI WebSocket ご清聴ありがとうございました