ラベル SCIM の投稿を表示しています。 すべての投稿を表示
ラベル SCIM の投稿を表示しています。 すべての投稿を表示

2018年12月25日火曜日

TechSummitのおさらい④:Azure ADからSaaSアプリへのプロビジョニングのアレコレ

こんにちは、富士榮です。

引き続き、TechSummitのおさらいをしていきます。
今回はAzure ADからSaaSアプリへのプロビジョニングの話しです。

Azure ADからプロビジョニングできるアプリケーションの条件は以下の通りです。

  • ギャラリーに掲載されていてプロビジョニングに対応しているもの
  • SCIM2.0に対応しているもの

現状(2018年12月現在)ギャラリーに掲載されているアプリは3,057個で、プロビジョニングに対応しているのは30個ですので、やはりプロビジョニングはハードルが高いですね。
こちらが一覧です。


サービス名
Amazon Web Services (AWS)
Asana
BlueJeans
Bonusly
Box
Cerner Central
Cisco Spark
Concur
Cornerstone OnDemand
DocuSign
Dropbox for Business
G Suite
GitHub
GoToMeeting
Jive
LinedIn Elevate
LinkdIn Sales Navigator
Lucidchart
Netsuite
Pingboard
Salesforce
Salesforce Sandbox
Samanage
ServiceNow
Slack
Tableau Online
ThousandEyes
Workday
Workplace by Facebook
Zendesk

ここに記載がないアプリケーションの場合や自分で開発しているアプリケーションの場合は、SCIM2.0に対応していればある程度対応させることが出来ます。
ちなみに、以前はSCIM2.0に対応している、かつ「Azure ADでSCIMのエンドポイントの保護をしていること=Azure ADが発行したアクセストークンで認可されること」という縛りがあったのですが、最近カスタムのアクセストークンでもアクセスできるようになりました。(Azure AD上へ固定で設定する必要があり、自動リフレッシュなどもできず微妙ですが)

このシークレットトークンにカスタムのアクセストークンを指定します。指定しなければ従来と同じく、Azure ADで発行されたアクセストークンを使ってAPIへアクセスします。


さて、本題です。
TechSummitでは実際にプロビジョニングをやってみると起きる問題についてG Suiteとの連携を例に解説しました。

もちろんすべてのアプリケーションで発生する問題ではありませんが、ざっくり言うと、

  • 複雑な同期ルールは設定できない(例えば、人事発令後7日以内は所属を新旧で兼務させる、などは無理)
  • プロビジョニング設定をしてテスト接続をして保存するとエラーが出てどうしようもなくなる(これはG Suite限定かもしれませんが)
  • 標準外の属性を定義してマッピングしても同期されない(これもアプリに依存)
のような話があり、カタログスペック的にプロビジョニングに対応してるから使える!と思い込むと痛い目にあいます。

すこし具体的な例とワークアラウンドを含め紹介していきます。

プロビジョニング設定時にエラーが出てどうしようもなくなる件

先にも書いた通り、G Suite限定かもしれませんが、プロビジョニング設定をして保存をした時にエラーが出ることがあります。しかも、このエラーが出てしまうと二度とプロビジョニング設定を行うことが出来なくなります。

どうやら、既知の問題らしく、ワークアラウンドとしてSSO用のGSuiteとプロビジョニング用のG Suiteを分けて定義すると上手く動くんですが、アプリケーションへのユーザの割り当てなど結構面倒くさいです。


追加属性のマッピングが上手く反映されない

これも良くある質問で、アプリケーションの種類にかなり依存する話っぽいです。
例えば、経験上ServiceNowなんかはある程度カスタム属性をマッピングしても動いてくれましたが、G Suiteは全くダメです。
しかも、実環境でよく使われるOU(orgUnitPath)が上手くプロビジョニング出来ないのは致命的でgithubでも昔からissueが立っているくらいです。


同じく、G Suite側で作ったカスタム属性も全く無視されちゃいます。


では、どうするのか?

使えないから諦められるのか?という話になりますが、Azure AD自体のプロビジョニング機能を使うのは、現状ある程度割り切った環境でないとあきらめた方がベターです。

ということで、
  • Azure AD ConnectをMIM的につかう(カスタムMAを使う)
  • Azure FunctionとGraph API Subscriptionを使って自前プロビジョニングする
の2択が現実的です。
※開発を伴うので、サポートをどうするかを含め熟考の上で使ってください。

Azure AD Connectの魔改造

まぁ、みなさんご存知のとおりAzure AD Connectの実体はMIM(Microsoft Identity Manager)です。しかもAzure AD ConnectにはSynchronization Rules Editorが付属しており、かなり優秀なので、MIMにもこのエディタをバックポートしてくれないかな、と本気で思います。

話しがそれましたが、実体がMIMなのでMIM用に作ったカスタム管理エージェントを組み込むとほぼ何でもできます。


ちなみに、MIMとAzure AD Connectではインストール時のフォルダ構成が異なるので、管理エージェントを後から組み込む場合はAzure AD Connectに合わせてバイナリを移動してあげる必要があります。

後は、先のSynchronization Rules Editorで同期ルールを書けばうまく動くようになります。

Graph APIのSubscriptionを使う

別の方法はGraph APIのSubscriptionを使う方法です。
SubscriptionとはAzure AD/Office365上のオブジェクトに特定のイベントが発生した時に外部のAPIへWebhookを飛ばす機能です。
通常はOffice365のメールボックスにメールが配信されたら外部APIを叩く、などといった使い方をするのですが、Azure AD上のユーザに更新がかかったら変更内容を通知する、という使い方をすることでプロビジョニングに応用できます。
ちなみにプロビジョニング処理自体はAzure Function等を使って完全に自前で実装することになります。

Subscriptionを作成する際もGraph APIを使います。
対象のリソース(users)と検知対象のアクション(updated)、Webhook通知先URLを指定してSubscriptionを作成します。

尚、現状だと検知対象のアクションとしてcreatedやdeletedを指定するとエラーが出るのでupdatedしか使えません。作成と削除はAzure ADのプロビジョニング機能を使い、更新はSubscription経由で実施する、という構成にしないといけません。

ちなみに作成したSubscriptionオブジェクトの有効期限は最大3日間なので、期限が切れる前に更新をしないと自動的に削除されてしまいます。


Subscriptionが有効な状態でユーザオブジェクトに更新がかかると指定したURLに対してWebhookが飛んできます。
この内容をパースして適切な処理を行いましょう。G Suiteの場合はAdmin SDKを使ってG Suite上のユーザの属性を更新する、などの処理ですね。



今回はこのくらいです。
プロビジョニングは結構鬼門なので、使う場合は十分に事前調査~準備をしてから使い始めるようにしてください。

2017年2月12日日曜日

[告知]大阪と佐賀でエンタープライズID管理のトレンドの話をします

こんにちは、富士榮です。

2月は大阪と佐賀でID管理、特にエンタープライズでの事情についてお話しさせていただく機会を頂きました。

お近くにお越しの方はぜひお立ち寄りください。(事前申し込みは必要みたいです)

1.三木会@大阪

 インサイトテクノロジーさんが定期的に開催している勉強会です。お酒を飲みながらざっくばらんに技術について語る会、ということです。インサイトテクノロジーさんというとデータベースの専業ベンダさんというイメージですが、過去のイベント情報を見るとたまにデータベース以外のテーマでも勉強会をやっているようです。

 今回はアイデンティティに関してはあまりご存知ない方もターゲットということで、エンタープライズにおいてアイデンティティ管理がどのような意味を持つのか、という基本的な部分から、技術トレンドまで広く・浅くお話しできればと思います。

 開催概要は以下の通りです。
  日時:2017年2月16日(木)18:30~20:30(受付開始18:15)
  場所:インサイトテクノロジー大阪支店(グランフロント大阪)
  タイトル:エンタープライズにおけるアイデンティティ関連技術のトレンド
  申し込み:http://www.insight-tec.com/events-seminars/20170216_3moku


2.統合認証シンポジウム@佐賀

 こちらは毎年佐賀大学で開催されている認証、ID連携に関する学術系のシンポジウムです。これまでは学術系ということでShibboleth/学認の話が中心だったようですが、たまにはエンタープライズの話も、ということでお声がけを頂きました。

 こちらもエンタープライズでのID事情やOpenIDファウンデーション・ジャパンのEnterprise Identity Working Groupでここ数年討議してきたOpenID Connect/SCIMのエンタープライズへの適用に関する話が出来ればと思います。

 開催概要は以下の通りです。
  日時:2017年2月28日(火)13:30~17:30(受付開始13:00)
  場所:佐賀大学本庄キャンパス
  タイトル:エンタープライズにおけるID管理/認証システムのトレンド
  申し込み:http://www.cc.saga-u.ac.jp/ias/#gsc.tab=0

 こちらはNIIの中村先生やマイクロソフトの中田さんなどお馴染みの方々をはじめ、色々な方が講演されるので、それぞれ違った視点でアイデンティティに関して話を聞くことが出来ると思うので、個人的にもとても楽しみです。



それぞれ場所が違うので参加のハードルが高いと思いますが、ご近所の方はぜひどうぞ。

尚、3月は東京で2回ほど登壇させていただく機会を頂きましたので、また日程が近づいたら告知させてもらおうと思います。

2016年3月28日月曜日

OpenID ConnectとSCIMのエンタープライズ利用ガイドライン、(同)実装ガイドライン

こんにちは、富士榮です。

2013年末に第1版が出てから2年3か月を経て、改訂版の「OpenID Connectのエンタープライズ利用ガイドライン」および「(同)実装ガイドライン」が公開されました。

実装ガイドライン

利用ガイドライン


初版では利用ガイドラインと実装ガイドラインが分離されておらず、若干プロトコル寄りに偏った内容でしたが、今回はエンタープライズにおけるID運用の特徴を踏まえたフェデレーションやプロビジョニングに関する考え方をまとめた「利用ガイドライン」と、OpenID Provierや対応するアプリケーション、SCIMを使ったプロビジョニング・サービスの実装に特化した「実装ガイドライン」を別冊とすることにより、より読み手を意識した構成となっています。

各ガイドラインはOpenID Foundation Japanのホームページからダウンロードできますので、ぜひダウンロードして目を通してください。
 https://www.openid.or.jp/news/2016/03/eiwg-guideline.html

私がエクスジェン・ネットワークスの江川さん、セコムの島岡さんと3名で改訂を担当させていただきました利用ガイドラインの中身を簡単に紹介させていただきますと、

  • なぜフェデレーションが必要なのか?
  • エンタープライズとコンシューマのフェデレーションに関する考え方の違いとプロビジョニングの必要性
  • 標準化されたプロビジョニングAPIの重要性
  • アイデンティティとトラスト、身元保証
  • 権限委譲と代理アクセス、トレンドとしてのUMAの紹介

といったキーワードでまとめています。

また、オージス総研の八幡さん、OpenID Foundation Japanのnov氏らでまとめた実装ガイドラインではOpenID ConnectおよびSCIMのプロトコルの解説からユースケースへの適用、実際のサンプル実装例が解説されており、かなりのボリュームになっています。

ID管理・ID連携の企画~検討を行うIT企画の方にも、サービス実装を行う開発者の方にも役立つ内容となっていると思いますので、是非ダウンロードしてご覧ください。

2015年11月18日水曜日

[Azure AD]カスタム・アプリケーション向けプロビジョニングにSCIM2.0のサポート

こんにちは、富士榮です。

IDaaSの主要機能の一つに連携しているアプリケーション向けのプロビジョニング機能がありますが、Azure Active Directory(Azure AD)もGoogle Appsやsalesforce.com、BoxなどメジャーなSaaSアプリケーション向けのプロビジョニングをサポートしてきました。

今回、アプリケーション向けのプロビジョニング機能の強化の一環としてSCIM 2.0(System for Cross-domain Identity Management)のサポートが発表されました。

 Active Directory Teamのblog
  Azure AD Premium now supports SCIM 2.0!
  http://blogs.technet.com/b/ad/archive/2015/11/17/azure-ad-premium-now-supports-scim-2-0.aspx


このニュースを見て、標準ではプロビジョニングできないSaaSアプリケーションでもSCIMをサポートしていればID管理できる!!と思ったのですが、現状はいろいろと制限があります。。。。
(PingOneとかSCIMをサポートしている別のIDaaSへのID同期に使えるかと思ったのですが・・・)

以下が現状の制限事項として大きい点です。
1.SCIMのエンドポイントの保護をAzure ADが行っているサービスのみに対応
  ※Azure ADが発行したOAuth2.0 Bearerトークンを使ってアクセスできるSCIMサーバのみなので、実質自分で開発したアプリケーションしか対象はありません。

2.Azure AD自体がSCIMサーバになった訳ではないので、Azure ADのID管理にSCIMは使えない
  ※これまで通り、Graph APIを使ってID管理をしましょう。

  参考)[Office 365 & WAAD] Graph API を利用したアイデンティティ管理
      http://idmlab.eidentity.jp/2012/12/office-365-waad-graph-api.html


使い方としては、Azure AD Premiumライセンスが割り当たっているユーザでギャラリーからカスタムアプリケーションを追加すると、「アカウント プロビジョニングの構成」メニューが出てくるので、SCIMエンドポイントの設定を行います。


先にも書いたようにSCIMサーバのエンドポイントはAzure ADによって保護されている必要があるため、client idやsecretなどOAuth関連のパラメータを入れる余地はありません。

SCIMサーバの作り方はこのあたりに書いてあります。
 https://azure.microsoft.com/en-us/documentation/articles/active-directory-scim-provisioning/

SCIM用のライブラリも用意されていて、nugetでダウンロードできます。
 https://www.nuget.org/packages/Microsoft.SystemForCrossDomainIdentityManagement/


本当はサードパーティアプリケーションやAzure AD自体へSCIMを使ってプロビジョニングができるようになると良いなぁ、と思いますので今後に期待です。

2015年9月26日土曜日

[SCIM] SCIM2.0がRFCに!

こんにちは、富士榮です。

プロビジョニングの標準仕様策定を目指して2011年にver1.0、2012年にver1.1がリリースされたSCIM(System for Cross-domain Identity Management)ですが、ついにver2.0がRFC化されました。

対象となったのは、以下の3つです。

RFC7642(http://www.rfc-editor.org/rfc/rfc7642.txt)
  System for Cross-domain Identity Management:
  Definitions, Overview, Concepts, and Requirements

RFC7643(http://www.rfc-editor.org/rfc/rfc7643.txt)
  System for Cross-domain Identity Management:
  Core Schema

RFC7644(http://www.rfc-editor.org/rfc/rfc7644.txt)
  System for Cross-domain Identity Management:
  Protocol

ちなみに、OpenIDファウンデーション・ジャパンのEnterprise Identity Working Group(EIWG)ではエンタープライズにおけるOpenID ConnectやSCIMの利用促進を目指し、「OpenID ConnectとSCIMのエンタープライズ利用ガイドライン」を2013年に公開しており、新版を10月にも公開する予定となっていますので、こちらも期待しておきましょう。

 OpenIDファウンデーション・ジャパン エンタープライズ・アイデンティティ・ワーキンググループ『OpenID ConnectとSCIMのエンタープライズ利用ガイドライン』を公開
 https://www.openid.or.jp/working-group/2013/12/openid-openid-connectscim.html


最近では、Oracle Identity ManagementやExgenのLDAP ManagerなどSCIMに対応したプロビジョニング製品も出てきていますし、Ping ONE / Ping FederateなどSCIMを使ってID管理を行うIdP製品やサービスも出てきているので、今後さらに普及していくと思われますので、要チェックですね。

2013年7月14日日曜日

[FIM2010]Google Apps MA 1.1.1 をリリースしました

かなり久しぶりの更新になりましたが、先ほど codeplex にモジュールをアップロードしました。

 Google Apps MA
 - https://fim2010gapps.codeplex.com/



といってもバグフィックスです。
しかも直したのは半年以上前という、、単にアップロードをサボってただけです。

修正ポイントは、
「インポート処理時にページングがうまく実装出来ていなかったので実装した」
の1点のみです。

FIM は CS へインポートする際に MA に設定したページサイズ分のエントリを読み込み終わると一旦 GetImportEntries メソッドを抜け、再度エントリが無くなるまで同メソッドを繰り返し呼ぶ、という動きをするのですが、この際に最後のエントリを読み込み終わったことを FIM 側へ自分で伝えてあげる必要があります。
そのためのプロパティが importReturnInfo.MoreToImport というプロパティで、最後のエントリを読み込み終わったらこの値を true にしてあげれば FIM はすべての Import が完了したという判断をして処理を終わります。

小規模のシステムとの接続であれば MA の設定で大きめの数値をページサイズとして設定してあげれば一回の GetImportEntries 処理で完了するので問題ないのですが、MA に設定できる最大サイズを超えるようなエントリーをインポートする必要がある場合は上記のようなページング処理を実装してあげる必要があります。

ちなみに次の実装予定は
1. Google Provisioning API が 5月に新しい API (Google Directory API)へ変わったのでそこへの対応
2. 合わせて API 認可を現状 ClientLogon(管理者 ID とパスワードを MA に設定する方式)にしているのを OAuth 2.0 に対応させる
の2点を予定していますが、1. の API 変更が結構な大手術になりそうなのでぼちぼちやっていく形になりそうです。
まぁ、これを実装しちゃえば Windows Azure Active Directory の Graph API も SCIM もほぼ同じコードで流用できちゃうので早く実装したいとは思っているのですが、、

ではでは。。

2013年2月28日木曜日

#idcon mini に参加してきた

Identity Conference Mini に参加しました。
 - http://atnd.org/events/36953


今日は、@hdknr さんによる OneID と Self-Issued OP の話と私が SCIM 関係の話をさせてもらいました。

@hdknr さんの OneID、Self Issued OP の話では、 OneID のサービスの話が聴けました。
ざっくりいうと、OP で認証するときに ID / Password の代わりに、スマートフォンを使って認証する、という仕組みのようです。
流れとしては、
1.ブラウザで RP へアクセス
2.OneID によりブラウザ上に QR コードが表示される
3.携帯電話で QR コードを読み、OP へ=認証
4.ブラウザへトークンが渡され、RP へアクセス可能
というような感じでした。

PC と 携帯の間で KeyPair を共有しており、認証済みの携帯で QR コードを使って OneID へアクセスすることで認証とみなす、という形です。

メリットとしては
・パスワードがいらない
・OP へ渡る属性は暗号化されており、OP の運営者でも内容を参照できない
という2点がメインです。


次に、私が SCIM の話をしました。
若干無理やりではありますが、Windows Azure Active Directory がプロビジョニング API として Graph API を採用しているのは何故か?今後サービスプロバイダは SCIM を使うのが良いのか?Graph を使うのが良いのか?という話をしました。結果的に答えはないのですが、私の個人的な考えとしては、SCIM が目指したのはあくまでスキーマやプロトコルの標準化によるコスト削減や複雑性の低減で、Graph の目指すオブジェクト(ノード)とオブジェクト間の関係性(Edge)の表現とは別お世界であり、今後は現行の SCIM の様に同一レポジトリ内のオブジェクト間の関係(memberとmemberofなど)だけではなく、Federation などによる外部レポジトリ上のオブジェクトとの関係性についても表現することが大切になるのではないか?という話をさせていただきました。

以下が、資料です。
スライドにも書きましたが、答えがない世界なので色々と議論が継続的にできれば、と思います。