AWSシンジサーバー群への管理者アクセス権限を統制するツイートシェアはてブ送るPocketシンジです。sshを利用してサーバーへアクセスする際、IDとパスワードでrootにダイレクトアクセスさせてるケースもままあるでしょうが、監査も通らないし乗っ取りリスク高すぎ問題なので辞めたいところです。クラウドを日常的に利用する方々の場合、通常は証明書認証によってサーバーログインを行っていると思います。証明書ファイルが次々と増えていく問題、証明書ファイルを手に入れれば多くの人がサーバーにログインできちゃう問題は目をつぶるしかないのか。そこでエンプラなどでは、「踏み台サーバー」を作って、そこでアクセス権限をコントロールすることで、サーバーログインへの統制を図るわけですが、第一踏み台から第二踏み台へそして第三踏み台とかいう絶望も現実的に存在している実状です。いうわけで僕らはsshを辞めました。GRAVIRATIONALTeleportを使います。Githubhttps://github.com/gravitational/teleportGRAVIRATIONALhttps://gravitational.com/GRAVIRATIONALの人たちは、元々Rackspaceの中の人で、大量のサーバー管理をどうすりゃええねんというところで開発されたのがTeleportです。Teleportという踏み台システムは、AWSやAzure、GCPなどのクラウドインフラだけではなく、オンプレミスの一般的なサーバーでも稼働しますし、Dockerやk8sもサポートしています。Teleportを経由して接続できるサーバー群は、sshを喋るサーバーです。Server)をサポートしていません。Teleportを経由すると、シェル丸ごとTeleportを利用するので、誰にたいしてどのサーバーにどんな権限でアクセスさせたいかをIdPとの接続などで統合管理できる他、シェル内で入力したコマンドは全て記録され、誰がいつ何をしたのかを「動画」として再生することができます。sshのかわりに、管理配下にしたいサーバーに対して、Teleportのエージェントをインストールするわけです。することで、sshを利用せずにssh風な感じになるってな具合です。おおまかな挙動を説明します。TeleportにログインURLはRoute53でサブドメインを切っています。Teleportの踏み台サーバーは、自分たちで作ります。ユーザー名とパスワードによるログインも可能ですが、管理が面倒なので、統合認証基盤と接続して、一括管理にします。IdPと接続してシングルサインオンを実現させます。IdPが多要素認証をサポートしていれば、サーバーへのログインに多要素認証が追加されるというお買い得感。IdPの、どのグループに所属している人はrootを持っていて、あのグループに所属している人はこのユーザー名でログインさせたいなどをIdPで制御できるというわけです。あなたがアクセスできるサーバーはこちらです2台のサーバーが確認できます。updateでエンターキーしてみました。この操作は記録されているので、それを確認してみます。このケースではブラウザから操作していますが、通常通りの用途として、iTerm2などを利用したローカルのターミナルから各サーバー群へteleportを利用したアクセスをすることも可能です。自由度が高いので決めはないのですが、今回はAWSでTeleportシステムを構築するとこうなるっていうのを紹介します。Teleportを起動する事でAuth⇔Proxy、Auth⇔NodeのJoinを行っています。AuthサーバーAuthサーバーは構築時と同時に証明書を扱うget-certとtokenを扱うpublish-tokenを導入します。Encryptにアクセスを行い、指定ドメインの証明書を取得しS3バケットにアップロードします。publish-tokenは実行時にtctlを実行し、TeleportのサーバーからProxy,Node,Trusted用の各tokenとCAを取得しSSMにアップロードします。ProxyサーバーProxyサーバーの構築時にpush-certとget-tokenが導入されます。push-certは実行時にS3バケットから証明書をダウンロードしてProxyサーバーのWEB証明書として使用します。TokenとCAをダウンロードします。teleportは、ここで取得したTokenとCAを使用して、ProxyサーバーとしてAuthサーバーに紐づきます。NodeサーバーNodeサーバー構築時にget-tokenが導入されます。Tokenをダウンロードします。teleportは、ここでTokenを使用してNodeサーバーとしてAuthサーバーに紐づきます。今回はTerraformとAnsibleを利用することで、AWS環境にちゃちゃっと作ります。Githubに公開したので(動くのは確認しましたが責任は取れないけど)参考にして下さい。パラメータhttps://github.com/cloudnative-co/teleport_renovation/blob/master/ansible/documents/trusted_cluster/PARAMETERS.md既存のサーバーをTeleport配下にしてみようすだちブログのサーバーは、AWSのEC2で動いているので、これをTeleport配下にしてみます。IdPからの一次クレデンシャルを取れるようにする(ウチの場合はIAMのキーを使わずにOktaでフェデレーションしているので)saml2awsをセットアップhttps://github.com/Versent/saml2awsAWSCLIも入れます。ansibleAuthサーバーとProxyサーバーの秘密鍵をssh_configにぶち込むセットアップ時にはAuthサーバーとProxyサーバーにsshしたいので、その設定。~/.ssh/config的な感じ。teleport_renovation/ansibleAnsibleのパラメータをセットアップする適宜、それっぽい値にちゃんと変更してください。ウチの場合はEnterpriseライセンスとかいうカッチョイイのを使っているのでライセンスファイルを指定していますが、OSSで使う場合は、指定しなくて大丈夫です。3080hostsの設定をするディレクトリをひとつ上げて、ansibleディレクトリの中に、hostsを作ります。hosts[teleport-slave]prd-webapp-teleport-slave[teleport-node]prd-shinji-animereview-jpsaml2awsでログインしてクレデンシャルを取得ウチはOktaを使っているので、この手順が必要になるだけです。configureいいかんじでやりましょう。設定できたらログインします。.envrcで、新規ファイル作成。AWS_DEFAULT_REGION="ap-northeast-1"teleportのライセンスファイルをAnsible配下にする一般的にはこの手順は不要ですパスはこんなかんじ/ansible/license.pemAnsibleを実行してサーバー構築いくぜ構築。初期構築時はユーザーが1人もいない状態なので、ユーザー作成が必要です。この場合はadminというユーザーを作ります。admin"Node追加Teleport配下にしたいサーバーを追加するAnsibleを実行します。序盤にhostsを指定しましたが、そこに記述されているサーバーがNodeとして追加されます。install.yaml以上で完成。ウチの環境の場合VPCを跨ぐために、TeleportクラスタをVPCごとに構築しています。クラスタを信頼し合うことで、統合的に管理できるようにするわけです。すだちブログのサーバーを追加しましたが、VPCが違うので、新たなTeleportクラスタとして追加されてることが分かります。ホストネームはAWSが持つ標準のものが利用されているので分かりにくいかもしれませんが、すだちブログサーバー内の/etc/teleport.yamlにホストネームが記述されているので、そこを変更してサービス再起動すればホストネームは意図した名前に変更されます。ローカルのターミナルからTeleport経由でアクセスするsshは使わず、tshというコマンドを利用します。tshのバイナリがダウンロードできるので、落としてそのままおいしく利用させて頂きます。Editionhttps://gravitational.com/teleport/download/公式リファレンスhttps://gravitational.com/teleport/docs/user-manual/課題はまだまだあるが、OSSだから作ればいいのよ過去のコマンド検索したい、本番環境にログインしたらSlack通知させたい、とあるコマンド叩いたらワークフロー回してSlackで承認ボタン押すまで実行させたくない、いろいろ思いつきますが、何もかもが実現できる万能アプリにはなっていません。OSSならば作ればいいのだ。興味ある人、ユーザー会やりませんか!!一部の企業では既にTeleportが活用されているとの話を何社かで聞きました。Githubのプルリク見てても、国内企業に所属している日本の方からのフィードバックが数多くあるのも見えています。国内では認知度も低く、積極的にOSSコミットしてみんなで平和な世界を作ろうではないかということで、おれもおれもという方々でコミュニティを発足したいなと思っています。コメントをキャンセルメールアドレスが公開されることはありません。コメント名前メールアドレスサイトリモート会議で気になるノイズを消す自社のWebサイトを爆速にしたが、あのWebサイトに勝てないRECOMMENDこちらの記事も人気です。