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
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
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
17
EKS AnywhereとIAM Anywhereを組み合わせてみた
geibee
0
2.9k
Other Decks in Technology
See All in Technology
Webアプリ認証の全体像 / The Big Picture of Web App Authentication
kitano_yuichi
1
450
書籍セキュアAPIについて
riiimparm
0
350
コンテナ・K8s研修【MIXI 26新卒技術研修】#2
mixi_engineers
PRO
1
200
Multicaで30個のミニプロジェクトをAIエージェント運用して見えてきたこと
eiei114
1
670
データエンジニアリングとドメイン駆動設計
masuda220
PRO
15
2.7k
AIコード生成×サプライチェーン攻撃 — PHPが直面する“二重の信頼問題
shinyasaita
0
490
AI研修(Day2)【MIXI 26新卒技術研修】
mixi_engineers
PRO
1
770
データと地図で読む 大井町の「かわるもの、かわらないもの」
yoshiyama_hana
0
380
StepFunctionsとGraphRAGを活用した暗黙知活用のためのRAG基盤
yakumo
0
180
Git 研修【MIXI 26新卒技術研修】
mixi_engineers
PRO
1
460
Flutter研修【MIXI 26新卒技術研修】
mixi_engineers
PRO
1
150
探索・可視化・自動化を一本化 Amazon Quickでデータ活用スピードを上げる方法
koheiyoshikawa
0
210
Featured
See All Featured
Imperfection Machines: The Place of Print at Facebook
scottboms
270
14k
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
250
Scaling GitHub
holman
464
140k
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
260
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
420
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.5k
How Software Deployment tools have changed in the past 20 years
geshan
0
34k
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
1
2.8k
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
620
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
510
Color Theory Basics | Prateek | Gurzu
gurzu
0
400
Building Flexible Design Systems
yeseniaperezcruz
330
40k
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 ご清聴ありがとうございました