2015年4月30日木曜日

[Azure/SAML]Azure Webアプリにお手軽テスト用SAML SPをデプロイする

Azure Active Directory(AzureAD)やActive Directory Federation Service(AD FS)を始めとしたSAMLに対応したIdentity Provider(IdP)を構築すると、どうしても必要になるのがテストに使うアプリケーション(Service Provider/SP)です。

個人的には設定が超お手軽なGoogle Appsをテスト用SPとして使ったりすることが多いのですが、もう少し簡単なアプリケーションが欲しいなぁ、、と思うことも多くオンプレの環境にはPHPアプリケーション用のPHPライブラリであるSimpleSAMLphpをセットアップしてあったりします。
※WIFとかADALがちゃんとSAMLを喋れればいいんですが、ws-federation/OpenID Connectなんで実はSAML SPってぽっかり穴が空いています。

今回はもう少しお手軽にいつでも試せる環境を、ということでAzure WebアプリにSimpleSAMLphpをデプロイしてみます。

尚、考えることはみんな一緒で日本マイクロソフトの松崎さんも同じようなことを考えていらっしゃったようです。
http://blogs.msdn.com/b/tsmatsuz/archive/2014/01/30/azure-ad-and-php-application-sso-federation-using-simplesamlphp.aspx

松崎さんがblogを書かれた段階ではAzure WebsiteにはうまくSimpleSAMLphpが導入できなかった様なのですが、現在は割と素直に導入できました。


では、さっそくやってみます。

◆Azure Webアプリ(WebSite)の作成

ギャラリーから空のサイト(PHP)を選択し、Webサイトを作成します。



◆SimpleSAMLphpのダウンロードと展開

以下のURLから最新のSimpleSAMLphpをダウンロードし、ローカルの任意のフォルダにtar.gzを展開します。

 SimpleSAMLphp
 https://simplesamlphp.org/


◆Azure Webアプリへのデプロイ

Azureへのデプロイ方法はFTPなど色々とありますが、今回は先ほどモジュールを展開でぃたフォルダをGitのローカルレポジトリに設定してデプロイしました。

まずは、作成したWebアプリの「ソース管理の統合」メニューの「ソースコードの位置」で「ローカルGitレポジトリ」を選択します。



そして、ローカルのGitレポジトリを設定します。
※Gitクライアントなどのセットアップ方法は省略します。

Git Bashでモジュールを展開したフォルダへ移動し、以下を打ち込みます。
git init
git add .
git commit -m "initial commit"
git clone https://naohiro@samlsp1.scm.azurewebsites.net:443/samlsp1.git
git remote add azure https://naohiro@samlsp1.scm.azurewebsites.net:443/samlsp1.git
git push azure master


これでモジュールがAzure上にデプロイされました。


◆仮想ディレクトリの設定

デプロイしたモジュールへ外からアクセスするための仮想ディレクトリを設定します。
SimpleSAMLphpでは/simplesamlという仮想ディレクトリに[展開先]/simplesamlphp/wwwをマッピングする必要がありますので、以下のような仮想ディレクトリを設定します。


◆SimpleSAMLphpへのSP登録

テスト用なのでデフォルトで登録されているSPを使います。
SP設定は[展開先]/config/authsources.phpファイルに存在するので、ローカルで対象ファイルを編集します。
ファイルの中に'default-sp'というブロックがあるので、その中を修正します。

変更点は、以下の3点です。

  • entityID : 何でも構わないんですが、一般にSPのURLを設定するので、「http://samlsp1.azurewebsites.net」の様に設定しました。
  • idp:ここは設定しなくても良いのですが、デフォルトで使うIdPとしてPingIdentityのPingOneを使いたかったので、PingOneの自分のテナントのURLを指定します。
  • NameIDPolicy:SimpleSAMLphpは初期値でtransientが設定されるので、何が来ても良いようにNULLにしておきます。


こんな感じで設定しました。
'default-sp' => array(
        'saml:SP',

        // The entity ID of this SP.
        // Can be NULL/unset, in which case an entity ID is generated based on the metadata URL.
        'entityID' => 'http://samlsp1.azurewebsites.net',

        // The entity ID of the IdP this should SP should contact.
        // Can be NULL/unset, in which case the user will be shown a list of available IdPs.
        'idp' => 'https://pingone.com/idp/xxxxxx',

        // nameid
        'NameIDPolicy' => NULL,



ローカルでauthsources.phpを更新したので、GitでAzure上へデプロイしておきます。
git add --all
git commit -m "sp config"
git push azure master


この段階で念のためAzure Webアプリの再起動をしておきましょう。


◆IdP(PingOne)へのSP登録

今回はテスト用IdPとしてPingOneを指定しました。

まずは先にSimpleSAMLphpの管理ページにアクセスし、[連携]タブより登録したSPのメタデータを取得します。

http://samlsp1.azurewebsites.net/simplesaml/
という形でsamplesamlという名前で作成した仮想ディレクトリへアクセスするとSimpleSAMLphpの管理画面が開きますので、[連携]タブよりメタデータを表示を選択するとメタデータのURLが表示されるので、このURLをメモしておきます。後でこれをPingOneに設定するので。




次にPingOneの管理コンソールにアクセスします。

 PingOne管理コンソール
 https://admin.pingone.com/

この[Application]タブを開くとアプリケーションの追加が出来ます。
[Add Application]より[New SAML Application]を選択しアプリケーション名、説明などを設定して行きます。
重要なのは、先のSPメタデータを[Upload Metadata]に指定することと、SAML Metadataの項目でIdP側のメタデータをダウンロードしておくことです。





またSAML Assertionに含める属性とPingOneのレポジトリ内の属性とのマッピングを設定することも可能です。



これでIdPの設定は終わりです。



◆SPへのIdP登録

再度SimpleSAMLphpの管理画面を開き、[連携]メニューより[XMLをsimpleSAMLphpメタデータに変換]を選択し、先ほどダウンロードしたPingOneのIdPメタデータをSimpleSAMLphp用の設定ファイルへ変換します。


メタデータパーサにダウンロードしたIdPメタデータを張り付けて[パース]をクリックするとSimpleSAMLphpに設定する内容が表示されます。


ここで出来上がった設定をローカルの[展開先]/metadata/saml20-idp-remote.phpのphpタグの間に貼り付け、保存して先ほどと同じようにgit pushし、Azure Webアプリを再起動します。


◆動作テスト

これで設定は完了ですが、すこしわかりやすいアプリケーションを作ってSAML Assertionの中身を見えるようにしてみます。
基本は松崎さんのblogに上がっているphpアプリケーションでモジュールのパスを変えただけです。

<?php
  require_once("simplesamlphp/lib/_autoload.php");
  $as = new SimpleSAML_Auth_Simple('default-sp');
  $as->requireAuth();
  $attributes = $as->getAttributes();
?>
<div style="font-weight: bold;">Test SAML SP</div>
<table border="1">
<?php  foreach ($attributes as $key => $value): ?>
  <tr>
    <td><?=$key;?></td>
    <td><?=$value[0];?></td>
  </tr>
<?php endforeach;?>
</table>


これをローカルの[展開先]ディレクトリ直下にindex.phpとして配置し、git pushします。


これで、アプリケーションも含めすべての準備が整いました。
早速アプリケーションにアクセスすると、PingOneのログイン画面が表示されるのでログインすると、アプリケーションが表示されます。



多少手間ではありますが、これで無償で常時稼働出来るSAML SPが完成しました。
設定もgitで管理できるので新しいIdPを作った際に少し修正して、戻して、、といったことが簡単に出来るようになります。

2015年4月23日木曜日

[Office365]Officeクライアントで多要素認証(Outlook編)

昨年末に発表されたOffice2013 Windowsクライアント(Outlookなど)の多要素認証対応が2015年3月にPublic Previewになった、という話を書きましたが、ようやく試してみましたので簡単に紹介します。

関連ポスト)
・Office2013 Windowsクライアントが多要素認証とSAML IdPサポート
 http://idmlab.eidentity.jp/2014/11/office2013-windowssaml-idp.html
・[Office Preview]Outlook等の多要素認証サポート
 http://idmlab.eidentity.jp/2015/03/office-previewoutlook.html


簡単に言いますとOfficeクライアントがADAL(Active Directory Authentication Library)に対応した、というだけなのですが、Office Teamの公式Blogなどでは「Office Modern Authentication」なんて呼んでいます。

◆準備
以下の2点を事前に実施する必要があります。

①Office365のテナントに対してModern Authenticationを有効にしてもらう
 ⇒現在実施中のPublic Previewプログラムに参加する必要があります。参加するにはMicrosoft Connectサイトへの登録とアンケートへの回答が必要です。

②OfficeクライアントをインストールするPCのレジストリを変更する
 ⇒以下のキーを追加する必要があります。

レジストリ・キータイプ
HKCU\SOFTWARE\Microsoft\Office\15.0\Common\Identity\EnableADALREG_DWORD1
HKCU\SOFTWARE\Microsoft\Office\15.0\Common\Identity\VersionREG_DWORD1
HKCU\SOFTWARE\Microsoft\Office\15.0\Common\Debug\TCOTraceREG_DWORD3

  詳細は以下のURLに記載されています。
  https://support.office.com/en-us/article/Enable-Modern-Authentication-for-Office-2013-on-Windows-devices-7dc1c01a-090f-4971-9677-f1b192d6c910?ui=en-US&rs=en-US&ad=US


※詳細は公式blogをみてください。
 http://blogs.office.com/2015/03/23/office-2013-modern-authentication-public-preview-announced/


◆Outlookにアカウントを追加する
準備が出来たら早速試してみます。
今回は多要素認証を有効、かつAD FSとID連携しているアカウントを使ってExchange Onlineに接続してみます。

①Outlookを起動し、アカウント情報を入力する。
 この際、パスワードを入れずに[次へ]をクリックします。



②AD FSのログイン画面が表示されるのでログインする。


③多要素認証を行う。
 今回はOffice365側の多要素認証を有効にしているアカウントなので、Microsoft Azure Authenticatorアプリケーションで追加認証をします。


④アカウント設定が完了する
 これで設定は完了です。Outlookを再起動して使い始めましょう。



通常の使用についてはこれで問題ないと思うのですが、セキュリティ面からはOutlookを起動する都度認証をしたいところです。
ところが、アカウントの設定⇒セキュリティ設定で[ログオン情報を毎回入力する]を設定しようとしたのですが、グレーアウトされており設定できませんでした。


今のところ端末を紛失したら困りますね。。。発行したトークンの無効化をする様な画面も見当たらないですし。。
このあたりは少し改善が必要なポイントかも知れません。
(公式blogのコメント欄で同じ質問している人がいますが回答はないみたいです)

2015年4月22日水曜日

[MIM]新しいPublic Previewがリリース、MIM2016へ

新しいMicrosoft Identity Manager(MIM)のPreviewがリリースされました。
都合CTP4になりますが、公式Blogによるとベータ・クォリティとの記述があるので、ほぼ完成の域に近づいてきた、ということだと思います。

Active Directory Team Blog
 Microsoft Identity Manager Public Preview Updated
 http://blogs.technet.com/b/ad/archive/2015/04/21/microsoft-identity-manager-public-preview-updated.aspx

更新されたポイントはやはり特権アクセス管理(Privilege Access Manage/PAM)回りが中心ですが、Azure ADと連携したレポーティング機能についても更新されています。
(こちらはPrivate Preview)
また、今回のリリースからForefront Identity Manager 2010R2(FIM)からのインプレース・アップデートが出来るようになっているようなので、その点も注目です。

  1. Manual approval of elevation requests
  2. The ability to require a Multi-Factor Authentication challenge as part of an elevation request
  3. Improved security monitoring of your privileged forest
  4. Azure AD based reporting capabilities in the cloud


個人的には2番目の特権アクセスを多要素認証で取得するあたりがとても良い機能だと思います。


Connectサイトに登録すれば誰でもダウンロードできるので、FIM使いの方は是非試してみましょう。

2015年4月21日火曜日

[Google]4/20を迎えてAPIはどうなった?

# 2015/04/23現在
# ClientLogin : OK
# OpenID 2.0 : OK
# Provisioning API : NG - 503 Quota exceeded for the current request

GoogleのIdentityに関与している人なら少なからず気にしていた2015年4月20日を遂に迎えたわけですが、実際移行し忘れた人たちがどうなったのか、、、を確認してみたいと思います。

OpenID 2.0のサポート終了関連
 ⇒ Azure Access Control Services 2.0(ACS)

 関連ポスト)
  GoogleのOpenID 2.0サポート終了による影響いろいろ(Azure ACS編)
  http://idmlab.eidentity.jp/2015/03/googleopenid-20azure-acs.html

ClientLoginおよびProvisioning APIのサポート終了関連
 ⇒ Forefront Identity Manager(FIM)用のGoogle Apps管理エージェント(旧版)

 関連ポスト)
  [FIM]汎用REST管理エージェントをリリースしました
  http://idmlab.eidentity.jp/2015/03/fimrest.html


結論、4/21現在両方ともまだ使えました(笑)
(Azure ACSについては元々2015/6/1までは使える、と言っているので使えて当然ですが)


◆OpenID 2.0

ACSを使うサービスでログオンするとOpenID 2.0を使って認証しているのがわかります。


◆ClientLoginおよびProvisioning API

ClientLoginでGoogle Appsの管理者IDとパスワードを投げ込んでGoogle Auth Tokenを取得し、Provisoning APIへクエリを投げてユーザ一覧の取得が出来ています。





まぁ、いつ使えなくなってもおかしくないので早めに移行した方が良いですね。
(旧版のGoogle Apps管理エージェントのサポートがあるので、使えなくなったらどんな動きをするのか早く把握したい・・・)

2015年4月20日月曜日

[GoogleApps/AD FS]iOS8.3でのアカウント管理の改善

手元のiPadのOSを順番に8.3にアップデートしている中で気が付いたのですがiOSのメール・カレンダーなのでアカウントにSSO設定がされたGoogle Appsアカウントの設定が出来るようになっています。
地味なアップデートですが、エンタープライズでGoogle Appsを利用しているユーザにとっては実は大きな意味を持つアップデータなので、これまでの課題と本アップデートによる今後のID運用の可能性について考えてみたいと思います。

◆これまでの課題
ネイティブアプリにアプリケーション・パスワードを使いたいのに、SSOユーザではアプリケーション・パスワードは使えない!

実際設定してしまえば動くのですが、SSOと2段階認証の同時設定はサポートされていません

https://support.google.com/a/answer/175197?hl=ja


このことにより、iOS標準のアプリケーションを始め、OutlookなどのネイティブアプリケーションをSSOが有効なユーザでは使うことが出来ず、スマホからでもブラウザを使うか、Google製のGMailアプリケーションを使う必要がありました

当然スマホからブラウザベースでサービスを使うとオフラインでのアクセスが出来なかったり、ユーザ・インターフェイスの面でかなりの苦痛があったりと実用性の面ではかなりの課題がありました。
(そのためにSecure Browserソリューションが流行っているんだと思います)

また、Google製のアプリケーションを使う場合、あくまでブラウザベースでのログイン(Cookieベース)なので、紛失した端末だけ強制ログアウトする、ということが出来ず、すべてのブラウザセッションを無効化することになってしまいます。(他の端末やPCのブラウザを含めすべてログオフされてしまう)


◆iOS8.3での改善
⇒標準メール・カレンダー等のアカウントへの外部IdPでの認証がサポートされ、認可がOAuthベースとなったことにより、SSOユーザでも標準アプリケーションが利用できる!

・認証)外部IdPのサポート
 ⇒Google側での2段階認証を使わなくてもIdP側で多要素認証を実装することでより柔軟な構成が可能

・認可)OAuthのサポート
 ⇒クライアント(アプリケーション)単位で権限委譲を取り消すことが可能なので、アプリケーション・パスワードと同じく、端末やアプリケーション単位で利用を不可能に出来る。(全セッションをクリアする必要がなくなる)


◆実際の動作と設定
早速試してみます。

まず、iOSの設定からGoogleアカウントを追加します。


Googleのログイン画面が出てくるので、SSOが有効なドメインのユーザ名のみを入力して[ログイン]をクリックします。


するとGoogle Appsに設定してある外部IdP(今回はAD FS)のログイン画面に遷移するのでIdPにログインします。
必要に応じて外部IdPに多要素認証を設定するとよりセキュアです。


認証に成功すると、iOSに対して認可をするかどうかの同意画面が表示されるので必要な権限を委譲します。



これでSSOユーザで標準アプリケーションが利用可能となります。



では、今度は端末を紛失したことを想定し、アプリケーションを利用できない様にしてみます。
方法としては、管理者による取り消しと利用者自身による取り消しの両方が可能ですが、今回は利用者自身で権限を取り消してみます。
ブラウザでサービスにログインした状態で画面右上のアカウント設定を開き、接続されたアプリとサービスのアカウント権限をクリックします。



すると、アクセス権を与えたiOSが出てきますので、[アクセス権を取り消す]をクリックします。



アプリケーションで送受信などの操作をするとエラーが表示され、再度認証をするように求められるためアプリケーションが利用できなくなります。


※ただし、すでにローカルにダウンロードしてしまったコンテンツについては引き続き閲覧可能なので、リモート・ワイプなどとの組み合わせは必要です(アプリケーション・パスワードの場合も同様)


これまではGoogle製のアプリケーションを別途導入したり、サードパーティのソリューションを使う必要があったことを考えると端末管理の観点からもかなり有効な解決策となっていると思います。

課題は各端末をiOS8.3にアップデートするところになるとは思いますが・・・

2015年4月13日月曜日

[FIM/MIM]ビルトインの管理ポリシールールの拡張

今年夏にリリースされる予定のMicrosoft Identity Manager 2015(MIM)では特権アカウント管理に関する各種の機能拡張が行われています。

今回はMIM Serviceの管理ポリシールール(Management Policy Rule/MPR)が現行バージョンであるForefront Identity Manager 2010R2 SP1(FIM)とどのように変わったのかを見てみます。
※MIM 2015 CTP3とFIM 2010R2 SP1を比較していますので、リリースまでに変わる可能性があります。

以下のスクリプトで定義されているMPR一覧が取得できるので、変化点を見てみましょう。

Add-PSSnapin FIMAutomaion
$curObject = Export-FIMConfig -Uri http://localhost:5725/resourcemanagementservice -OnlyBaseResources -CustomConfig ("/ManagementPolicyRule")
foreach ($fimobject in $curObject)
{
   $attributes = $fimobject.ResourceManagementObject.ResourceManagementAttributes
   $displayName = $attributes | where {$_.AttributeName -eq 'DisplayName'}
   write-host $displayName.Value
}

結果、以下の通りとなりました。
色を付けた部分のセルが新規追加になっているMPRです。
PAM(Privilege Access Management/特権アカウント管理)部分だけですね。
MPR一覧
Administration - Schema: Administrators can change selected attributes of non-system attribute type descriptionresources
Administration - Schema: Administrators can change selected attributes of non-system binding description resources
Administration - Schema: Administrators can change selected attributes of non-system schema related resources
Administration - Schema: Administrators can change selected attributes of schema related resources
Administration - Schema: Administrators can create attribute type description resources
Administration - Schema: Administrators can create binding description resources
Administration - Schema: Administrators can create resource type description resources
Administration - Schema: Administrators can delete non-system schema related resources
Administration: Administrators can control requests
Administration: Administrators can control synchronization configuration resources
Administration: Administrators can delete non-administrator users
Administration: Administrators can read all resources
Administration: Administrators can read and update Users
Administration: Administrators can update synchronization filter resources
Administration: Administrators control configuration related resources
Administration: Administrators control management policy rule resources
Administration: Administrators control set resources
Administration: Administrators control synchronization rule resources
Administration: Administrators control workflow definition resources
Administrators have full control over filter scope resources
Anonymous users can reset their password
Button viewable management: Members could read all attributes of the sets in all button viewable sets
Distribution list management: Owners can read attributes of group resources
Distribution list management: Owners can update and delete groups they own
Distribution list Management: Users can add or remove any members of groups subject to owner approval
Distribution list management: Users can add or remove any members of groups that don't require owner approval
Distribution List management: Users can create Static Distribution Groups
Distribution list management: Users can read selected attributes of group resources
General workflow: Filter attribute validation for administrator
General workflow: Filter attribute validation for non-administrators
General workflow: Registration initiation for authentication activity
General: Users can read non-administrative configuration resources
General: Users can read schema related resources
Group management workflow: Group information validation for dynamic groups
Group management workflow: Group information validation for static groups
Group management workflow: Owner approval on add member
Group management workflow: Validate requestor on add member to open group
Group management workflow: Validate requestor on remove member
Group management: Group administrators can create and delete group resources
Group management: Group administrators can read attributes of group resources
Group management: Group administrators can update group resources
[新規]PAM: Administrators control PAM Requests
[新規]PAM: Administrators control PAM Roles
[新規]PAM: User can read Pam Roles that he can request
[新規]PAM: User can see PAM requests that he created
[新規]PAM: Users can create a PAM Request
Password reset users can read password reset objects
Password Reset Users can update the lockout attributes of themselves
Reporting Administration: Administrators can control reporting binding resources.
Reporting Administration: Administrators can control reporting job resources.
Request management: Request approvers can read their approval resources
Request management: Request approvers can read their approval response resources
Request management: Request creators can cancel their requests
Request management: Request creators can read related approval response resources
Request management: Request creators can read their approval resources
Request management: Request creators can read their request resource
Request management: Request participants can read related approval resources
Request management: Request participants can read related approval response resources
Request management: Request participants can read their request resource
Security group management: Owners can read selected attributes of group resources
Security group management: Owners can update and delete groups they own
Security group management: Users can add or remove any member of groups subject to owner approval
Security Group management: Users can create Static Security Groups
Security group management: Users can read selected attributes of group resources
Security groups: Users can add and remove members to open groups
Synchronization: Synchronization account can delete and update expected rule entry resources
Synchronization: Synchronization account can read group resources it synchronizes
Synchronization: Synchronization account can read schema related resources
Synchronization: Synchronization account can read synchronization related resources
Synchronization: Synchronization account can read users it synchronizes
Synchronization: Synchronization account controls detected rule entry resources
Synchronization: Synchronization account controls group resources it synchronizes
Synchronization: Synchronization account controls synchronization configuration resources
Synchronization: Synchronization account controls users it synchronizes
Temporal policy workflow: Impending group resource expiry notification
User management: Users can read attributes of their own
User management: Users can read selected attributes of other users
Users can create registration objects for themselves
Users can modify registration objects for themselves

2015年4月9日木曜日

[MIM]特権アクセス管理のデモ動画

今年リリースされる予定のForefront Identity Manager 2010R2(FIM)の後継バージョンである、Microsoft Identity Manager 2015(MIM)の一番の目玉機能はなんといっても「特権アクセス管理(Privileged Access Management/PAM)です。

この機能を使うとActive Directory上のユーザに一時的に特権を付与することが出来ます

このことにより、

  • 個人アカウントで管理をすることが出来るので、いつ、だれが、何をしたのか?について正確にロギング出来る
  • 必要な時に必要な権限を付与するので、不要な権限を与えることによる事故が起きにくい
  • ビルトインAdministratorなどの特権ユーザを管理者や運用者間で共有する必要がなくなるので、システム管理を安全に行うことが出来る
など様々なメリットを享受することが出来ます。

特に仮想化テクノロジを使ってグループ企業向けのプライベート・クラウドを提供しているような環境においては管理者アカウントの管理は非常に重要な意味合いを持つので、今後ますます厳重に管理をしていくべき対象となることでしょう。
これまでActive Directory上の特権アカウントの管理は非常に面倒だったので、今回のMIMのリリースは今後のシステム管理を行う上での重要な意味を持つものになると考えられます。


と、ここまで書きましたが文字ばかりだとイメージがつきにくいと思います。
そんな方に朗報です。

私と同じFIM MVPのEihab Isaac氏がPAMのデモ動画をYouTubeにアップロードしてくれています。
3分程度と非常に短いながらも非常にわかりやすいので是非ご覧ください。