Quantcast
Channel: IdM実験室
Viewing all 769 articles
Browse latest View live

[Azure AD+PingAccess]Basic認証のあるバックエンドサイトへアクセスする

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

前回はAzure ADとPingAccessの組み合わせで、PingAccessのバックエンドに構成されたHTTPヘッダ認証のサイトをAzure AD Web Application Proxy(Azure AD WAP)で公開する構成を紹介しました。

PingAccessは色々と器用なツールなので、既存のアプリケーションがBasic認証だった場合にもある程度対応ができます。今回はPingAccessのバックエンドのサイトがBasic認証で構成されている場合の設定を紹介します。

尚、「ある程度」と書いたのはBasic認証がユーザのIDとパスワードをエンコードしたものを認証ヘッダにつけるという仕組みである以上、Password VaultingのようなFederationと相反しているので、固定のIDとパスワードをPingAccessが投げ込むことしかできないため、個別のユーザ認証とはならない為です。

では、早速。

◆サイトを用意する

何はともあれ、Basic認証を要求するサイトを作ります。今回はIISで構成しました。
PingAccessのサーバからアクセスしてBasic認証が要求されることを確認しておきます。


◆PingAccessのSite Authenticatorを作成する

SitesメニューよりSite Authenticatorを作成します。

TYPEにBasic Authentication、USERNAMEとPASSWORDにBasic認証に使うユーザ名とパスワードを設定します。
ここが微妙なところで、個別のユーザ毎ではなく、Authenticator単位での設定しかできないので、実際のサイトへアクセスするユーザ名とパスワードが共通になってしまいます。

◆SiteにAuthenticatorを紐づける

Authenticatorを作ったらSiteに紐づけます。既存サイトであれば構成を編集して、新規サイトなら追加をして、SITE AUTHENTICATORSに先に作成したSite Authenticatorを設定します。

その他の設定は前回行ったものと同じなので、詳細は省略します。

◆Azure AD WAP経由でアクセスする

Azure AD WAP、PingAccessを経由せずにアクセスするとBasic認証が要求されましたが、Azure AD WAPを経由してアクセスするとBasic認証はかからずにサイトへログオンできます。

Webサーバのログを見ると、先ほど設定したユーザでWebアクセスがあったことがわかります。



今回はここまでです。せっかく色々な機能があるPingAccessなので、上手に連携していけば既存のオンプレミスのアプリケーションのAzure ADへ対応させる新たな構成の選択肢となってくる可能性もありますので、今後も目が離せませんね。

Office365管理者は要対応)UPNとProxyAddress重複オプションの強制変更がいよいよ開始

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

以前紹介したAzure AD Connectでのディレクトリ同期時にUPNやProxyAddressが重複しないように自動的にサフィックスをつけてくれるオプションがいよいよ全テナントで強制的に有効になるようです。

 以前の紹介記事
 [Azure AD/Office365]管理者は要注意。ディレクトリ同期に関する仕様変更
 http://idmlab.eidentity.jp/2016/09/azure-adoffice365.html

簡単に内容をリマインドしておくと、複数のオンプレミスADから単一のAzure ADディレクトリへ同期したり、オンプレミスのUPN以外の属性(例えばメール属性)をAzure ADのUPNにマッピングするなど属性のユニーク性が担保されない環境で運用を行う際、ディレクトリ同期時にAzure AD側でUPNを自動的に「ユーザ名+4桁のランダム数値@デフォルトドメイン名」という様に変更する、というオプションが追加されました。
(UPN版とProxyAddress版の2つのオプションがあります)

このオプションが有効だとディレクトリ同期時の重複エラーを抑制することはできますが、勝手にUPNが書き換わってしまうのでオンプレミスのディレクトリの状態によっては若干困ることがあるので、昨年発表された段階では強制的に有効化されることはなく、しばらくは猶予期間が作られました。

しかし、この4月から遂に強制変更が開始されるようです。

4月1日前後に以下のメールが管理者宛てに来た場合は、メールに記載の日程から強制的に有効化されます。私のテナントの場合は4/19から強制有効化されるようです。
(以外と急でした・・・)

タイトル:New Identity Synchronization Feature Being Enabled - Duplicate Attribute Resiliency
差出人:MSOnlineServicesTeam@microsoftonline.com




急ぎ、自社のディレクトリ構成を確認してUPNが急に変わった~~~というようなパニックに陥らないように準備しておきましょう。




今年の de:code はユーザ事例を通して Azure AD 導入の実情をお伝えします

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

いつの間にか de:code 2017まで約1か月となりました。
昨年の de:code ではチョークトークで何でも QA コーナーみたいなセッションを担当しましたが、今年は本職?での株式会社アシックス様の案件事例を通して Azure AD の活用の実際をお伝えします。



これまでも事例をベースにしたセッションはやってきたんですが、実は Azure AD 案件の事例をオープンな場でお話しするのって初めてなんですよね。今回は Azure AD を導入するにあたり Azure Web App や Azure Automation、Express Route など Azure 関連のサービスをそれなりの種類使っていたりしますので、Azure AD 自体の使い方に加えて、その辺りの話も織り交ぜつつグローバル企業におけるクラウド・ベースの認証基盤のあり方や既存環境からのマイグレーションなどについてお話できると良いなぁ、と思っています。

参考)これまでオープンにしてきた IdM 系の事例です。(節操なく色んなベンダの仕事してますね)



どうしても本職絡みだと言えないこともあったりするんですが、今回はなるべく Azure AD の各種技術的な要素が実際の案件ではどのように使われているのか?を皆さんにお伝えすることで、色々とイメージをしてもらえればと思いますので、お手すきの方はぜひお越しください。

あ、2日目の最終コマだったと思います。


尚、今回の de:code ではセキュリティ・トラックが 16 セッションもあり、私の他にも Enterprise Mobility の MVP が大勢出てきてマイクロソフト社員が語れないこと?を語ってくれると思いますので、私自身も非常に楽しみです。

以下、セキュリティ・トラックのセッション一覧です。

セッション番号タイトル担当
SC01DevSecOps on Azure : セキュリティ問題に迅速に対応するためのパイプライン設計MS安納さん
SC02シチュエーション別 Active Directory デザインパターンMVP宮川さん
SC03Active Directory の DR 対策~天災/人災/サイバー攻撃、その時あなたの IT 基盤は利用継続できますか?MVP渡辺さん
SC04あなたのサービスを "ID"で守る! Azure Active Directory の条件付きアクセスの基礎と実装MS松井さん
SC05株式会社アシックス様における Azure AD 導入プロジェクトの実際MVP富士榮
SC06Windows と Azure、2つの Information Protection をディープに解説!MVP国井さん
SC07Azure AD と Ruby で学ぶ OpenID Connect!MVP真武さん(nov)
SC08SDL からビジネスモデルまで IoT セキュリティを俯瞰するMS高橋さん
SC09パッチ待ちはもう古い!Windows 10 最新セキュリティ技術とゼロデイ攻撃攻防の実例MS村木さん
SC10Intune Application Protection を可能にするモバイル アプリ開発MSロバートさん
SC11セキュリティマニアックス ~侵入。ダメ。ゼッタイ。~MS蔵本さん
SC12DevSecOps 時代のセキュリティ人材DIT河野さん
SC13ログ管理で向上させるセキュリティMS山本さん
SC14IoT のセキュリティアーキテクチャと実装モデルMS安納さん
SC15Windows Hello で実現するハイブリッド 生体認証MS小町さん
SC16スパムの脅威から企業を守る!Office 365 で実現するセキュアコラボレーションtwofive末政さん


ちなみに、今年はゴールデンウィーク明けの EIC(European Identity & Cloud Conference 2017)に行こうと思っているので、実はほとんど資料を作る時間がないのが最大の課題です・・・。



[MIM]3月のアップデートでサポートプラットフォームの大幅な改善+α

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

色々と追い付いていなかったので、改めてまとめておきます。

3月にMicrosoft Identity Manager 2016 SP1 (MIM)向けのホットフィックスがリリースされ、特にサポートされるプラットフォームが大幅に追加されました。

個人的には、プラットフォームサポート周りでは「SQL Server 2016 Always Onのサポート」が非常に熱いトピックスでしたが、他にもSCSM 2016がサポートされたり、Visual Studio 2017が使えるようになったり、など色々とエンハンスが行われています。

MIM 2016でサポートされるプラットフォーム一覧
https://docs.microsoft.com/en-us/microsoft-identity-manager/plan-design/microsoft-identity-manager-2016-supported-platforms


他にも以下が新しく使えるようになった代表的なシナリオです。



こちらからダウンロード可能なので、MIM使いの皆さんは適用しておきましょう。

[Azure AD]条件付きアクセスの信頼済みネットワークが拡張されてました

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

永らく条件付きアクセスの信頼済みIPの上限数(50レンジ)に悩まされてきた管理者の皆さんに朗報です。(といってもしばらく前に拡張されていたので、既に気が付いた人は使っていると思いますが)

これまでは、旧MFAポータルで信頼済みIPを設定していたのですが、登録可能な数は50レンジまででした。



この上限で困るケースが社内からのネットワークの出口が事業所毎にあったり、クラウドベースのプロキシサービスを使っているようなケースです。

以前、マイクロソフト・コーポレーションの開発チームとのディスカッションの場でもこの制限に関しては私を含め複数の人から改善リクエストが出ており、名前付きネットワーク・オブジェクトとの統合のロードマップが示されていましたが、条件付きアクセスの設定が正式に新ポータルへ移行されたタイミングで信頼済みIPについても移行されました。

尚、現段階では以下の注意点があります。
・過去に作成したアプリケーションの条件付きアクセスの構成は新ポータルからは見えないので、構成し直す必要があります
・再構成しない場合、過去に作成したアプリケーションについては旧ポータルの信頼済みIPが使われます
・新しくアプリケーションを作成する場合、旧ポータルからアプリケーションを作成する場合でも、条件付きアクセスは旧ポータルからは構成できなくなっています。条件付きアクセスの構成は新ポータルから実施してください


早速ですが、構成を見てみます。

新ポータルの条件付きアクセスの構成にNamed Locationsという項目が存在するので、New locationをクリックしてネットワークの場所を定義していきます。

IPレンジをどんどん追加できます。(画面からの直接入力の場合は10個単位で保存をしないとダメですが、保存した後に再度ネットワーク構成を開いて追加していけばどんどん追加できます)また、テキストファイルにネットワークレンジの一覧を書いてUploadすることで一気に追加することが出来ます。


次はこれを使って条件付きアクセスのルールを構成してみます。

まずは対象のユーザ・グループを選択します。ここでは全員を対象としています。


次に対象とするアプリケーションを選択します。ここでは「pharaoh1234」という名前のアプリケーションを対象としています。

次に、条件を設定します。今回信頼済みIPに設定されていないネットワークからのアクセスの場合は多要素認証を要求しようと思うので、ここのLocationsにInclude:All locations、ExcludeにAll trusted IPsを指定します。



条件に一致した場合のアクションとして多要素認証を要求したいので、以下の通りRequire multi-factor authenticationにチェックを入れます。

後は、ルールをEnableにして保存すると完了です。


この状態で信頼済みIP以外のネットワークからアプリケーションにアクセスすると以下のように多要素認証が要求されます。



[Azure AD] Azure AD B2C に OIDC/SAML 対応の外部 IdP が設定可能に

$
0
0
こんにちは、富士榮@ミュンヘンです。

最近何かと熱い分野でもある CIAM(Consumer Identity and Access Management)ですが、今週ドイツ・ミュンヘンで開催された European Identity & Cloud Conference 2017(EIC)でも他のテーマである GDPR、PSD2 などプライバシー系の法令対応の話や 昨年のニューオリンズで開催された Cloud Identity Summit(CIS)でも大きな話題となった Blockchain による信頼できる Identity 基盤と VRM(Vendor Relationship Management)、Respect Network の文脈での Self Sovrin Identity などと並行して大きく取り上げられていました。

そんな中、平行して US で開催されていた Buildではマイクロソフトの CIAM の実装である Azure Active Directory B2C の大きなエンハンスが発表されました。

ポイントは、カスタムの外部 IdP として

  • OpenID Connect の OP をサポート
  • SAML 2.0 の IdP をサポート
したことです。

これまでは Microsoft Account、Facebook、Google、LinkedIn、Amazon.com、などメジャーなコンシューマ ID プロバイダが正式サポート、twitter や Weibo、QQ、WeChat が Preview として対応、という状況でしたが、OpenID Connect および SAML に対応したことで、自分の好きな ID プロバイダをカスタムで追加することが出来るようになりました。

公式なドキュメントでは OpenID Connect 対応の IdP として Azure AD、SAML 対応の ID プロバイダとして salesforce.com を例として構成例が解説されています。

公式ドキュメント

ガリガリと XML を書いてアップロードする必要があるなど、まだまだ手順が面倒なのですが、公式アナウンスでも次の数週間でもう少し簡単な実装方法に対応させる、とありますのでそちらに期待しましょう。

管理画面の Identity Experience Framework - Preview というものが皆さんの Azure AD B2C にも来ているはずです。この中にカスタムポリシーを構成するための機能が詰まっています。



早速 Azure AD を Azure AD B2C のカスタム IdP として追加してみたのが以下の画面です。

色々とカスタマイズの余地もあるので、引き続き触っていきたいと思います。


[Azure AD/Windows 10]外部SAML IdPとID連携しているとAzure AD Joinできない

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

今回はかなり、レアかつマニアックな話です。
以前、Office365へOpenAMを使ってログインする方法を紹介しました。

 [Office365/AzureAD]OpenAMとのID連携①
 http://idmlab.eidentity.jp/2014/11/office365azureadopenamid.html


Azure ADは純正の外部IdPであるAD FS以外にもws-federationもしくはSAMLに対応した外部IdPとのフェデレーションもサポートしているので、OpenAMやPingFederateなどのサードパーティIdPでOffice365などAzure ADと連携されているアプリケーションへのログインが可能になる、という事です。

通常のWebアプリケーションであれば問題はないのですが、実はWindows 10のAzure AD Join(いわゆるWorkplace Joinではなく)を外部SAML IdPと連携したAzure ADで実行しようとすると問題が起きます。
(外部IdPがws-federationだと行けます。本国の方々と話をしていたんですが、あまりにもレアケースなので・・・という感じでした。まぁ、確かに。)

ということで、現状はAD FS以外の外部IdPと連携したAzure ADへのWindows 10デバイスの直接参加は不可能なので、もし将来的にAzure AD Joinを行う計画のある人は外部SAML IdPを使うのはやめておいた方が良いかも知れません。
注)AD FSを使う場合も正規の手続き(Convert-MsolDomainToFederated)以外を使った場合(Set-MsolDomainAuthenticationでプロトコルにSAMLを指定)は他の外部SAML IdPと同様にAzure AD Joinが出来なくなります。


では、どんなことが起きるのか、何が原因なのか、について少しだけ解説しておきます。

◆何が起きるのか?

[設定]からAzure ADへの参加を使用とすると「職場または学校のアカウント」の入力を求められます。


正規の手順で構成されたAD FSを使っている場合は、ユーザ名を入力して[次へ]をクリックすると組織のサインインページ(要はAD FSのログイン画面)へ遷移します。


しかし、その他の外部SAML IdPを使っている場合は以下の様に「組織のアカウントではない」と怒られてしまい、Azure AD Joinが出来ません。


◆何が起きているのか?

Azure ADへのサインインを行う際、入力したユーザがどこで認証されるべきか?をドメインパート(@より後ろ)を見て判別する、いういわゆるホームレルムディスカバリというプロセスが実行されます。これは、ブラウザシナリオでも今回のような非ブラウザシナリオでも同様です。

今回ブラウザシナリオでは外部IdPを使ってもログインできて、Azure AD Joinの場合だけダメなのか?はこのホームレルムディスカバリの方法と仕様が異なるためです。

ブラウザシナリオにおいては
 https://login.microsoftonline.com/common/userrealm
というエンドポイントにクエリパラメータに「user=ユーザ名」をつけたGETリクエストを行うのに対し、Azure AD Joinの場合は、
 https://login.microsoftonline.com/common/GetCredentialType
というエンドポイントにユーザ名の情報をPOSTします。
※ちなみにワークプレイスジョイン(組織アカウントの追加)の場合はブラウザシナリオと同じエンドポイントを使うので、外部SAML IdPを使っても問題なくサインインできます。

エンドポイントが異なるのと同様に返ってくるレスポンスも異なり、ブラウザシナリオでは、外部SAML IdPの種類にかかわらず、ちゃんと利用プロトコルと外部SAML IdPのURLを返してきますが、Azure AD Joinの場合は、外部SAML IdPのURLが返ってこず、ここでレルム探しが失敗、先のエラーメッセージが表示されています。

ブラウザシナリオでのレスポンスの例
{
"NameSpaceType":"Federated",
"federation_protocol":"SAML20",
"Login":"hoge@example.net",
"AuthURL":"https://idp.example.net",
"DomainName":"example.net",
"FederationBrandName":"eIdentity",
"federation_saml_request":"xxxxx",
"federation_saml_relay_state":"xxxxx",
"cloud_instance_name":"microsoftonline.com"
"TenantBrandingInfo":[{"xxxx"}]
}

Azure AD Joinのレスポンスの例(AD FSの場合)
{
"Username":"hoge@example.net",
"Display":"hoge@example.net",
"IfExistsResult":0,
"Credentials":{
"PrefCredential":4,
"HasPassword":true,
"RemoteNgcParams":null,
"FederationRedirectUrl":"https://fs.example.net/adfs/ls/?...omit...",
"EstsProperties":{"xxx"},
"apiCanary":"xxx"
}
}

Azure AD Joinのレスポンスの例(外部SAML IdPの場合)
{
"Username":"hoge@example.net",
"Display":"hoge@example.net",
"IfExistsResult":1,
"Credentials":{
"PrefCredential":1,
"HasPassword":true,
"RemoteNgcParams":null},
"EstsProperties":{"xxx"},
"apiCanary":"xxx"
}
}

上記のように、外部SAML IdPを使っているとFederationRedirectUrlが返ってこないので、フェデレーション先にリダイレクトがされません。

どこかのタイミングでこの挙動も変わるかも知れませんが、取り合えず現状はAzure AD Joinの計画がある場合は、Azure ADだけでサインインするか、AD FSを含む外部ws-federation IdPとして使う、という2択になりそうです。

[Azure AD] PingAccess連携が正式リリース

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

遂にAzure ADとPingAccessとの連携機能が正式リリースされました。Public Preview公開から約3月で正式リリースされたので、かなり早いペースで出てきましたね。
やはり今週シカゴで開催されているCloud Identity Summit(PingIdentity主催)に合わせて来た、というところでしょう。

公式Blogでのアナウンス
 Ping Access for Azure AD is now Generally Available (GA)!
 https://blogs.technet.microsoft.com/enterprisemobility/2017/06/15/ping-access-for-azure-ad-is-now-generally-available-ga/

画像出典:公式blog

出来ることは、Azure AD Web Application Proxyを使ってPingAccessへの認証をAzure ADで行うことにより、PingAccess配下(リバプロ、エージェント)のアプリケーションへのシングルサインオンを実現する、というようなところです。

詳しくは以前紹介したこちらのポストを参照してください。
 [Azure AD]PingAccess連携でオンプレ資産へのアクセスを拡張する
 http://idmlab.eidentity.jp/2017/03/azure-adpingaccess.html

 [Azure AD+PingAccess]Basic認証のあるバックエンドサイトへアクセスする
 http://idmlab.eidentity.jp/2017/03/azure-adpingaccessbasic.html



[告知]CDATA API Serverローンチイベントとグローバル企業向けITセミナでIDの話をします

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

7月20日(木)と21日(金)に以下2つのセミナで登壇します。
いつも告知が直前すぎるので、今回は早めに告知させていただきます。

1.CDATA Day 2017
 日時  :7月20日(木)15:00~18:00
 申し込み:http://www.cdata.com/jp/events/cdataday17/
 タイトル:アイデンティティAPIとデータ統合プラットフォームの活用
 場所  :日本マイクロソフト株式会社 品川本社 セミナルーム

2.Enterprise IT seminar by professionals from global IT companies
 日時  :7月21日(金)14:30~17:00
 申し込み:https://www.xlsoft.com/jp/products/cdata/seminar.html
 タイトル:Designing cloud-based Identity and Access Management system for global enterprises
 場所  :エクセルソフト株式会社 セミナルーム


それぞれ簡単に内容を紹介します。

まずはCDATA Day 2017からですが、こちらはCDATA社のAPI Serverのローンチイベントということもあり、API Serverを使ってSCIMなどアイデンティティAPIを実装する話をします。(完全SCIM互換にするにはまだ若干機能不足はあるのですが、その部分は今後の期待ということで)
また、元々のCDATAの強みであるデータ統合基盤としてのアダプタの豊富さを利用してプロビジョニングを手軽に実装する方法なども考えられるので、その方面への活用についてもお話しできればと思っています。

先日ドイツで開催されたEuropean Identity & Cloud Conference 2017のKeynoteでOne IdentityのVPであるJackson Shawも話していましたが、現状各種アプリケーションのSCIMへの対応が中々進んでいない中で、ID管理製品側で専用のアダプタを開発するのではなく、データ統合プラットフォーム(クラウドベースのiPaaS/Integration Platform as a Serviceを含む)をID管理システムとターゲットシステムの間に挟む、という構成もあり得ると考えています。

こんな感じです。(出典:European Identity & Cloud Conference 2017 Keynote : When will Identity and Access Management be Digital Transformed – Jackson Shaw / VP One Identity)


この辺りを(できれば)デモを交えながら話せれば、と思います。


次に、翌21日(金)に行われるEnterprise IT Seminarです。
こちらは外資系企業のIT部門や日系企業で現地法人とやり取りをするIT部門の方々を対象として、セキュリティ、ERP/CRM、アプリケーション開発、データ統合の4つのテーマでグローバル・プロジェクトをどのように進めるか、という話があり、私はその中のセキュリティ、アイデンティティ管理のコマを受け持ちます。(全編英語です)

法令の違いはもちろんですが、全体最適に関する考え方のスケールがやはり日本企業の中だけで進めるプロジェクトとは違いますので、利用するツールやサービスの選定を含め色々と考えるべきことが多々あります。また、特にIDaaSの優位性が出やすい領域でもあるので、その辺りの割り切り方などについてもお話しできるといいかな、と思っています。


それでは。会場でお会いしましょう。

[Office365]Azure AD Connectの脆弱性?と最新版へ更新後の運用上の変化点

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

先日、Azure AD Connectに関するセキュリティ・アドバイザリが発表され、脆弱性対応版として最新版がリリースされました。
脆弱性対応のためとはいえ、一部ヘルプデスク運用が変わってくるので、Office365やAzure ADの管理者の方は十分に注意して運用マニュアルの修正などを行う必要があります。

 セキュリティ・アドバイザリ 4033453
  Azure AD Connect の脆弱性により特権が昇格される
  https://technet.microsoft.com/ja-jp/library/security/4033453

 最新ビルド(1.1.553.0)
  https://www.microsoft.com/en-us/download/details.aspx?id=47594

しかし、発表された内容を見ていると、どちらかというと脆弱性というよりも単に不適切な運用をしているだけじゃ、、、という話なので内容を解説してみたいと思います。

また、アドバイザリの中では対応策として、最新ビルドにバージョンアップすることが推奨されていますが、単にバージョンアップしただけでは環境によっては不具合が出ることもあるので、その辺りも解説しておきます。

最後に、Azure AD Connectの話としてアドバイザリが出ていますが、構成によってはFIM(Forefront Identity Manager)/MIM(Microsoft Identity Manager)にも当てはまる内容なので、FIM/MIMを使っている場合の構成の見直しポイントも簡単に。

◆脆弱性?の概要

簡単に言うと、パスワード書き戻しが有効になっているテナントにおいて、同期元のローカルActive Directory上で管理者権限を持っているユーザのパスワードをAzure ADやOffice 365上でリセットすると当然の事ながらローカルActive Directory上の管理者権限を持ったユーザのパスワードもリセットされてしまうので、悪意のあるAzure AD管理者がクラウド上でパスワードリセットを行うことによりローカルActive Directoryの管理者権限の奪取が可能になってしまう、という話です。

色々と前提があるので整理をしておきましょう。

  • 環境
    • パスワード書き戻しが有効になっていること
    • 管理者権限のあるユーザをAzure ADへ同期していること
    • 同期を実行しているユーザに特権ユーザに対するパスワードリセットの権限を付与していること(以下が典型的なケースです)
      • Domain AdminsやEnterprise Adminsのメンバにしている
      • 同期対象のOUの管理権限を同期ユーザへ委譲し、AdminSDHolderコンテナにパスワードリセット権限を付与している
  • 脆弱性利用者
    • 悪意のある管理者。オンプレミスのリソース(AD配下)へアクセスが可能なこと

※AdminSDHolerの話は国井さんのブログ記事を参照してください。
 

こうやって見ていくと当たり前すぎて、製品の不具合というより構成の問題という気がしてきます。
基本的に同期対象となっているOUに管理者権限を持ったユーザが存在するのは、、、ということです。同期してOffice365にログインするユーザなのであれば、恒常的にローカルActive Directoryの管理者権限を与える必要もないはずですし。

◆実際どうなるのか?

では、管理者権限を持ったローカルActive Directory上のユーザをAzure Active Directoryへ同期させてみて、パスワード・リセットをしてみます。

まずは、同期されたユーザ自身によるパスワード変更のパターンです。
アクセスパネルのプロフィール変更画面よりパスワードを変更します。

当然ですが、パスワードがオンプレミスに書き戻され、新しいパスワードでログインできるようになります。(試しにリモートデスクトップしてみるとちゃんとログインできます。当たり前ですが)


次に、SSPR(セルフ・サービス・パスワード・リセット)のシナリオを見てみます。いわゆる秘密の質問や認証用電話・メールなどを使ってパスワードを忘れた際に回復する、というシナリオです。
ログイン画面からパスワード忘れの場合のリンクをクリックすると回復画面に遷移するので、CAPTCHAを入力します。

秘密の質問への回答をします。


無事にパスワードがリセットされ、ローカルActive Directoryへパスワードが書き戻されます。

悪意のあるユーザが秘密の質問を推測してしまうケースは結構あるそうなので、第3者によってパスワードのリセットがされ、ローカル管理者の権限が奪取される、ということもあり得ますね。


最後に、管理者によるリセットです。
Azure AD Portalからユーザを選んでパスワードをリセットするやつですね。

これも管理者がリセットを行い、一時パスワードが割り当てられた段階でローカルActive Directoryのパスワードも変更されるので、一時パスワードでローカルリソースへアクセスできてしまいます。

そう、パスワード書き戻しの機能を普通に使っているだけです。
単に対象となっているユーザの中に管理者権限を持っているユーザが存在しただけです。

これが脆弱性なのか、と・・・。


◆Azure AD Connectのバージョンアップと注意点

どのみち、今後のバージョンのAzure AD Connectにはこの改修が入ってしまうので、仕方がないので対応版である1.1.553.0へバージョンアップします。

バージョンアップによる具体的な変更内容は、アドバイザリのサイトにもあるように以下の2点です。

  • 対象ユーザのadminCount属性の値を見てNullもしくは0なら一般ユーザとみなし、パスワード書き戻しを許可する
  • 対象ユーザが特権ユーザだった場合、パスワードリセットを要求したAzure ADユーザが、対象ユーザと同じユーザだった場合は書き戻す(メタバース上で要求したユーザと対象ユーザの関係を確認する)
    • この部分が原文・翻訳ともにものすごくわかりにくいです。
      • 日本語「要求したユーザーが対象のオンプレミス AD アカウントのオーナーであるかどうかを検証します。それは、対象のオンプレミス AD アカウントと、要求したユーザーの Azure AD アカウントの関係をメタバースで確認します。要求したユーザーがオーナーの場合、Azure AD Connect はパスワード ライトバック要求を許可します。そうではない場合、要求は拒否されます」
      • 原文「it then validates whether the requesting user is the owner of the target on-premises AD account. It does so by checking the relationship between the target on-premises AD account and the Azure AD account of the requesting user in its Metaverse. If the requesting user is indeed the owner, Azure AD Connect permits the Password writeback request. Otherwise, the request is rejected」
    • このオーナー(is the owner)というのが何を指すのか、が全く分からず、ローカルAD上のOUや対象ユーザのセキュリティ構成でオブジェクトのオーナーにしてみたり、と色々とやったのですが、結局オーナー=自身のアカウント、というオチだと思います。#違ったらご指摘ください。


早速バージョンアップを行います。


無事に1.1.553.0になりました。


この状態でユーザ自身でのパスワード変更をAzure AD側で行います。


ここは問題なく変更、書き戻しされます。

同様に自身によるパスワード・リマインドでも問題なく変更、書き戻しされます。

次に管理者によるリセットです。
見事に失敗します。

この時、イベントログには特権ユーザに対するパスワードリセットが拒否された旨、記録されます。
このAdminUpnとうのがリセットを要求した管理者ユーザ、そのあとのUserPrincipalNameが対象のユーザでこの2つのUPNが合致しないとリセット・書き戻しは行われません。


ちなみに、対象ユーザが一般ユーザの場合は従来通り問題なく管理者によるパスワード・リセットを行うことが可能です。

つまり、今後は運用を行う上で、ローカルActive Directory上で管理者権限を持っているユーザについては自分自身でしかパスワード・リセットが出来ない、ということになりますので、従来のヘルプデスク等の運用を変えなければなりません。
この点が最大の注意点です。


◆最後に。FIM/MIMユーザへ

今回「脆弱性」として取り上げられた仕組みは基本的にFIM/MIMにおいても同じですので、管理者権限を持つアカウントのパスワードを、悪意のある別の管理者がリセットすることが出来ます。これを製品の脆弱性や不具合と呼ぶのは微妙ですが、FIM/MIMにおいては今回Azure AD Connectが行った対応は入っていませんので、管理者権限を持つユーザについては自分自身でしかパスワードを更新できない様にMPRを工夫する、などの対応が必要となります。


「ID管理システム導入における現状把握チェックリスト」が公開されました

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

JNSA(日本ネットワークセキュリティ協会)のアイデンティティ管理ワーキンググループで一昨年~昨年と分科会リーダーとして取りまとめて来た「ID管理システム導入における現状把握チェックリスト」が公開されました。

 こちらからダウンロードできます。
 http://www.jnsa.org/result/2017/std_idm/index.html

主にID管理システムの導入を企画する段階でエンドユーザ企業と導入ベンダやコンサルとの間に発生しやすいギャップを埋めることを目的として作成したツールで、様々な観点で企業内の現状把握をどのような観点で行うか、をチェックリスト形式で取りまとめました。

本来は、どこまで出来ていれば良いか?という基準・水準も設定できるのがゴールなのですが、まず今回リリースした第1版では現状把握を行うための観点、項目をとりまとめています。

Excelシート上で各項目を評価していくと、グラフを作成することが出来るので、現状把握の度合を可視化することが出来ます。


是非一度試して頂き、フィードバックを頂ければと思いますのでよろしくお願いいたします!



APIゲートウェイでSaaSのIDを簡単に管理する①

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

先日、CDATAさんのイベントで、CDATA API Serverを利用してローカルADのアカウントをSalesforceへプロビジョニングする、というデモをお見せしました。



当日は時間も限られていたのと、あくまでAPI Serverの活用事例の一つとして紹介したので、あまり細かい話はしなかったのですが、ID管理をやっている方々からは、このデモの仕組みをもう少し細かく知りたい、という声も頂いたので少し細かくご紹介していきたいと思います。

当日の資料はこちら。




まずは、どのようなデモをお見せしたのか、動画を用意しているので最初にこちらをご覧ください。


使っている道具は、
・オンプレミスのActive Directory
・Azure AD Connect+REST Management Agent(カスタム)
・Azure Active Directory
・CDATA API Server 2017J
・Salesforce.com
です。
*ちなみにAzure AD ConnectへカスタムManagement Agentを組み込む場合、所定の手続きを踏まないとサポート対象外となります。今回は手元にちょうどあった環境を使ったのでAzure AD Connectを使いましたが、本番環境ではMIM(Microsoft Identity Manager)やExgen LDAP Managerなど汎用的なID管理ツールを使ってください。

こんなことをしなくてもAzure ADから直接Salesforce.comへプロビジョニングすればいいじゃん、という話はありますが、手軽にテナントが用意できるSaaSなのであえてSalesforce.comを選択しています。もちろんCDATA API Serverが接続用のドライバを持っているサービスであれば何でも構いません。


では、早速環境の解説をしていきます。

1.オンプレミスのActive DirectoryからAzure ADへの同期環境を構成する

これは、特に特殊なことはしていません。Office365向けのID基盤を構築する時と同様にAzure AD Connectを構成します。

ものすごいシンプルな構成です。ローカルADもexample.localですし。。。


2.Salesforce.comのテナントを用意し、Azure ADとシングルサインオンを設定する

これも良くあるものなので、何も細かいことは気にしません。
以下の手順で設定をしていきます。

・Salesforce.comへのカスタムドメインの追加

・Azure ADにSalesforce.comアプリの追加とシングルサインオン設定
 サインオンURL、EntityIDにSalesforce.comに設定したカスタムドメインを指定し、証明書をダウンロードしておきます。

・Salesforce.comへAzure ADとのシングルサインオン設定
 Azure ADからダウンロードした証明書のアップロード、Issuerの設定、SSO URI、SLO URI、Salesforce側のEntityIDの設定を行います。設定すべきURI等の情報はAzure ADの設定ページに手順を含め記載されています。

ここまででシングルサインオンは出来るようになります。


3.API ServerとSalesforce.comを接続する

API Serverはここから評価版のダウンロードができます。
http://www.cdata.com/jp/apiserver/

ただ、この本体にはSalesforce.comとの接続に使うドライバが同梱されていないので、別途Salesforce.comドライバ(ADO.NET版)をダウンロードします。
こちらも評価版があります。
http://www.cdata.com/jp/download/?f=ado

インストール自体は次へ、次への世界なので何も気にすることは無く、インストールが終わるAPI Serverが起動してきます。
ちなみにデモでは手元のWindows 10の端末で動かしています。

設定メニューより接続タブを開き、新規に接続先を追加します。

接続先アプリケーションとしてSalesforceを選択します。


Salesforce.comへの接続に使うユーザIDとパスワードを入れ、保存します。

ちなみに、信頼されていないネットワークから接続している場合は、セキュリティ・トークンの設定が求められることがあります。

このエラーが出た場合は、Salesforce.comに管理者でログインし個人の設定からセキュリティ・トークンをリセットし、メールで送られてくるセキュリティ・トークンをAPI Serverに設定します。



次に、Salesforce.comのユーザを管理しているテーブルをAPI Serverのリソースとして定義し、REST APIとして公開します。
同じく、設定メニューの中のリソースタブを開き、リソースを追加します。

データソースに先ほど定義したSalesforce.comへの接続を選択します。

ユーザ情報が格納されているテーブルの名前はその名の通りUserなので、選択して保存します。

Userテーブルのカラム一覧が自動的に取得されるので、そのまま保存します。

ここまででSalesforce.comのUserテーブルをAPI ServerがREST APIとして公開できました。
最後にAPI接続を行うためのAPI Server上のユーザを定義します。
ユーザタブを開き、追加をします。

ユーザ名と実行できるメソッドを指定して保存します。

保存すると認証に使うAuthトークンが表示されるのでユーザ名と合わせてメモしておきます。

これで設定は完了です。

接続確認としてユーザ一覧を取得してみます。
APIメニューを開き、先ほど作成したリソースを開くとエンドポイントとメソッドが出てきます。

今回はテストなのでユーザ一覧を取得するので、単純にUserエンドポイントをGETします。
BASIC認証がかかり、ダイアログが出てくるので先ほど作成したユーザとAuthトークンをID、パスワードとして入力します。

上手くいくと、ユーザ一覧がODATA形式で取得出来ます。

これで、API Server経由でSalesforce.com上のユーザを操作するための準備はすべて整いました。

後は、Azure AD ConnectからAPI Serverで公開したAPIを叩くだけです。
この部分は若干コードを書くので、次回詳細は解説したいと思います。

ということで今回はここまでです。

APIゲートウェイでSaaSのIDを簡単に管理する②

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

前回に引き続き、CDATA API ServerとID管理システムを使ってSaaS(今回はSalesforce.com)へのプロビジョニングを簡単に行う、という仕組みを作っていきます。

前回は、API ServerをSalesforce.comのUserテーブルへ接続し、ユーザの取得をしましたが、今回はいよいよID管理システム(今回はAzure AD Connect)を使ってユーザを作成します。

やることは非常に単純で、API Serverで定義されたリソース(実際はSalesforce.comのUserテーブル)に対してJSON形式で作成したいユーザの情報をPOSTするだけです。

◆投げ込むJSONを確認する

Salesforce.comの開発者ドキュメントを見ると、Userテーブルに新規レコード(つまり新規ユーザ)を作成する際に必須となる属性を確認します。

 SOAP API開発者ガイド)User
 https://developer.salesforce.com/docs/atlas.ja-jp.api.meta/api/sforce_api_objects_user.htm

これを見ると、以下の属性が必須との事です。
  • Username :ユーザ識別子。メールアドレス形式
  • Alias :ユーザの別名
  • Email :ユーザのメールアドレス
  • LastName :ユーザの姓
  • EmailEncodingKey :メールの文字コード
  • LanguageLocaleKey :ユーザの言語
  • LocaleSidKey :ユーザのロケール
  • ProfileId :ユーザのプロファイルのID
  • TimeZoneSidKey :ユーザのタイムゾーン
  • UserPermissionsOfflineUser :オフラインエディションの使用可否
  • UserPermissionsMarketingUser :キャンペーン管理の可否

ユーザを作成するには、最低限これらの値をJSON形式でAPI ServerのリソースへPOSTすればよい、ということなので、まずは直接POSTしてみます。

ただ、EmailEncodingKeyやProfileIdなど、何を値として設定すれば良いのかよくわからない属性もあるので、まずはSalesforce.com上に手動で作成したユーザをGETし、各属性にどのような値が入っているのかを確認すると以下のような値が入っていることがわかるので、この例をテンプレートにPOSTするデータを作成します。

属性
Usernamexxxxx@example.com
AliasFujie
Emailxxxxx@example.com
LastNameFujie
EmailEncodingKeyISO-2022-JP
LanguageLocaleKeyja
LocaleSidKeyja_JP
ProfileId(Chatter Free Userの場合)00e7F000001LotXQAS
TimeZoneSidKeyAsia/Tokyo
UserPermissionsOfflineUserfalse
UserPermissionsMarketingUserfalse


以下のようなJSONを作成し、Chrome ExtensionのAdvanced REST Clientを使ってAPI Serverに定義したリソースエンドポイントへPOSTをします。
{
"Username": "test999@eidentity.jp",
"Alias": "test999",
"Email": "test999@eidentity.jp",
"LastName": "Test",
"EmailEncodingKey": "ISO-2022-JP",
"LanguageLocaleKey": "ja",
"LocaleSidKey": "ja_JP",
"ProfileId": "00e7F000001LotXQAS",
"TimeZoneSidKey": "Asia/Tokyo",
"UserPermissionsOfflineUser": "false",
"UserPermissionsMarketingUser": "false"
}


上手くいくと、HTTP 201 Createdが返ってきて実際にユーザが作成されます。


Salesforce.comの管理画面からユーザを確認すると実際に作成されていることがわかります。


◆管理エージェントの作成

投げ込むJSONがわかったところで、あとはID管理システムでJSONの生成からPOSTを自動化するだけです。

やることはFIM/MIM向けのECMA2エージェントとして以前公開したGeneric REST API Management Agentとよく似たようなことなので、このコードをカスタマイズしてみます。

細かいECMA2エージェントの開発方法は別エントリでそのうち解説しますが、以下の手順でGeneric REST API Management Agentを改造します。

1.スキーマ定義(GetSchemaメソッド)
 先にリストアップした必須属性を定義します。Username属性をAnchor属性として設定をしています。こんなコードになります。
                SchemaType personType = SchemaType.Create("Person", false);
personType.Attributes.Add(SchemaAttribute.CreateAnchorAttribute("Username", AttributeType.String));
personType.Attributes.Add(SchemaAttribute.CreateSingleValuedAttribute("Alias", AttributeType.String));
personType.Attributes.Add(SchemaAttribute.CreateSingleValuedAttribute("Email", AttributeType.String));
personType.Attributes.Add(SchemaAttribute.CreateSingleValuedAttribute("LastName", AttributeType.String));
personType.Attributes.Add(SchemaAttribute.CreateSingleValuedAttribute("EmailEncodingKey", AttributeType.String));
personType.Attributes.Add(SchemaAttribute.CreateSingleValuedAttribute("LanguageLocaleKey", AttributeType.String));
personType.Attributes.Add(SchemaAttribute.CreateSingleValuedAttribute("LocaleSidKey", AttributeType.String));
personType.Attributes.Add(SchemaAttribute.CreateSingleValuedAttribute("ProfileId", AttributeType.String));
personType.Attributes.Add(SchemaAttribute.CreateSingleValuedAttribute("TimeZoneSidKey", AttributeType.String));
personType.Attributes.Add(SchemaAttribute.CreateSingleValuedAttribute("UserPermissionsOfflineUser", AttributeType.Boolean));
personType.Attributes.Add(SchemaAttribute.CreateSingleValuedAttribute("UserPermissionsMarketingUser", AttributeType.Boolean));
Schema schema = Schema.Create();
schema.Types.Add(personType);
return schema;

 こうすることで管理エージェントで管理対象属性を選択できるようになります。


2.パラメータ定義(GetConfigParametersメソッド)
 API Server上のリソースURIや接続に使うAPI ServerユーザのAuthTokenを指定できるようにします。こんなコードになります。接続パラメータの部分だけで良いのでConnectivityの部分にパラメータを追加しています。
                switch (_page)
{
case ConfigParameterPage.Capabilities:
break;
case ConfigParameterPage.Connectivity:
_configParametersDefinitions.Add(ConfigParameterDefinition.CreateLabelParameter("Connection parameters"));
_configParametersDefinitions.Add(ConfigParameterDefinition.CreateStringParameter(ConstDefinition.CFG_RESOURCE_URI, ""));
_configParametersDefinitions.Add(ConfigParameterDefinition.CreateStringParameter(ConstDefinition.CFG_AUTH_TOKEN, ""));
break;
case ConfigParameterPage.Global:
break;
case ConfigParameterPage.Partition:
break;
case ConfigParameterPage.RunStep:
break;
case ConfigParameterPage.Schema:
break;
}

尚、テストなので、ValidateConfigParametersについては処理を入れておらず、指定されたパラメータの値の確認などは行っていません。

これで、管理エージェント設定画面で接続関連のパラメータを指定することが出来るようになります。ここにAPI ServerのリソースURIとAuthTokenを指定します。

3.インポート処理関連(OpenImportConnection/GetImportEntriesメソッド)
 まずはOpenImportConnectionで、設定パラメータからリソースURIとAuthTokenの値を取り出し、後続のGetImportEntriesで使えるようにグローバル変数にセットしておきます。
                resource_uri = _configParameters[ConstDefinition.CFG_RESOURCE_URI].Value.ToString();
auth_token = _configParameters[ConstDefinition.CFG_AUTH_TOKEN].Value.ToString();

 次に、API Server(を経由してSalesforce.com)からユーザ情報を取得するGetImportEntriesです。やることはシンプルで、API ServerのリソースURIへAuthToken付きのGETリクエストを投げ、取得したJSONをパースしてConnector Space上のエントリに追加していくだけです。尚、本来はページング処理などをする必要があるのですが、今回はテストなので省略しています。
                var _csentries = new List<CSEntryChange>();
string _importEntriesJSON = utils.GetContentsWithAccessToken(resource_uri, auth_token, null);
var _getImportEntriesByObjectTypeResult = JObject.Parse(_importEntriesJSON).SelectToken("value").ToString();
var _importObjectJSONArray = JArray.Parse(_getImportEntriesByObjectTypeResult);
foreach (var _importObjectJSON in _importObjectJSONArray)
{
var _csentryChange = CSEntryChange.Create();
_csentryChange.ObjectModificationType = ObjectModificationType.Add;
_csentryChange.ObjectType = "Person";
_csentryChange.AttributeChanges.Add(AttributeChange.CreateAttributeAdd("Alias", _importObjectJSON["Alias"].ToString()));
_csentryChange.AttributeChanges.Add(AttributeChange.CreateAttributeAdd("Email", _importObjectJSON["Email"].ToString()));
_csentryChange.AttributeChanges.Add(AttributeChange.CreateAttributeAdd("Username", _importObjectJSON["Username"].ToString()));
_csentryChange.AttributeChanges.Add(AttributeChange.CreateAttributeAdd("LastName", _importObjectJSON["LastName"].ToString()));
_csentryChange.AttributeChanges.Add(AttributeChange.CreateAttributeAdd("EmailEncodingKey", _importObjectJSON["EmailEncodingKey"].ToString()));
_csentryChange.AttributeChanges.Add(AttributeChange.CreateAttributeAdd("LanguageLocaleKey", _importObjectJSON["LanguageLocaleKey"].ToString()));
_csentryChange.AttributeChanges.Add(AttributeChange.CreateAttributeAdd("LocaleSidKey", _importObjectJSON["LocaleSidKey"].ToString()));
_csentryChange.AttributeChanges.Add(AttributeChange.CreateAttributeAdd("ProfileId", _importObjectJSON["ProfileId"].ToString()));
_csentryChange.AttributeChanges.Add(AttributeChange.CreateAttributeAdd("TimeZoneSidKey", _importObjectJSON["TimeZoneSidKey"].ToString()));
_csentryChange.AttributeChanges.Add(AttributeChange.CreateAttributeAdd("UserPermissionsOfflineUser", false));
_csentryChange.AttributeChanges.Add(AttributeChange.CreateAttributeAdd("UserPermissionsMarketingUser", false));
_csentries.Add(_csentryChange);
}
var _importReturnInfo = new GetImportEntriesResults();
_importReturnInfo.MoreToImport = false;
_importReturnInfo.CSEntries = _csentries;
return _importReturnInfo;

utils.GetContentsWithAccessTokenの中ではx-cdata-authtokenヘッダにAuthTokenをセットし、リソースURIにGETリクエストを投げているだけです。
                _httpClient.DefaultRequestHeaders.Add("x-cdata-authtoken", _accessToken);
return await _httpClient.GetStringAsync(_url);


4.エクスポート処理関連(OpenExportConnection/PutExportEntriesメソッド)
 こちらは先のインポートとは逆で、実際にAPI Serverへユーザを出力(プロビジョニング)する処理です。
 OpenExportConnectionではインポート時と同じくリソースURIとAuthTokenを設定から取得し、PutExportEntriesでConnector Space内のプロビジョニング対象ユーザを取得してJSON形式に整形してリソースURIへPOSTを行います。
                foreach (CSEntryChange _csentryChange in _csentries)
{
// build json to POST
var _attr = new Dictionary<string, string>();
// anchor attribute
_attr.Add("Username", _csentryChange.DN.ToString());
switch (_csentryChange.ObjectModificationType)
{
case ObjectModificationType.Add:
case ObjectModificationType.Update:
foreach (string _attribName in _csentryChange.ChangedAttributeNames)
{
var _attributeChange = _csentryChange.AttributeChanges[_attribName];
var _valueChanges = _attributeChange.ValueChanges;
if (_valueChanges != null)
{
foreach (var _valueChange in _valueChanges)
{
if (_valueChange.ModificationType == ValueModificationType.Add)
{
// new value
_attr.Add(_attribName, _valueChange.Value.ToString());
break;
}
}
}
}
// build json
string _exportDataJSON = JsonConvert.SerializeObject(_attr);
string _exportResult = utils.PostContentsWithAccessToken(resource_uri, auth_token, _exportDataJSON, null);

_exportEntriesResults.CSEntryChangeResults.Add(
CSEntryChangeResult.Create(_csentryChange.Identifier,
_csentryChange.AttributeChanges,
MAExportError.Success));
break;
case ObjectModificationType.Delete:
// NOT Implemented
break;

先ほどと同じく、utils.PostContentsWithAccessTokenではAuthTokenをヘッダにつけてJSONをリソースURIへPOSTしています。

大きくはこれで終わりです。
後はビルドしてAzure AD Connectが読み込めるようにExtensionsフォルダ(初期値はC:\Program Files\Microsoft Azure AD Sync\Extensions)へDLLファイルをコピーしておきます。

参考までにソースは以下のレポジトリにあげておきます。
https://github.com/fujie/apiserver

◆管理エージェントの設定

*繰り返しになりますが、Azure AD ConnectへカスタムManagement Agentを組み込む場合、所定の手続きを踏まないとサポート対象外となります。今回は手元にちょうどあった環境を使ったのでAzure AD Connectを使いましたが、本番環境ではMIM(Microsoft Identity Manager)やExgen LDAP Managerなど汎用的なID管理ツールを使ってください。
次は、Azure AD ConnectのSynchronization Serviceに開発したECMA2エージェントを設定します。
コネクタの種類にExtensible Connectivity 2.0を選択し、DLLをロードします。



後は、先に示した画面の様に接続設定でリソースURI、AuthTokenを設定し、管理対象の属性を選択すれば管理エージェント自体の構成は終了です。

次は、Run Profileの設定です。これを設定しないとAzure AD Connectはインポート、同期、エクスポートの各処理を実行してくれません。また、プロファイルの名前をFull Import、Full Synchronization、Export、など決められた名称にしておかないと30分に一回の自動処理の流れに乗せてくれず処理がスタックするので命名は大事です。
尚、今回作った管理エージェントにはDelta Importの処理を実装していないので、プロファイルの定義は行えません。イベントログにDelta Importの定義が無いのでスキップしますよ~という警告が出ますが特に影響はないので無視します。


これでSynchronization Service側の設定は完了です。

◆同期ルールを定義する

後は実際のMetaverse上のデータと先ほど作成した管理エージェントのConnector Space上のエントリの属性のマッピング(同期ルール)の設定を行います。FIMやMIMではポータルでISR/OSRを定義してルールを設定するのですが、今回はAzure AD ConnectなのでSynchronization Rules Editorを使います。個人的にはFIM/MIMの設定画面よりもこのルールエディタの方が使いやすいので好きだったりします。

今回はプロビジョニングだけでいいので、アウトバウンド同期ルールを定義します。
DirectionはOutbound、Connectorは先ほど作成したAPI Serverを選択してAdd new ruleをクリックしてルールを作成します。(以下は作成後の画面)

LinkTypeにprovisionを選択することで新規にユーザを作成するためのルールとして扱われます。

MetaverseとConnector SpaceのユーザのマッチングはUserprincipalNameおよびUsernameを使うので、Join rulesは以下のように設定しています。

後は、本命の属性のマッピングです。
エンコードやロケール、プロファイルIDなどは面倒なので固定値を入れて、ユーザ固有の値だけMetaverseの情報をマッピングします。

これでSaveをするとすべての設定が完了です。

◆テスト

後は、ローカルのAD上にユーザを作成、Azure AD Connectの同期ジョブが動くと、Azure ADへのユーザ作成に加えて、API Serverを経由してSalesforce.comへもユーザが作成されます。

この辺りは前回も紹介したデモの動画を見てもらった方が早いと思います。



Azure AD Connectを使った関係で色々とトリッキーなこともしていますが、少なくともID管理システム側でSalesforce.com自体の存在を殆ど意識せずに構成をすることが出来ていることはご理解いただけるのではないでしょうか?
スキーマの設定についても動的に取得する様に管理エージェントを構成すれば、API Serverの先にあるのがSalesforce.comだろうがDynamics365だろうが基本設定を変える必要は全くなく、API Serverが上手くハンドリングをしてくれますので、従来の個別開発に比べて相当簡単に各種SaaSなどへのプロビジョニングを構成することが可能になります。

今後、クラウド・サービスの活用がますます増えてくると思われますので、既存のID管理システムを効率よく対応させていくための一つの選択肢として、API Serverのようなデータ統合プラットフォームを活用するのはアリかも知れませんね。

JICS 2017開催!コンシューマから学術、エンタープライズまでIDに関与している人は参加必須です

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

お馴染みのVittorio Bertocci氏を招聘したJapan Identity & Cloud Summit(JICS)2014から3年、久しぶりにJICSが復活します。



今年は、ゲストが豪華です。

  • オープニング・キーノートはプレゼンのわかりやすさでは定評のあるSalesforce.comのChuck Mortimore氏
  • 続くキーノートはMicrosoft CorporationのAlex Wiener氏よりCloud Identity元年的な話でIdentityの将来を見据えた時にオープン・スタンダードの重要性について
  • そこからはブレークアウトセッションに分かれて金融、学術、ソーシャル、IoT、トラストフレームワークなど見所がたくさん
  • セキュリティネタではOWASP Japanのリーダー岡田氏
  • お馴染みOpenIDファウンデーション・ジャパンのエヴァンジェリスト達による標準技術(OAuth、OpenID Connect)の解説
  • クロージング・キーノートはこれまたIdentity界隈では知らぬ人はいない、Nishant Kaushik氏からNRI/OpenID Foundationの崎村さん、というこれまた必聴のセッションで畳みかけ。

見所満載です。

私もモバイル・ソーシャルのトラックとトラスト・フレームワークのトラックの2つを見ており、2コマ+VTR再放送で都合3コマも登壇するのですが、自分が出ている時間帯のセッションが聞けないのが非常に残念です。



定員は1000名くらいだったと思いますが、希望のセッションを登録時に選択する方式なので、早めに登録しないと聞けないセッションもあると思うので、ぜひ早めに登録を!

登録はこちらから。
https://nosurrender.jp/jics2017/

[Azure AD/Office365]Azure AD Connectでカスタムコネクタを使用する

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

先日公開したAzure AD ConnectとCDATA API Serverを組み合わせたSalesforce.comへのプロビジョニングや、3年ほど前に公開したAzure AD ConnectからOpenAMのレポジトリとして構成したOpenDJへのプロビジョニングの記事では、Azure AD ConnectのMicrosoft Identity ManagerのSynchronization Serviceとしての機能を使ってカスタムのコネクタ(ECMA2エージェント)や組み込みのGeneric LDAP Connectorを使って「無理やり」、ADやAzure AD以外のシステムとの同期を実現していました。
※Azure AD ConnectにGeneric LDAP Connectorなどが同梱され始めたのは1年くらい前ですね。

実はこの構成、オフィシャルに公開されていなかっただけで、Premierサポートとの契約があれば使うことは出来たんですが、なかなかハードルが高いので、これまであまり言及してきませんでした。

しかし、Azure Active Directory PoCプレイブックの中に、しれっとGeneric LDAP Connectorを使ったオンプレミスLDAPとAzure ADの同期のシナリオが記載されていることに気が付いてしまいました(笑)

Generic LDAPコネクタ構成
https://docs.microsoft.com/ja-jp/azure/active-directory/active-directory-playbook-building-blocks#generic-ldap-connector-configuration

流石に、こんな注意書きが添えられていてハードルを上げまくっています。まぁ、やってみるとそれほど難しくはありませんが。
これは高度な構成で、FIM/MIM に関する知識を必要とします。 運用環境で使用されている場合、この構成に関するご質問については、Premier サポートを使ってお問い合わせください。

Azure AD ConnectがGAしたタイミングで公開されたドキュメントに書いてある構成が徐々に実現してきている、ということですね。




ちなみに以下のドキュメントを見ると、オンプレミスのLDAPなどへAzure AD Connectを使って接続する構成はFR(今後サポート)となっており、正式にサポートされたわけではないので、実際に利用する場合はPremierサポートと十分に協議をすることをお勧めします。

ハイブリッド ID ディレクトリ統合ツールの比較
https://docs.microsoft.com/ja-jp/azure/active-directory/active-directory-hybrid-identity-design-considerations-tools-comparison




[リリース]LINE/Yahoo! IDを使ってOffice365へのログインを便利にする

$
0
0
こんにちは、富士榮@北海道です。

たまにはお仕事の話です。

本日、Azure AD B2CとLINE、Yahoo! JAPAN IDを連携させるソリューションを雇用主よりプレス発表しました。

SNSアカウントを活用するシステムの構築サービスを開始
http://www.ctc-g.co.jp/news/press/20170906a.html

Impressさん、日経電子版などのメディアに取り上げていただけました。

IT Leaders
 http://it.impressbm.co.jp/articles/-/14950
日経電子版
 https://www.nikkei.com/article/DGXLRSP456311_W7A900C1000000/
クラウドWatch
 http://cloud.watch.impress.co.jp/docs/news/1079437.html

本日北海道大学で開催されたCloud Week 2017で、本件に関する講演を行いデモを含めお披露目をさせていただきました。



簡単に内容を説明すると、Azure AD B2Cをカスタマイズし、
・LINEやYahoo! JAPAN IDなどの日本でメジャーなIdPへの対応
・Office365やG SuiteなどSAMLアプリケーションへの対応
・Microsoft Graphを利用し、Office365に届く重要なメールをLINEへも通知
・個別、一斉でのSNSへのメッセージ配信
というような仕組みをくみ上げたサービスとなっています。



こんな感じです。

動いている姿は以下です。


こんな流れです。
1.LINEで友達になる
2.LINEメニューから組織の払い出したID/PWDでOffice365へログインする
3.LINE IDと紐づけを行う
4.重要なメールはLINEへも通知する様に設定する
5.LINE IDでOffice365へシングルサインオンする
6.Office365へ重要なメールが届くとLINEのタイムラインへも通知される


他にも、公衆無線Wifiへのユーザ登録の簡素化などにも使えます。WeChatなどの中国のSNSにも対応しているので観光客向けのサービスとして無線LANを提供するようなケースを想定しています。


公衆無線Wifiを使った不正行為やいたずらが増えてきているらしいので、サービスレベルの向上(登録の簡素化)と利用者への到達性、証跡の確保の両立をしたい場合などはうまく使ってもらえると思います。


尚、今後は以下のイベントで詳細を説明していきますので、是非ご参加ください。
・9/15 Japan Identity & Cloud Summit 2017
 https://nosurrender.jp/jics2017/
・10/13 CTCフォーラム 2017
 https://www.event-site.info/ctcforum2017/
・11/08 Tech Summit 2017
 https://www.microsoft.com/ja-jp/events/techsummit/2017/
・12/13 AXIES年次総会
 URL未定

また、個別に仕組みが知りたい、という方はぜひご連絡ください!
(標準のAzure AD B2Cでは出来ないことを独自拡張でかなりカバーしているので)

[FIM/MIM]Forefront Identity Managerのメインストリームサポートは2017年10月10日まで

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

そういえばForefront Identity Manager 2010/2010 R2/2010 R2 SP1のメインストリームがもうすぐ終了します。
https://blogs.technet.microsoft.com/iamsupport/2017/02/22/warning-forefront-identity-manager-fim-mainstream-support-is-ending-10102017/



まだFIMを使っている人もいないとは思いますが、まだの場合はMicrosoft Identity Managerへのアップデートが必要ですね。
MIMが出たての頃はアップデートするのにかなり苦労しましたが、最近はちゃんと設定関係の引継ぎもできるようになっているので、ぜひアップデートしましょう。

ちなみに拡張サポートは2022年10月11日までですが、バグフィックスなどの提供がベストエフォートになってしまいますので、自己責任運用になりますね。

ちなみに私の開発環境の一部がまだFIMなので・・・・面倒だけどこの際アップデートします。

#linedevday 参加!LINE LoginがOpenID Connect対応したので早速試す

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

本日はLINE Developer Day 2017にお邪魔して来ました。

大盛況でした。
先日プレス発表させていただいた通り、最近はエンタープライズからコンシューマまで、と仕事の幅が広がっておりまして、その中でもLINEはやはり外せないのでちょっと場違いな感じがしつつもがっつりと朝から晩まで参加させてもらいました。

先日のプレス関係
 [リリース]LINE/Yahoo! IDを使ってOffice365へのログインを便利にする
 http://idmlab.eidentity.jp/2017/09/lineyahoo-idoffice365.html


先日のJICSでもお世話になった御代田さんの話を含め個人的な注目ポイントは、

  • LINE LoginがOpenID Connectに対応
  • 2018年春を目途に2要素認証とQRコードログインに対応
  • LINE LoginとBot連携(Botへの友達登録を認可に含められる)
  • LINE Login側でのセッション管理が可能に
  • Flexible Rich Menu APIでID連携状態の取得と動的なメニュー構成の変更

でした。

その中で取り敢えずLINE LoginのOpenID Connect対応とBot連携許可のあたりを試してみました。(Bot連携は特別にAPIを使えるように設定してもらいました)

ますはOpenID Connect対応です。例によってAzure WebAppsで簡単なアプリを書いて連携させてみています。

まずは仕様から。
ドキュメントはここにあります。
https://developers.line.me/en/docs/line-login/web/integrate-line-login/

API version 2まではOAuth2.0ベースでしたが、今回リリースされた2.1(刻むなぁ)からOpenID Connectベースとなったため、わざわざアクセストークンを取得してからProfileエンドポイントへ属性を取りに行かなくてもIDトークンに基本属性は入ってきてくれます。尚、メールアドレスや電話番号などこれまでパートナー向けのProfile APIでしか提供されなかった属性もIDトークンでは取得できるようになるようです。(現時点ではまだ取れません)

取り敢えずはcodeフローしか試していませんが、必要な情報は以下の通り。

  • Authorizeエンドポイント
    • https://access.line.me/oauth2/v2.1/authorize
  • Tokenエンドポイント
    • https://api.line.me/oauth2/v2.1/token
  • ClientID/Secret
  • Redirect Uri


若干エンドポイントに違和感が。。。v2.1って刻むなぁ、というあたりとAuthorizeエンドポイントとTokenエンドポイントのホスト名が異なるあたりががが。

ClientIDはLINE用語ではChannel ID、Client SecretはChannel secret、Redirect UriはCallback URLです。いずれもDeveloper Consoleで設定が確認できます。



尚、認可リクエストの際にbot_promptというパラメータをつけるとログインと同時にBotと連携することが出来ます。こんな感じのパラメータをつけてリクエストを書きました。
'client_id'=>$client_id,
'response_type'=>$response_type,
'redirect_uri'=> $redirect_uri,
'scope'=>'openid profile',
'state'=>$state,
'nonce'=>$nonce,
'bot_prompt'=>'normal'

ちなみにbot_promptに'normal'を指定するとScope指定と同じような感じでBot連携を認可することが出来ますし、'aggressive'を指定すると認可後、Botとの連携許可画面が別途出てきます。



これまではLINE LoginとBot連携をしようとすると個別に友達追加をしないとダメでしたが、この拡張によりよりシームレスに連携が出来るようになりました。

ちなみにbot_promptをaggressiveにするとscope認可の後に友達追加画面が出ます。

※「ブロック解除」になっているのは、テストのため一旦友達になってからブロック~削除をしたためです。

取得できるIDトークンの中身はいたってオーソドックスで、従来のProfileエンドポイントで取得できたuserIDがsub、あとはdisplayNameとPictureUrlが取れるくらいです。



今後の話としては、discovery(well-known)やuserInfo(まぁ、Profileエンドポイントがあるので良いとは思いますが)がまだないので、実装するという話と、先に書いた通りメールや電話番号などの属性をIDトークンへ追加するあたりが予定されているということでした。OpenID FoundationのCertificationも目指すそうなので頑張って欲しいですね。






[告知] Tech Summit 2017で Azure AD B2C+LINE、Yahoo! ID辺りの話をします

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

9月、10月とイベント続きで、あまりblog書きなどの各時間が取れなかったのですが、もう少しイベントは続きます。

と、言うことで昨年と同じく今年もMicrosoft Tech Summitに登壇いたします。

公式サイト※早期申込割引は終わっちゃったみたいですが、お申し込みはこちらから。
https://www.microsoft.com/ja-jp/events/techsummit/2017/


昨年はAzure ADとアプリケーション連携の話とハンズオンラボの2本でしたが、今年は個人的ブームでもあるAzure AD B2Cネタです。

「Azure AD B2C と LINE 連携により実現する学校や企業における次世代 ID/メッセージ基盤」というタイトルでDay2の夕方16:25~17:15が出番で、先日リリースさせてもらった、LINEやYahoo! IDの連携をテーマにIdentity Experience Framework(IEF)をDeepに解説したいと思います。



IEFを50分で語りつくすのは不可能に近いので、Azure AD B2Cとは?みたいなところは、すっ飛ばしていきなり、フレームワークの構造の話から始めてしまうと思うので、初心者を置いてけぼりにする気がものすごくします。レベル400で足りるのだろうか、、という一抹の不安があります。。。

というわけでチラ見せします。
この画面を見てピンとこないと置いてけぼりになる・・・・ということは無い様に最大限努力はしたいと思いますが、まぁ全編こんな画面を見続けることなると思います。


まぁ、公式ドキュメントがほぼ存在しないという状態なので、プロトコルの仕様とマイクロソフトの開発陣のパラメータ命名規約のクセからXMLのエレメント名と設定値を推測しながら開発を進めていくという苦行をここ半年ばかりやってきたので、少しはわかりやすくご説明できるようになったんじゃないかな、と思っています。

この辺りをマスターすると、以下のような感じで色々なソーシャル・ネットワークをIdPとして使うことが出来る様になったり、外部のDBからRESTでClaimを取得したりすることが出来るようになります。※以下はInstagramとつないだ例です。




ということで、ぼちぼち資料作りを始めていこうと思いますので、当日お会いできることを楽しみにしております。


jwt.msとjwt.io。JWTオンライン・デコーダを比べてみる

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

eyJ・・・とくると脊髄反射してしまうID厨の方々は既にご存知だと思いますが、JWT(Json Web Token)の中身を眺めてデバッグをする時にとっても役に立つのがオンライン・デコーダです。

個人的には、Auth0が提供しているjwt.ioをずっと使っていたのですが、最近マイクロソフトが提供し始めたjwt.msも意外と便利なので比べてみます。

使い方はjwt.ioもjwt.msも共通で、eyJ・・・の文字列を張り付けると自動的にデコードされ、JSONが表示されます。

◆jwt.io

まずはjwt.ioです。

左側に張り付けると右側にデコードされたヘッダ、ペイロードが表示されます。
単純にペイロードの中身にどんなクレームが飛んでいるのかを見るには十分です。

jwt.ioの一番の特徴は各言語毎のJWTのハンドリング用のライブラリと対応状況を掲載しているところでしょう。Ruby用、PHP用ライブラリとして、OpenID Foundation Japanのnovの作品も紹介されています。


◆jwt.ms
次にjwt.msです。

ちなみに画面構成がものすごくシンプルなので、誰が運営しているのか見た目からは全く理解できませんが、whoisで調べるとちゃんとマイクロソフトがドメインの持ち主であることがわかります。

基本機能はjwt.ioと全く同じです。
画面上部に張り付けると下にデコードされた結果が表示されます。

jwt.msの一番の特徴は各クレームの情報が細かく確認できることだと思います。
Claimsタブを開くと各クレームの意味など細かい情報が出てきます。


まとめると、
・ライブラリを調べたい時はjwt.io
・各クレームの意味・仕様を細かく知りたい時はjwt.ms
といったところでしょうか。

まぁ、最終的には好みですね。


Viewing all 769 articles
Browse latest View live