Atrae Tech Blog

People Tech Companyの株式会社アトラエのテックブログです。

OneLogin と LastPass とを SCIM 連携させた話

f:id:atrae_tech:20210215102020j:plain

こんにちは。小倉(@haaaayhay)です。最近は全社にいくつかツールを導入したり、業務の効率化を行ったりしています。

この記事では IDaaS である OneLogin とパスワードマネージャーである LastPass とを連携させた背景、そして連携方法について書いていきます。

SaaS の権限設定作業はつらい

OneLogin 等の IDaaS を導入した企業の目的は単にセキュリティ強化だけではなく、ツールの管理を楽にすることにもあります(それが回り回ってセキュリティ強化に繋がるのですが一旦置いておきます)。

OneLogin では設定によって「どのユーザーがどのツールを使うことができるか」の管理をすることが出来ます。つまり SaaS の利用制限を IDaaS 側で行うことができ、必要最低限のメンバーに必要最低限の認証を与えることができます。

しかしそれだけだと SaaS 内の情報設定を個別で、且つ手動で行うことが必要になります。利用する SaaS が数えるほどであればそこまでつらさを感じないと思いますが、社員数が数百人いて、利用するサービスがかなりの数になっている場合はどうでしょうか。新しいメンバーが入社の度に数ある SaaS の中で権限設定を行い、異動や退社の度に権限を変更・削除する必要があります。この作業を自動化したい思いがでてくるはずです。

基本的にはユーザーの職位や契約形態、所属チームといったルールベースで「サービス内でどのようなことが出来るべきか」「どのリソースにアクセス出来るべきか」という認可が決まってくるはずです。

SCIM というプロトコルによる連携を行うと、IDaaS のユーザー情報とグループ情報とを、連携サービスに対して同期させることが可能になります。IDaaS にユーザー情報を作り込んだ上で、「〇〇という条件のユーザーは △△ という SaaS では ✕✕ というリソースにアクセスできる」というルールを作ることで、各 SaaS における設定の自動化が可能になります。

長くなりましたが、要は SaaS ごとのユーザーの認可の設定を自動化するために SCIM 連携しようということです。

実現したいこと

結論から言うと、OneLogin のユーザー情報とグループ情報とを、LastPass のそれらと同期させることです。

LastPass ではフォルダ機能を使うことが多いです。フォルダの中に共有したいアカウントやパスワードを格納しアクセスを許可するユーザーを登録します。各フォルダにはユーザーだけではなくユーザーの集合体であるグループも登録可能です。

例えば wevox(※) 内で共有しているアカウントがあるとします。上述のようにアカウントはフォルダを介して共有しており wevox のメンバーをそのフォルダに登録しておくことでアクセス可能にします。ユーザーが数人なら問題ないのですが、数十人いるときはどうでしょう。かなり大変そうだし抜け漏れが出てきそうですね。

※ wevox は弊社で開発・提供しているツールの名称、及び提供部署の名称です。
この文脈では後者を指します。

f:id:atrae_tech:20210214171434p:plain

そのため共有フォルダにはユーザーではなくグループをアクセス許可しておきます。そうすれば上記のようなユーザーの登録/編集/削除を OneLogin 内で行うことでその設定が LastPass に反映され、LastPass 内で個別のユーザーを毎度登録したり削除したりすることは不要になります。

問題意識はこんな感じです。ここからは連携の手順を書いていきます。

【前提】OneLogin の用語の説明

OneLogin の用語が多用されるので、用語の説明を簡単にしておきます。

IDaaS である OneLogin はサービス内に以下の情報を入力、管理することが出来ます。

Users

管理したい個人のユーザー情報。名前、メールアドレス、事業部などを登録できます。

f:id:atrae_tech:20210214163343p:plain

Roles

簡単に言うとグループです。柔軟な設定ができるように設計者がグループの単位を自由に決められるようになっています。また個人に対して複数の Role を付与できます。

以下は Roles の例です。

  • wevox Project
  • Green Project
  • yenta Project
  • Engineers
  • Employees
  • wevox-Employees

Mappings

OneLogin 内の設定の作成や変更を自動化する設定のこと。伝えるのが難しいですが OneLogin 内で自動化したいルールを指します。

以下は Mappings の例です。AND 条件、OR 条件での設定も可能です。

  • Users 情報の Department が wevox であれば、wevox という Role に所属させる
  • 「Users 情報の雇用形態が 正社員」且つ「Department が wevox」であれば wevox-Employees という Role に所属させる

用語の説明は以上です。

OneLogin と LastPass とを連携してみる

OneLogin と LastPass との連携は LastPass の公式ドキュメントを見ながら行いました。ただしドキュメントの通りに進めても設定がうまくいかず、サポートに問い合わせた部分もあります。

LastPass の設定情報を取得する

はじめに Policies 内で Permit super admins to reset Master Passwords が有効になっており、1人以上が登録されていることを確認します。万が一設定に失敗したとしても super admin の権限を持っていれば復旧が容易になるためです。f:id:atrae_tech:20210214164201p:plain

それでは実際に設定を行います。super admin のアカウントとして LastPass の Admin Console にログインします。

SETTINGS 内の Directory integrations を選択し、画面内の OneLogin タブをクリックします。

f:id:atrae_tech:20210214164307p:plain

URL に記載されている文字列をコピーして控えておきます。

次に Create Provisioning Token をクリックしトークンを発行します。このトークンも文字列をコピーして控えておきます。

② OneLogin に ① を登録する

LastPass で取得した URL とトークンの情報を OneLogin に登録します。

まず OneLogin に管理者としてログインします。

上部のバーにある Applications とその次の Add Apps をクリックします。検索バーに SCIM Provisioner with SAML (SCIM v2 Enterprise) と入力すると出てくる当該アプリを選択します。

f:id:atrae_tech:20210214164342p:plain

Configurations タブをクリックし、少し下にスクロールすると SCIM Base URL がありますね。ここに先ほど LastPass の管理画面にてコピーした文字列をペーストします。加えて SCIM Bearer Token にも同じようにトークンをペーストします。

2つの入力が完了したら API Connection の enable をクリックします。

f:id:atrae_tech:20210214164904p:plain

次に Provisioning タブをクリックし、プロビジョニングの設定を行います。

f:id:atrae_tech:20210214165024p:plain

Require admin approval before this action is performed の下にあるボックスにチェックを入れていきます。これらにチェックを入れることでプロビジョニングの設定が有効になります。

例えば Create user を有効にすると、OneLogin 側で新規ユーザー登録があり、当人が LastPass にアクセス可能な状態が出来た時に、当人のアカウントが LastPass 内に作成されます。

Delete user を有効にすれば OneLogin 側でユーザーを削除した時に LastPass 内からアカウントが削除されます。

Update user を有効にすれば OneLogin 側でユーザーの情報を変更したり、マッピングを変更すれば LastPass にもそれが反映されます。

ボックスにチェックを入れたら Enable provisioning をクリックします。

ここまでの設定が終わったら右上にある Save をクリックして設定を保存しましょう。

LastPass のドキュメントにある設定はここまでです。次に OneLogin の Roles を LastPass 内の Groups と一致(同期)させる設定を作っていきます。

③ プロビジョニングの設定を行う

マッピングさせるための Role を先に作成しておきます。ここではわかりやすく wevox Project という Role を想定してください。

OneLogin の上部のバーにある Users => Mappings 画面の New Mapping をクリックし、マッピングを作成します。

f:id:atrae_tech:20210214165328p:plain

上の画像の設定は以下を意味します。

  • 各 User の Department に wevox が含まれている場合、
  • その User に wevox Project という Role を付与する。

次に Application 内の mapping を設定します。

さきほど作成した SCIM Provisioner with SAML (SCIM v2 Enterprise) というアプリの Rules を開きます。Add Rule で新しいルールを設定します。これを設定することで OneLogin の Roles を、LastPass の Groups に対応付けることができます。

f:id:atrae_tech:20210214165510p:plain

図のように設定することで以下を実現できます。なお、match には正規表現を使う必要があります。

  • 〇〇 Project に新しい更新が行れた時、
  • その変更を LastPass の Groups にも同期する

OneLogin にユーザーを作成したり削除したりすると LastPass にもその設定が反映されますが、Update user だけ設定がうまくいかずグループ設定が反映されず途方に暮れてしまいました。

④ プロビジョニングの設定を行う

OneLogin のサポートの方に教えてもらった設定をしたところうまくいきました。それがこの項目です。

SCIM Provisioner with SAML (SCIM v2 Enterprise) の Parameters の設定を行います。

画面の Groups フィールドをクリックします。

f:id:atrae_tech:20210214165615p:plain

すると以下のようにポップアップが出てくるので、画像のように設定をします。

f:id:atrae_tech:20210214165627p:plain

ここまでで設定作業は完了です。成功していれば、OneLogin 側の設定が LastPass に反映されているはずです。つまり

OneLogin の Users 情報を作成/編集/削除 → 
OneLogin の Mappings 機能により、Roles が付与される(自動) → 
Roles と LastPass の Groups が同期される(自動)

という設定が End to End で行われます。素晴らしい。

最後に

OneLogin と LastPass とは SAML2.0 では連携を行いません。あくまで SCIM 連携のみです。明示されているわけではないので推測の域をでませんが、LastPass が OneLogin 側に認証を握らせたくないのかなと思っています。

LastPass はログインのためにマスターパスワードを設定する必要があり、これを紛失した場合、復旧させるのが結構大変です。これは LastPass のマスターパスワードをサーバーに保管しないためです。セキュアさと透明性を保つためにここまでやっているので、LastPass の認証部分を他のツールに持たせたくないのではないかと考えています。

最後に②

②と言いはじめるともはや「最後にとは?」という話になってきますが、最近アトラエで採用スライドを作りました。

もしこの記事を見た上で弊社アトラエにも興味を持ってくださったら、以下のスライドも御覧ください〜!

speakerdeck.com