ADFS Proxyサインイン画面のカスタマイズ

ADFSのシングルサインオン環境において、外部からブラウザでアクセスすると、ADFS Proxy経由でのアクセスとなります。
 

この際、オペレーション上で少し気になる点がありました。

  1. 前の画面でIDを入れたのに、再度最初から入力を促される
  2. 前の画面では、username@domain.nameの形式で入力する必要があるが、移行先の画面では入力例がdomainusernameになっている

少し変だなとは感じつつも、まあデフォルトで埋め込まれている物だから仕方ないな…と思っていたのですが、ExchangeのMVPのMike Pfeifferからこれを解消するカスタマイズ方が紹介されています。

Useful Customizations to AD FS 2.0 when Deploying SSO with Office 365

詳しい手法については上記ページに任せようと思いますが(日本語環境でもほぼ一緒です)、こちらに従ってC:inetpubadfslsApp_GlobalResourcesCommonResources.ja.resxとC:inetpubadfslsFormsSignIn.aspx.csのファイルを書き換えます。
 

すると、違和感の無い画面表示になり、ユーザーIDの初期値に前の画面で入力した値(HTTPヘッダ中のGETパラメータのusernameに渡されている値から取得しています)が入力されるようになります。

セキュリティの問題で、メールアドレスのドメイン名とUPNドメイン名を分けている場合などは、UsernameExampleの値を実際の名前では無く「username@example.com」などに汎用化しても良いかもですね。

Office365ライトニングトーク#2

先ほど、Office365ライトニングトーク第2回 で発表が完了しました。

発表したスライドは以下で共有しています。
http://www.slideshare.net/genkiw/office365-customize

他にもこんなことできないのとか、こうやったほうが便利だよとか有ったらみんなで共有していければと思います。

ADFSの自己証明書の期間延長

前回の投稿について、識者からいくつかコメントを頂きました。

  • 自己証明書ではなく、サービス通信証明書をトークン暗号化・トークン署名でも使ったらどうか?

確かに、ADFS関連のトレーニングではこちらの手順についても教えて頂いた記憶がございます。更新時は手動で更新になってしまいますが、全部一緒のタイミングであれば更新し忘れも無いですし、証明書更新のためシステム少し止めますよと言っても理解が得られそうです。

何より面倒くさければ最初から3年間有効な証明書とか買ってしまえば済むことですしね。

 

  • Office365なのに350日で利用出来なくなるのが問題なのだから、名前をOffice350にすれば良いのでは?

なるほどwww

 

というわけで、私の方でも少し対処を考えてみました。そもそも、ADFSの自己証明書の

  1. 期間は365日
  2. 切れる20日前に新しい自己証明書を発行(セカンダリに)
  3. 2から5日経ったらセカンダリの証明書をプライマリに昇格させる

という値が問題になっているということです。こういった物は、きっとパラメーターになっていて、PowerShellなら設定出来るでしょうということで、PowerShellでGet-ADFSPropertiesコマンドを実行してみます。

すると、それっぽいパラメータがあります。

  • CertificateDuration : 365
  • CertificateGenerationThreshold : 20
  • CertificatePromotionThreshold : 5

と言うわけで、証明書の期間を10年にして新しい自己証明書を発行してみます。

Set-AdfsProperties -CertificateDuration 3650
Update-ADFSCertificate -Urgent
Update-MsolFederatedDomain -DomainName contoso.com

これで、ADFSの自己証明書が10年に更新されました。ちなみに、通常はUpdate-ADFSCertificateはUrgentオプションを付けずに実行し、セカンダリの証明書として作成をします。プライマリに昇格するまでの5日間の間に、Update-MsolFederatedDomainコマンドにより新しい証明書をOffice365に転送します。

Office365側にも無事に転送され、10年として認識されていますようです。

と言うわけで、後で忘れそうな方は最初から延長してからADFS環境を組むのも良いかもしれません。

ADFSインストールから350日でSSO不可

MicrosoftスクリプトセンターでMicrosoft Office 365 Federation Metadata Update Automation Installation Toolというスクリプトが公開されました。

こちらですが、やっていることは単純でインストール時に入力した資格情報を元に、毎日0時にUpdate-MsolFederationDomainを実行してくれるという物です。

これの何が嬉しいかと言いますと、Office365のADFSではトークン署名証明書はデフォルトで有効期限が1年間の自己証明書として発行されます。また、自動ロールオーバーの機能によって有効期限の20日前、すなわちインストール時から345日後に新しい証明書が発行され、その5日後(インストールから350日後)に差し替えられます。

この差し替えられた証明書ですが、自動ではOffie365側には登録されないため、インストール後345~350日後の間にOffice365に情報を伝送させておく必要があるということで、これを解決するためにとりあえず毎日情報の更新をOffice365に対して行っておこうというツールです。

Microsoft Office 365 Federation Metadata Update Automation Installation Tool
http://gallery.technet.microsoft.com/scriptcenter/Office-365-Federation-27410bdc

インストールは簡単で、ADFSサーバ上で実行し、Office365の管理者IDの資格情報とローカルサーバ上の資格情報を入力すれば、自動的にC:Office365-Scripts配下にMicrosoft-Office365-Update-MSOLFederatedDomain-CONTOSO.COM.ps1(ドメイン名入り)というps1ファイルと、同じ名前のDailyタスク(毎日0:00起動)を作成してくれます。

私の環境では、ADFS2.0のRU1が出た際に一度再セットアップとUpdate-MsolFederatedDomainを掛けてしまったので、まだこう言った事象には出くわしたことが無いのですが、気づくとこういった物は期限になっていたりするので、今のうちにやっておきましょうという感じですね。

【参考】
シングル サインオンを確認および管理する
トークン署名証明書の有効期限が毎年切れる:既定では、AD FS 2.0 は、毎年有効期限の切れる 20 日前に、自己署名証明書のトークン署名証明書を新たに生成します。証明書のロールオーバー、すなわち証明書の有効期限が近づいたときに新しい証明書を生成してプライマリ証明書に昇格させる機能は、AD FS 2.0 によって生成された自己署名証明書にのみ適用されます。
AD FS 2.0 が新しいトークン署名証明書を生成するタイミングを構成できます。証明書のロールオーバーの時期が近づくと、既存の証明書と名前が同じで秘密キーと拇印が異なる新しい証明書が AD FS 2.0 によって生成されます。新しい証明書は生成後、セカンダリ証明書として 5 日間経過した後プライマリ証明書に昇格します。既定で 5 日間に設定されていますが、変更が可能です。 

ひと目でわかるADFS

日経BPさんより、先週「ひと目でわかるADFS2.0 & Office365連携」が発売されました。

発表時に「ひと目でわかるADFS(仮)」というタイトルだったので、一部で「本当か!?」とささやかれておりましたが、無事発売となったようなので早速購入して来ました。

ページ数は220Pで、1章から6章までの章立てです。

  1. 本書で学習する前に
  2. 認証と認可(承認)
  3. AD FS2.0の基本
  4. AD FS2.0のインストールと構成
  5. ローカルActive DirectoryとOffice365の連携
  6. クライアントアクセスポリシー

内容のレベルについてはOffice365やADFSのトレーニング+ハンズオンをくっつけたような感じで、トラブルシュートや運用系の部分は若干薄めですが、ADFSのさわりを扱うにはとてもよくまとまっている良い書籍かと思います。

ただ、良くも悪くも、各章ごとに知っておくべき事を必要十分な情報量を掲載しています。ADFSを触ったことのある人ならよく分かると思うのですが、認証/認可、RP/CPとか証明書まわりとか、重い部分が2章~3章に重なっており、ここをいかに華麗にマスター…さもなくばスルーするかがひと目で分かるポイントかと思います。

Office365でADFSをとりあえず利用する上では、殆ど選択肢無しのウィザード形式で実装できます。敢えて、4章から読み始めて仕組みでは無く効能・手順から入るようにするのも良いかもしれません。

Office365まとめ・公開始めます

個々の記事とは別に、まとめ記事として上の固定ページの方に「Office365まとめ」の公開を始めます。とはいっても、結構前から上に出てましたけどね;;;

Office365まとめ
https://blog.o365mvp.com/o365/

元は自分の作業のメモ書き程度に利用してましたが、これからは意図してちゃんとこちらのページの方も一緒に更新していきたいと思います。

うまく纏めていって、TIPS集にしていければと思います。

期間限定訴訟ホールドをPowerShellから設定

期間限定訴訟ホールドとは、単一アイテムの回復期限(各メールボックスの削除済みアイテムを復活できる期間:デフォルト14日)を延長することにより、特定のメールボックスにおいて一定期間情報を保全する機能です。

こちらの期限の延長は、30日までであれば通常のExchange Onlineプラン1などでも実施することはできたのですが、利用しようと思うと従来は都度サービスリクエスト(SR)を上げて設定して貰う必要があり、かつメールボックス単位で設定を入れる必要があるので、全メールボックスで期間を30日にするなどの処理は非常に大変でした。

今年に入ってからのサービスの改善で、30日以内の変更であれば、この処理をPowerShellから管理者が実行できるようになりました。コマンドは、PowerShellでExchange Onlineに接続した後に、

 Set-Mailbox -Identity [対象] -RetainDeletedItemsFor [保存期間]

です。例によって、-Identityは省略不可です。また、保存期間は DD.HH:MM:SS形式(例えば30日は30.00:00:00)ですが、省略してDDのみ(30とだけ入力すれば30日と解釈)でも可能です。また、この-RetainDeletedItemsForはTab補完ができませんが、パラメーターとしては存在するので頑張って入力しましょう。

また、31日以上にする場合は、Exchange Onlineのプラン2以上のライセンスが必要になり、かつコマンドからも設定はできませんので、従来通りSRを上げて対応しましょう。

こちらは、特に追加費用無く設定することができますので、標準でデプロイする際に設定しても損は無いかもしれません。

Office365 ライトニングトーク第2回

5月に引き続き、7/6に品川のマイクロソフト本社で第2回のOffice365ライトニングトークが開催されます。

Office365 ライトニングトーク第2回 「俺にOffice365についてしゃべらせろ!」

前回はアクセス制御の部分の話をしましたが、今回はもう少しOffice365の全般的な話をしたいと思っています。

普段からちょこちょこと「Office365まとめ」にメモを書いているのですが、Office365のカスタマイズ(設定変更)について簡単に話をしようかなと思います。

ワールドワイドで見ると、結構日本ではOffice365のデフォルト設定がうまく現在の運用やポリシーに適合しないことがあるので、その辺のところを喋れればなと思います。

ご都合よろしければご来場いただけると幸いです。

ディレクトリ同期のオブジェクト上限値

Office365のディレクトリ同期ツールを利用すると、社内のActiveDirectoryの以下のオブジェクトをOffice365に(使用するしないに関わらず)同期してくれます。

こちらのMicrosoftのドキュメントをチェックすると、この同期のオブジェクト数には上限値が定められていて、それ以上はSRを上げて上限値を引き上げないといけないとあります。この閾値は20000と定められており、こちらはオンプレミスのAD上で「展開準備ツール(Deployment Rediness Tool)」を実行することにより、おおよその数値を知ることが可能です。

カウント対象となるのは以下のオブジェクトです。

  • ユーザー
  • グループ(配布グループ、セキュリティグループ)
  • 外部連絡先
【参考】ディレクトリ同期を準備する
http://onlinehelp.microsoft.com/ja-jp/Office365-enterprises/ff652544.aspx
社内ドメインのオブジェクトの合計数が 20,000 個を超えると、ディレクトリ同期をアクティブ化する前に Office 365 サポートに連絡する必要があります。

殆どのオブジェクトがオンプレミスで同期して利用している場合は問題にならないのですが、例えばExchangeの配布グループはOffice365側で作成(※セルフサービス型で利用したい為)など、ディレクトリ同期するオブジェクトの他に相当数のオブジェクトがクラウドID(非同期オブジェクト)で存在する場合、20000には達していないのに、以下の様なアラートが発生する場合があります。

Unable to add this user because the total number of allowed objects has already been reached.
 + FullyQualifiedErrorId : Microsoft.Online.Administration.Automation.Quota  
ExceededExcption.Microsoft.Online.ADministration.Automation.NewUser

試しに、数十個のオブジェクトだけディレクトリ同期した環境にひたすらオブジェクト(ユーザー)を作っていくと、確かに20000弱(今回の場合は19960個目)のオブジェクトで上記のエラーが出ます。

また、これが発生するとディレクトリ同期ツールからオンプレミスで新規でできたオブジェクトを追加することはできません。どうやら、20000というクォータは同期したオブジェクトの数ではなく、Office365上で作成したオブジェクトも含む数値のようです。

参考までに、これは一時的にではありますが突破することは可能です。

Exchange OnlineからGUIやCSV経由でユーザーを新規作成し、後からOffice365ポータルに同期してサブスクリプション割り当てなどという事を行うことができるのですが、こちらは上記の影響は受けないので作成→ポータルに同期が可能です。

新規で作成したオンプレミスのオブジェクトと同じメールアドレスを持たせて作成すれば、ソフトマッチで同期オブジェクトとすることも可能です。

皆様におかれましてはこうならないように、大規模環境の場合は、上記条件を考慮の上計画的にオブジェクト数を監視して、クォータ上限の引き上げを行って頂ければと思います。

管理者のセルフパスワードリセット機能を無効化する

Office365で、全体管理者のアカウントでログオンを行なおうとすると、一部通常とは異なる挙動となります。

画面がグレーアウトし、「引き続きアカウントにアクセスできるようにする」とポップアップします。IDとPassを入力してサインインすると、(設定されていなければ)携帯の番号とOffice365以外のe-mailアドレスの入力を求められます。

全体管理者は最初1名しか設定されておらず、かつ他のユーザーからパスワード変更を行なうことは勿論ですができません。その唯一の管理者がパスワードを忘れてしまった場合、何も操作ができなくなってしまう事態になるので、これを防止するために作られている機能になります。昨年末くらいのバージョンアップで実装されました。

ちなみに、上記の画面はESCを押したり閉じたりできないのですが、アドレスバーを一度選択して押下(同じアドレスに再接続)もしくはリロードボタンを押せば閉じることができます。

さて、この機能ですが、例えば全体管理者のアカウントが複数あり、相互にパスワードのリセットが可能な状況などの場合は無くても問題ない場合があります。

また、例えば最初に作った管理アカウントadmin@xxxx.onmicrosoft.comなど、個人に紐づいていない管理者アカウントに携帯電話番号など無いと言う場合も有るかと思います。(もちろん、ダミーで入れておくという手も有りますが)

こちらを無効化するには、PowerShellでSet-MsolCompanySettingsのSelfServePasswordResetEnabledにて制御を行なうことが可能です。

Set-MsolCompanySettings -SelfServePasswordResetEnabled $false

これをfalseに設定しておけば、上記のような画面が出ずに、通常通り管理者アカウントでログインできるようになります。