Slide 1

Slide 1 text

DIY Session Manager 氏名 竹中 太基 経歴 学生時代 Web/スマホアプリ開発 2019年4月~ ヤフー入社、サーバーサイドエンジニア 2021年7月~ BTC入社、AWSエンジニア AWS初心者ですがよろしくお願いします! GitHub: regmarmcem

Slide 2

Slide 2 text

モチベーション ・EC2インスタンスにSSOで接続したい ・Session Managerを用いない 参考: DIY Single Sign-On for SSH https://smallstep.com/blog/diy-single-sign-on-for-ssh/ EC2 step cli step ca IdP on Fargate ①IdPにサインイン ②SSH証明書 ③証明書認証 実装を通して、インスタンスにログインするとはそもそもどういうことなのか知る Session ManagerではAWSの資格情報でSSHのような操作が可能 →Session ManagerのGUIはヒントになりそう

Slide 3

Slide 3 text

Session Managerとは Systems Managerの一機能 ➢ EC2インスタンスへのGUI等でのアクセス ➢ 秘密鍵やパスワードの認証を必要としない GUIで数クリックすれば、踏み台なしで任意のインスタンスを操作できる インスタンス選択 Session Managerタブを開く 接続完了

Slide 4

Slide 4 text

ユーザーの端末 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 --document-name AWS-StartSSHSession –debug # 22のOUTPUTを遮断しても接続できる $ sudo iptables –A OUTPUT -p tcp –dport 22 -j DROP $ aws ssm start-session --target --document-name AWS-StartSSHSession –debug GUI/CLIで共通 Internet AWSの内部ネットワーク

Slide 5

Slide 5 text

今回扱う範囲 ユーザーの端末 HTTPS Internet AWS CLI # ssm-userでログインされる $ aws ssm start-session --target --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 ec2-user@ -o ProxyComand=“sh –c <上記のコマンド>” session-managerプラグインのWebSocketとブラウザを接続する Proxy Commandを用いる場合

Slide 6

Slide 6 text

xterm.jsを使った実装 $ aws ssm start-session --target --debug b'{"SessionId":“", “StreamUrl”:“wss://ssmmessages.ap-northeast-1.amazonaws.com/v1/data-channel/”, "TokenValue":“"}' 1. セッション情報を取得 参考 https://xtermjs.org/ 2. WebSocketオブジェクトをxterm.jsのTerminalに渡す ・ブラウザでTerminalを実装するOSS ・Azure Cloud Shell, VSCode, RStudioをはじめ多くの採用例

Slide 7

Slide 7 text

No content

Slide 8

Slide 8 text

まとめ ・Session ManagerのGUIはWebSocketで通信している →SSH over HTTPSという概念もあるらしいので試してみたい ・ソースコードを読むのも大事 GitHub: regmarmcem AWS CLI WebSocket ご清聴ありがとうございました