JumpCloudの紹介

# JumpCloudとは
　JumpCloud (https://jumpcloud.com/) はDirectory-as-a-Serviceであり、SSOをSaaSで提供しているサービスです。OSユーザの管理は専用のagentを通して、クラウドやその他のサービスとはIdPで連携し、それぞれSSOを設定することができます。
　LDAP、ADをフルマネージドで提供しているサービスがほとんどなく、運用コストもあまりかけたくないけど落ちると問題になるサービスなので、こういったSaaSがあるのはありがたいです。AWSでもAWS Directory ServiceというADのサービスがあるのですが、あちらはADサーバを立てなければいけないのと、マルチクラウドでサービスを展開している環境ではなかなか連携しづらかったりで、利用を躊躇してしまいました。

# 料金について
　10人までは無料で使用でき、それ以降は一人10ドルかかります。年間契約にすると7.5ドルになります。
部門の大きさによって費用変動はあると思いますが、小、中規模のチームであればLDAPサーバの構築・運用コストを鑑みると安価に思えます。
https://jumpcloud.com/pricing

# Directory Serviceとして
　ADのような高機能はありません。OS、各種サービスとのSSOを管理するための必要最低限の機能があるといったところでしょうか。SSOという観点ですと、後述するAPPLICATIONSという機能で、色々なサービスにSSOできます。
　ユーザごとのOS上の制御は、POLICIESで実現しています。各端末に対してこの実行は許可する、これは拒否するといった制御をする機能になります。しかし、現在のところJumpCloud側で作成されたデフォルトポリシーしか使用できず、使い勝手はよくないです。このPOLICIESを自由に作成できるといいなと思います。

# 各種機能について
| 名称 | 機能              | 公式説明 URL |
|:--|:--------|:--|
| USERS | OSユーザの管理。公開鍵、対象OS、sudo有無などを設定可能。 | https://support.jumpcloud.com/customer/portal/articles/2449121-getting-started-users |
| SYSTEMS | JumpCloud AgentがインストールされたOSを管理。Linux、Windows、Macが登録可能。 | https://support.jumpcloud.com/customer/portal/articles/2449109-getting-started-systems |
| POLICIES | OSごとにポリシーを設定。ただし、細かなポリシーは設定できず、Jump Cloud側で用意されたポリシーのみ使用できる。 | https://support.jumpcloud.com/customer/en/portal/articles/2703447-getting-started-policies |
| GROUPS | USERSとSYSTEMSをまとめるやつ。 | https://support.jumpcloud.com/customer/en/portal/articles/2703450-getting-started-groups |
| APPLICATIONS | SlackやAWSなどの外部アプリケーションとSSO連携するための設定項目。 <br/>GSuite、DATADOG、Githubなど100以上のサービスとインテグレーションできる。 | https://support.jumpcloud.com/customer/portal/articles/2452565-getting-started-single-sign-on-sso- |
| DIRECTORIES | 他のDirectoryサービスと連携する。GSuite、AD、Office365、JumpCloud ADなど。 | https://support.jumpcloud.com/customer/en/portal/articles/2847837-getting-started-directories |
| COMMANDS | jumpcloud agentがインストールされたサーバに対してコマンドを発行する。<br/>スケジュール実行、Webhook、マニュアル実行が可能。 | https://support.jumpcloud.com/customer/en/portal/articles/2779029-getting-started-commands |
| RADIUS | 文字通りRADIUSサーバと連携する。 | https://support.jumpcloud.com/customer/en/portal/articles/2450967-getting-started-radius |
| SETTINGS | Password Ruleの設定とOrganizationが作れる。OrganizationはJumpCloudのサポートをうける ときなどに使用する。 |  |

## Administorators
　上の表に記載がありませんが、AdministoratorsというユーザがUSERSとは別に存在します。JumpCloudのWeb Consoleにログインする際に一般ユーザとAdministorter Userを選択できるのですが、こちらはWeb Cosnole管理用のユーザになります。下記のような権限設定を各Administortor Userに設定できます。

### 設定項目
* MFA設定
* Role管理
  * Administorator
  * Administorator With Billing
  * Command Runner
  * Command Runner With Billing

## USERS
　USERSはその名のとおりJumpCloud上とagentインストール先のOSで使用するユーザになります。以下の設定項目があります。

* USERNAMEがOS上で作成されるuserになります。FIRST/LAST NAMEで指定した名前はJumpCloudコンソールで表記される名前になります
* Enable Global Administoraterはrootユーザへの昇格有無の設定になります。チェックを入れるとrootユーザになり、sudoユーザ昇格時のパスワード有無も設定できます
* Public KeysにSSHで使用する公開鍵を登録します
* Custom User Attributeはいわゆるタグです。APIでUSERSに何かしたらの管理をする際に利用できる感じです
* Enable as LDAP Bind DN でJumpCloudの提供するLDAPを利用できます

## GROUPS
　GROUPSはUSERSを管理するGROUP of usersと各サーバを管理するGROUP of systemsの二つがあります。

* GROUP of users
  * USERSに登録したUSERをグループ化する
* GROUP of systems
  * SYSTEMに登録された各サーバをグループ化する

どちらから先に作ってもいいですが、GROUP of systemsで環境ごとにサーバをまとめる → GROUP of usersで使用するGROUP of systemsを指定する、という流れになると思います。

### GROUP of usersの制約
　GROUP of users作成時と作成後にLinux Groupも同様に設定できますが、以下の制約があります。

1. GROUP of users名と同名のLinux Groupは作成できない
2. すでにOS上に存在するLinux Groupを上書きすることはできない
3. GROUP of usersで作成したLinux Groupは、GROUP of usersを削除してもOS上のグループは残る。手動削除が必要です。

1の制約がありますので、GROUP of users名はprefix、suffixをつけるなどの工夫が必要です。3あたりは自動で対応してくれると嬉しいと思いました。

## SYSTEMS
　SYSTEMSにはjcagentがインストールされたサーバが自動的に追加されます。前述したGROUP of systemsの追加を手でやると面倒なので、COMMANDSで実行する、OS起動時にスクリプトで登録するといった工夫をすると運用が楽ですね。こちらは違う記事で紹介したいと思います。

## APPLICATIONS
　外部のサービスにSSOできるようにする機能で、各サービスでIdP Private keyとCertificateを発行し、こちらで指定して連携するスタイルです。連携サービスは下記のようなものがあります。一覧はこちら → https://jumpcloud.com/daas-product/sso-single-sign-on
* Github
* Slack
* HipChat
* Dropbox
* Datadog
など

## DIRECTORIES
　既存で設定済みのDirectory Serviceと連携ができます。初めてDirectory Serviceを使用する方は基本JumpCloud謹製のLDAPを使用されるのがよいかと思います。すでにGSuiteやADを運用しており、そのユーザID/パスワードを利用して連携したいなというときに活用できる機能かと思います。

## COMMANDS
　jcagentがインストールされたサーバへのリモートコマンド実行機能です。実行タイミングはマニュアル、Webhook、スケジューリング(ワンショット / 定時実行)があります。WebhookはTrigger名を設定し、SDKから設定したTrigger名を選択すれば実行できます。

## RADIUS
　そのままの意味で、RADIUSサーバとの連携機能です。使用したことはありませんが、ネットワークエンジニアの方としては嬉しい機能だと思います。

## API/SDK
　APIとSDKがそれぞれ提供されております。サーバ作成時のGROUP of systemsへの自動登録作業などはAPI/SDKを用いる必要があります。SDKはRuby と Go とPythonが提供されております。

* Ruby
  * https://github.com/TheJumpCloud/jcapi-ruby
* Python
  * https://github.com/TheJumpCloud/jcapi-python
* Go
  * https://github.com/TheJumpCloud/jcapi-go

Web APIはこちらです。https://docs.jumpcloud.com/2.0

## jcagent
　JumpCloudのエージェントです。インストールは簡単で、以下のコマンドで一式ダウンロード、実行してくてます。鍵の箇所はJumpCloud Web Consoleからダウンロードできます。

```
$ curl --silent --show-error --header 'x-connect-key: YOUR_CONNECT_KEY' https://kickstart.jumpcloud.com/Kickstart | sudo bash
```
上記はLinuxの例になりますが、WindowsとMacも同様に手順が用意されています。

* Agent Deployment via Command-line
  * https://support.jumpcloud.com/customer/en/portal/articles/2389320
  

## まとめ
　数クリックと1コマンドのエージェントのインストールで、ユーザ管理ができるようになるのはいいですね。なるべくユーザ管理に工数を割きたくない場合に、こういったDaaSという選択肢が現れたのは嬉しいです。SDKやAPI、COMMANDSの機能を使用すれば、色々な使い方ができると思いますので、別の記事で紹介をしたいと思います。