Teleportとは
teleportは一言で説明するのが難しいのですが、次世代の踏み台サーバーのようなアプリケーションです。 IDとパスワードだけの認証だけではなく、二要素認証に加えてGithubでのサインインなど様々な認証方法を取って、 ユーザーにsshを始めその他のwebアプリケーション、Kubernetes、Database、Remotedesktopへのアクセスを許可することができます。
特に、自宅サーバーの文脈では、IDとpassだけでログインできるのは怖いので公開鍵認証を用いてsshを開けている人が多いと思いますが、 出先のPCからちょっとアクセスしたいとか、新しい端末を追加するたびに鍵を登録するとか、結構面倒ですよね。
Teleportを使うとID/Passよりも強固な認証が使える上、webUIでsshのコンソールが開けたり、かなりいい感じです(雑)。
そんなTeleportですが、TeleportはClusterと呼ぶいわゆる認可サーバーと、アクセスされる側のサーバーの集団とか、 さらにはCluster同士での認可情報の受け渡しなどできることが盛りだくさんで、とにかく一旦イジってみないと雰囲気がつかみにくい感じなんですよね。
というわけで簡単にお試しできるようなdocker-composeファイルを作成したので、使い方などを加えてご紹介します。
Docker-compoesでセットアップ
こちらのGithubレポジトリになります。 https://github.com/totegamma/docker-teleport-test
これを使うと、認可などを行う代表的なノード(proxy)が1つと、ssh接続されるだけのぶら下がりノードが2つ生成されます。 それぞれのサーバーにguestという名前のユーザーもついでに作っています。
結構シンプルなので簡単に説明しちゃうと、各々のcontext (proxy/, node/)の中に入っているteleport.yamlが設定ファイルです。
ほぼほぼデフォルトで書き出される物で、ホスト名をちょこっと変えたり、子ノード側で不要なサービス(authとか)を切ったりだけしてあります。
dockerfileでは公式のteleportのインストール手順を自動化しているだけですね。pproxy側はCMDを指定して、コンテナが立ち上がったら自動的にteleportを起動するようにしています。
ユーザーの追加
proxyノードにアタッチします。 ユーザーの追加は次のコマンドで行います。
|
|
この例ではadminユーザーを、access, auditor, editorの3つの役職で、なおかつrootユーザーかguestユーザーとしてログイン可能という設定で作っています。
実行例:
|
|
すると、アカウント作成用のURLが吐き出されます。proxy-nodeはノード名をlocalhostに設定しておいたので、https://localhost:3080のリンクが吐き出されています。 個のリンクをクリックしてページを開いてみます。(SSLの設定をしていないので自己署名証明書が変わりに使われます。テストのため、ブラウザの警告を無視してアクセスします。)
するとサインアップ画面が表示されました!2FAも登録してサインアップを完了させます。
トップページはこんな感じです。Serversにlocalhost(proxy-node)が表示されていますね!
右のCONNECTからユーザー名を選択してみましょう。webUIでSSHコンソールを開くことができます。
また、Activity>SessionRecordingsを開くと、セッションで行った動作がビデオで再生されます。(typoしている様子もバッチリ映ります…)
ほかにもいろんなことがWEBUIからできます!せっかくのテスト環境なので色々メチャメチャに弄っちゃいましょう。
組み込みロールについて
teleportはロールベースでアクセス権限の管理ができます。 ロールは自分でカスタマイズして作成することができますが、それはそれとして組み込みのロールが存在します(さっきadminアカウントを作るのに指定したaccess, auditor, editorがそうですね!)。 3つのロールはそれぞれ次のような説明になっています。
- access: Access cluster resources
- auditor: Review cluster events and replay sessions
- editor: Edit cluster configuration
なんかあまりこの組み込みロールに関するドキュメントを見つけられなかったのですが、現在存在するロールについてはtctl get roles
で詳細を見れるのでそれがドキュメントですね(是非試してみてください)
端末からログインしてみよう
ローカルのPCから接続するためにはtshコマンドを使います。適宜インストールしてください。
んで、まずプロキシーに対してloginをします。また、証明書が信頼されてないので–insecureオプションをつけます。
実行してみるとこんな感じです。
|
|
ついでに、tsh clustersでログインしたクラスターの情報が、 tsh lsでアクセス可能なリソースの一覧が見れます。
ちゃんとlocalhostのサーバーが表示されていますね。
ではsshアクセスしてみましょう。 tsh sshコマンドでできます。
|
|
ログインできました!ヤッタネ。
他のノードを接続してみる
配布しているdocker-composeファイルではメインのproxyノードの他に2つのプロセスを立てています。 それらもつなげちゃいましょう!とっても簡単です。
proxy-nodeでtctl tokens add --type=node
をします。
そしたらjoin用のコマンドが吐き出されるので、joinさせたい別のdockerプロセスにアタッチして
|
|
表示が増えました!
次…?
次はまずノードのSSL化をしたいですし、他にもgithubとの接続や、より詳細なアクセス管理などをしたいですね。 またわかったことがあったら記事にする予定です。