#シングルサインオン(SSO)とは
シングルサインオン(英語:Single Sign-On、略称:SSO)は、一度のユーザ認証処理によって独立した複数のソフトウェアシステム上のリソースが利用可能になる特性である。この特性によって、ユーザはシステムごとにユーザIDとパスワードの組を入力する必要がなくなる。
[シングルサインオン Wikipedia] (https://ja.wikipedia.org/wiki/%E3%82%B7%E3%83%B3%E3%82%B0%E3%83%AB%E3%82%B5%E3%82%A4%E3%83%B3%E3%82%AA%E3%83%B3)
#SSOってなにが便利なの
https://www.ogis-ri.co.jp/pickup/themistruct/note/note_sso01.html
- 複数のシステムを利用する際に、都度パスワードを入力する手間を省略できる。
- システム利用者のパスワード忘れ、パスワード入力ミスによるアカウントロック、パスワード再発行といった手間を削減できる。
- システム利用者のパスワード関連の問題に対応するための人員(情報システム部のヘルプデスクなど)、コストを削減できる。
- (SAML [security assertion markup language, 認証を行う際の規格] などを用いることで)第三者にパスワード情報を渡すことなく、第三者のシステムへのサインオンが可能となる。このため、パスワード漏洩リスクを低減することにつながる。
SSOのデメリットは?
- シングルサインオン製品自体に不正アクセスされると、シングルサインオン製品の先にあるシステム・サービス全てに不正アクセスできてしまう。
- 製品によって費用が高額となる。特に従業員数が多い企業にとっては、年間億単位の負担が求められる場合がある。
- リバースプロキシ型のように、一点にアクセスが集中する方式の場合は、シングルサインオンの認証速度に遅延がみられる場合がある。
#SSOの実現方式
よく使われるのは下記の3つ。
- エージェント方式
- リバースプロキシ方式
- フェデレーション方式
参考
https://www.ogis-ri.co.jp/pickup/themistruct/note/note_sso01.html
今回はSAMLを用いたフェデレーション方式でやります。
###SMALの長所
- 信頼性が高く、設定・構築が簡単
- セキュアな通信・やり取りが可能認証情報/認可情報もSAMLでやりとりされるので、Webアプリケーション側で情報を持たなくて良い
###SAMLの短所
- インターネット上のWebアプリケーション、クラウドサービスならSAMLは当たり前のように対応しているが、社内の業務システムでSAMLに対応している、というパターンはほぼない。そのため、対応していないなら、既存Webアプリケーションの改修が必須
- SSLを使用する関係で、証明書の用意が必要
#SAML SSOの仕組み
SAMLとは、Security Assertion Markup Languageの略称であり、OASISによって策定された異なるインターネットドメイン間でユーザー認証を行うための XML をベースにした標準規格です。
SAMLによる認証フロー
https://boxil.jp/mag/a2950/
-
SP(Service Provider)
WEBサービスの提供側、認証情報を利用する側。
この人アクセスしたがっているから認証してあげてね、とお願いする側です。
例:Office, Jira, Salesforce -
Idp(Identity Provider)
認証情報を提供する側のこと。
この人ログインできたからサービス利用させて大丈夫だよ、ちなみにこんな情報持っている人だよ、と教えてあげる側です。
例:Okta, AzureAD, OneLogin
#環境構築
今回はIdP側をOkta、SP側をJiraでSAML SSOのアドオンを使用して環境構築する。
IdPをOktaにした理由
https://www.okta.com/resources/access-management-leader-gartner-magic-quadrant/
###環境
- Jira 8.3.2 (Server版)
- Okta 評価環境
- Jira用のSAML SSOアドオン SAML Single Sign On (SSO) Jira, SAML/SSO
###OktaのユーザーをJiraに同期する
参考:https://wiki.resolution.de/doc/usersync/latest/okta-configuration
Okta側:
1.管理者権限を持つユーザーとしてOktaにログイン。
2.右上の管理 ボタンをクリック。
3.セキュリティにカーソルを合わせ、APIをクリック。
4.トークンをクリック。
5.トークンの作成をクリック。
6.トークンに名前を付け、トークンを作成 をクリック。
7.トークン値をコピー、一度しか表示されないので注意。
Jira側:
1.SAML SSOアドオンをインストール
2.右上の歯車>ユーザー管理>User Sync
3.Add Connector>OKTA Connector
4.名前を設定し、「Okta Domain」を挿入し、「API Token」のトークン値を入力します。
5.Sync
##Tips
###ユーザーの履歴、グループ、チケットが保持されるように、内部ディレクトリ(またはLDAPなど)をUserSyncディレクトリに移行する
参考:https://wiki.resolution.de/doc/usersync/latest/knowledge-base/how-to-migrate-an-internal-directory-to-usersync
usernameがJiraインターナルとOkta側で一致するユーザーのみ移行可能。
最初のUsersync時のみ引き継ぎ処理が行われる。
※Usersyncディレクトリへ移行すると、パスワードを保持していないためパスワードログインができなくなります。
^問題になるのはUsersyncディレクトリの管理者アカウント。Websudoでパスワード入力が必要なので管理者画面を触れなくなる。
#####対応策
- Usersyncディレクトリのユーザーに対して個別にパスワードを付与する。個別にパスワードを付与されたユーザーはパスワードログインが可能になる。
- Websudoを無効化する
###Jiraのユーザー名を、OktaのログインIDのドメイン部分を省略したものにしたい
Transformations
https://wiki.resolution.de/doc/usersync/latest/knowledge-base/how-to-migrate-an-internal-directory-to-usersync#id-.HowtoMigrateanInternalDirectorytoUserSyncv1.1.x-Transformations
Oktaの特定のグループのユーザーのみJiraと同期する
https://wiki.resolution.de/doc/usersync/latest/knowledge-base/how-to-migrate-an-internal-directory-to-usersync#id-.HowtoMigrateanInternalDirectorytoUserSyncv1.1.x-Localgroups
インターナルの特定のグループのみUsersyncディレクトリに移行する
###Oktaのカスタム属性をJiraの属性とマッピングしたい
Oktaにカスタム属性を追加する
https://support.okta.com/help/s/article/How-to-create-a-new-custom-attribute-in-Okta
Usersync の設定画面でJIRA の Username とOkta の profile.JiraID をマッピング
####SAML SSOの認証要素を変更する場合は、Okta とJira で設定を合わせる
前提条件:
Usersync の設定画面でJIRA の Username とOkta の profile.JiraID をマッピングして同期済
SP側(JIRA)はUsernameで認証
IdP側(Okta)はカスタム属性(JiraID)で認証
Oktaの設定
Okta認証要素をJiraIDに設定する
https://developer.okta.com/docs/reference/okta-expression-language/#okta-user-profile
Jiraの設定
Authentication AttributeをUsername(OktaのJiraID)にする。
### Just-In-Time Provisioning
https://wiki.resolution.de/doc/saml-sso/latest/jira/setup-guides-for-saml-sso/okta/okta-with-just-in-time-provisioning
UsersyncなしでSAML SSOの情報でJiraにユーザーを作成してログインを許可する
- ユーザーがログインしないとJira内にユーザーが作成されない
JiraにOktaの属性情報を追加したい
Attribute MappingでJiraのユーザープロパティに属性を登録できる
JIRA.PROP.{key} key は任意。
参考
[シングルサインオン (SSO) とは何か] (https://support.trustlogin.com/hc/ja/articles/360010538394-%E3%82%B7%E3%83%B3%E3%82%B0%E3%83%AB%E3%82%B5%E3%82%A4%E3%83%B3%E3%82%AA%E3%83%B3-SSO-%E3%81%A8%E3%81%AF%E4%BD%95%E3%81%8B)
https://boxil.jp/mag/a2950/
https://www.ogis-ri.co.jp/pickup/themistruct/note/note_sso01.html