Tagbangers Blog

Atlassian Crowdの概要

ちょっとCloudと名前が紛らわしい「Crowd」というアトラシアンのサービスを調べました。

このサービスがSingleSignOnに使われているよ、という把握はしていたのですが、いまいち仕組みが分かっていませんでした。
また、Crowdサービス用のライセンスを購入していないのに、弊社で利用しているJiraやConfluenceはなぜSSOできているのかとずっと疑問だったのですが、調べてみるとどうやら埋め込み型のCrowdを使ってるということがわかりました。ざっくり(特にEmbedded Crowdの)概要だけまとめます。

Crowdとは?

Web ベースのアプリケーションの認証と承認を処理するアプリケーション セキュリティ フレームワークのこと。
Crowd を使用することによって、シングル サインオン (SSO) と集中 ID 管理がサポートされ、複数の Web アプリケーションとユーザー ディレクトリを統合できます。

Crowdの構成

  • 管理コンソール ... ディレクトリ・ユーザ・セキュリティ権限を管理
  • 連携API ... 複数のアプリを連携するためのセキュリティアーキテクチャ

これだけです。シンプルですね。これはあくまで「Crowd」をライセンス付きで買った場合の機能です。

Crowd SSOの流れ

CrowdはIdPで、ほとんどのAtlassianサービスは、Atlassian独自のセキュリティフレームワークの「Seraph」を利用しています。
1. ブラウザなどからJiraなどのアプリにアクセス
2. アプリ(Service Provider)の中のSSOフィルタに捕まえられる
 SSOフィルタのCrowd authenticator(Seraphなど)が SSOクッキーを見つけ出し、そこからトークンを抽出
3. Crowdに2で抽出したトークンを渡す
4. CrowdがセッショントークンをCrowdDBのユーザ情報と照らし合わせて認証
 OK の場合、認証済トークンをアプリに返す
5. SSOフィルタがリクエストをビジネスロジックハンドラに渡す
6. ビジネスロジックハンドラがリクエストを処理
7. アプリからブラウザにレスポンス返ってくる

雑な認識図(SSO概要 参考)

Crowdがやること

  • ユーザ管理ユーザーがログインしようとしたときに正しいパスワードが入力されているかどうかを確認

Seraphがやること

  • リクエストがあればそれをユーザに関連づける
  • グローバル管理者権限を持つユーザーのみがWebWorkアクションにアクセスして、管理タスクを実行できるようにする

フローチャート例:(HTTP authentication with Seraph から図借用)


Embedded Crowd

Jira (ver 4.3.x〜)と Confluence は 埋め込みCrowdのコアモジュールのサブセットを持っています。
このためLDAPとの統合はJiraインスタンスをインストールするだけで可能になり、外部サービスとして Crowdインスタンスを統合する必要がなくなりました。

この Embedded Crowd がやってくれることは以下です。

  • JIRAのDBにユーザー、グループ、グループメンバーシップ(ユーザがどのグループに属しているか)のデータを保存 
    • JiraDBまたはConfluenceDBを覗くと、cwd_*** というテーブルがあります。こちらに格納されます。
  • ユーザーの認証(ユーザーのパスワードが一致するかどうかを確認)
  • ユーザー、グループ、グループメンバーシップ(グループからのユーザーの追加と削除)を管理(作成、削除)できるAPIを提供
  • JIRAが外部システムに接続してユーザ/グループデータ(Microsoft AD、LDAP、またはスタンドアロンCrowdサーバなど)を取得できるようにする
  • より速く検索できるように、ローカルデータベースに外部データのコピーを保存し、バックグラウンドで同期する

なるほど、何もしなくてもCrowd使えてるのはこれが理由ですね、、

*Embedded Crowdの雑な認識の図


*ConfluenceとJiraの連携図(Jiraのinternal directoryを使って認証する場合)

JiraからConfluenceへのユーザディレクトリの同期は定期的に行われていますが、手動でやることもできます。




終わりに

とまとめてみたのですが、間違いがございましたらぜひ教えていただけますと幸いです。


参考

SSO概要

Architecture overview

ユーザー管理のために Crowd または別の JIRA アプリケーションに接続する

Reverting from Crowd or Jira applications to Internal User Management

Crowd FAQ

Allowing connections to JIRA for user management

Migration path from Crowd to Crowd Embedded during upgrade to JIRA 4.3.x

HTTP authentication with Seraph