SaaSツールを安全に利用するために追加セキュリティを考える

セキュリティを追加したい理由

slackやmiroなど、便利なSaaSが増えてきていますが、各SaaSで設定できるセキュリティ項目はバラバラです。
そのため、いざプロジェクトでそれらを使おうとしても、二要素認証がないからNG、IPアドレス制限ができないからNGなど、セキュリティ設定が原因で使えないケースが考えられます。心当たりのある方も多いのではないでしょうか?
そういった問題を回避し、安全にSaaSを使用するためにも、「SaaSに任意のセキュリティを適用」、「利用できるメンバーを適切に管理」は是非実現したいです。
そういった要望に応え、SaaSを安全に利用する方法を考えたので、ご紹介します。

4案の紹介

「SaaSに任意のセキュリティを適用」、「利用できるメンバーを適切に管理」という要望を、今回はシングルサインオン(SSO)の仕組みを使用し解決しようと考えました。

ログインすると、各SaaSへのログインは不要となるようなシステムを自分たちで用意できたとします。
これは自分たちで用意したものなので、もちろん任意のセキュリティを適用することができます。
また、用意したシステムを起点に各ツールにSSOするため、システムの管理者がシステムのユーザーを管理することで、SaaS利用ユーザーの管理も行えます。
この状態であれば、「SaaSに任意のセキュリティを適用」「利用できるメンバーを適切に管理」が達成できていることが分かります。

検討・実験した構成案が4つあるので、それぞれを紹介したいと思います。

参考:シングルサインオン(SSO)とは-概要・仕組み | GMOトラスト・ログイン(SSO/IDaaS)
https://trustlogin.com/sso/

構成案

案①.SAML/OIDC + keycloakサーバ構築
案②.代理認証 + リバースプロキシサーバ構築
案③.ソーシャルログイン(google) + ソーシャルログインアカウント用OTP表示システム構築
案④.ソーシャルログイン(slack) + slackメールログインOTP表示システム構築
※OTP = One Time Password

案①.SAML/OIDC + keycloakサーバ構築

各SaaSにはSAML/OIDCでSSOログインを行い、ログイン情報を管理・受け渡すサーバ(例ではkeycloak)に任意のセキュリティを適用するという案です。
以下のような特徴があります。
・構築が簡単
・SAML/OIDCでのSSOログイン機能はほとんどのSaaSで有償プランのオプション

ユーザーのSaaS使用までの流れです。
1.ユーザーはkeycloakにログインを行う
2.ユーザーはkeycloakログイン後、各SaaSにアクセスする
3.SSO設定されたSaaSは、アクセスしたユーザーの情報をkeycloakに要求する
4.keycloakは、認証中のユーザーの情報をSaaSに提供する
5.SaaSは、keycloakから取得したユーザー情報に基づき、ユーザーにサービスを提供する

参考:Keycloak とは?動作確認や機能、特徴などを解説 | OSSサポートのOpenStandia™【NRI】
https://openstandia.jp/oss_info/keycloak/
参考:SAMLとOIDC: 知っておくべき、すべてのこと | OneLogin
https://www.onelogin.com/jp-ja/learn/oidc-vs-saml

案②.代理認証 + リバースプロキシサーバ構築

各SaaSへのアクセスをリバースプロキシサーバを通して行うという案です。
ログイン処理もリバースプロキシサーバに行わせることで、各SaaSに直接アクセスできないような作りにすることができます。
以下のような特徴があります。
・構築が困難
・各SaaSに対し、ログイン方法などの個別の検証・実装が必要

ユーザーのSaaS使用までの流れです。
1.ユーザーはリバースプロキシサーバにログインする
2.リバースプロキシサーバはログインユーザーごとに事前用意した情報で、各SaaSに代理ログインを行う
3.各SaaSはログイン情報をリバースプロキシサーバに返却する
4.ユーザーはリバースプロキシサーバを通じ、各SaaSにアクセスする 例:https://reverseproxy.insurtechlab.net/app/miro/
5.リバースプロキシサーバは3.で取得した認証情報を付与し、各SaaSにリクエストを送る
6.各SaaSは5.のリクエストを、ログイン後ユーザーからのリクエストと解釈し、レスポンスを返却する
7.リバースプロキシサーバはレスポンス内のURL部分を変換し、ユーザーにレスポンスを返却する 例:https://miro.com/app/miro/dashboard → https://reverseproxy.insurtechlab.net/app/miro/dashboard

参考:リバースプロキシとプロキシの違いとは?それぞれのサーバの仕組みは? | サイバーセキュリティ情報局
https://eset-info.canon-its.jp/malware_info/special/detail/201021.html

案③.ソーシャルログイン(google) + ソーシャルログインアカウント用OTP表示システム構築

各SaaSにはGoogleアカウントでのソーシャルログインでSSOログインします。
このGoogleアカウントのアプリ二要素認証を有効化し、ログイン時に求められるOTPを表示するシステムを作成します。
このシステムに任意のセキュリティを適用するという案です。
以下のような特徴があります。
・構築が容易
・対応するSaaSが多い

ユーザーのSaaS使用までの流れです。
1.ユーザーはシステムにログインする
2.システムはユーザーのもつgoogleアカウントのOTPを表示する
3.ユーザーは表示されたOTPを使用し、googleにログインする
4.ユーザーは「googleでログイン」機能を使用し、各SaaSにログインする

参考:Google アカウントを使用して他のアプリやシステムにログインする – パソコン – Google アカウント ヘルプ
https://support.google.com/accounts/answer/112802?hl=ja&co=GENIE.Platform%3DDesktop
参考:2段階認証コードを計算するプログラムを書いてみた – Qiita
https://qiita.com/waaaaRapy/items/8549890bda4f8ad33963

案④.ソーシャルログイン(slack) + slackメールログインOTP表示サーバ構築

Slackにはメールアドレスと、メールアドレスに届くOTPを入力しログインする方法があるので、これを利用します。
メールを受信・確認できるサーバを作成し、ログイン時に求められるOTPを表示できるシステムを作成します。
このメールサーバを使用しslackアカウントを作成し、各SaaSにはslackアカウントでのソーシャルログインでSSOログインします。
このシステムに任意のセキュリティを適用するという案です。
以下のような特徴があります。
・構築が容易
・対応するSaaSが少ない

ユーザーのSaaS使用までの流れです。
1.ユーザーはシステムにログインする
2.システムはユーザーのもつslackアカウントのOTPを表示する
3.ユーザーは表示されたOTPを使用し、slackにログインする
4.ユーザーは「slackでログイン」機能を使用し、各SaaSにログインする

参考:Slack にサインインする | Slack
https://slack.com/intl/ja-jp/help/articles/212681477-Slack-%E3%81%AB%E3%82%B5%E3%82%A4%E3%83%B3%E3%82%A4%E3%83%B3%E3%81%99%E3%82%8B
参考:CentOS7でメールサーバを構築する(最新版のPostfix+Dovecot)
https://www.lab-infra.com/mail/postfix-dovecot

4案の評価表

各構成案の評価をまとめて表にしてみました。

・・・というまとめ表をつくりましたが、結局、自身のチームやプロジェクト、使用したいSaaSにあった形態案がどれなのか、はっきりしない方も多いと思います。
そういった方に向け、適した形式を選択ができるようなyes/no表を作成したので、ぜひご活用してみてください!

4案yes/no表