KB2920189が適用できない

少しはまったのでメモ代わりに。

KB2920189を適用しようとすると、一部の仮想マシンでどうしても800F0922のエラーコードで成功しない事がありました。

無題1

無題2

なぜ特定VMだけかなと、思っていたのですが切り分けしてみるとHyper-Vの第二世代で作成したVMのみ失敗します。

解決するには、VMを一度シャットダウンし、Hyper-Vのファームウェアの設定から[セキュアブートを有効にする]のチェックを外し、Windows Updateを実行します。

 

無題3

無事インストールできました。無題4 無題5

さて、第2世代をプロダクション環境で利用開始してもいいものか…。もう少しノウハウ蓄積してからにしようか悩み中。

あ、もちろんアップデートが終わった後はファームウェアの設定を元に戻しておきましょう。

Office365で階層型アドレス帳が利用可能に②

前回の投稿では、Office365で利用可能になった階層化アドレス帳のさわりをご紹介しました。

今回は、実際に利用していく上でいくつか考えていく必要のあることを中心にお話したいと思います。

1.階層として利用できるグループの種類について

Office365では、①メールが有効なセキュリティグループ ②配布グループ ③動的配布グループ という3つの種類のグループを利用する事ができます。

 

20140325_01

テストというグループの下にそれぞれの種類のグループを入れて、アドレス帳に表示しないオプションを入れてない物-1(デフォルト値)と入れていない物-2を作成しました。

動的配布グループはアドレス帳に表示しないオプションの選択や階層化アドレス帳として利用する為に必要な Set-Group -IsHierarchicalGroup $true 自体が入れられませんでしたが、とりあえずはグループメンバーに入れたままテストしてみます。
20140325_03

結論)階層化アドレス帳の階層グループには「メールが有効なセキュリティグループ」「配布グループ」が利用できる。利用する場合はPowerShellのSet-Groupコマンドレットで -IsHierarchicalGroup を $true に設定し、アドレス帳非表示の属性は有効化してはいけない。

2.複数組織にまたがるユーザー(兼務者)の扱いについて

階層化アドレス帳はグループ内のメンバーであるユーザーを再帰的な展開はせずにそのまま表示します。この為、例えば「Contosoグループ会長 兼 Fabrikam株式会社社長」などのユーザーを表現したい場合は、「Contosoグループ」「Fabrikam株式会社」の両方のグループのメンバとして登録すれば両方に表示されます。
20140325_04

ただし、注意が必要なのは右側の一覧画面の中で表示される「役職」についてはグループの情報では無く、各ユーザーに静的に設定された値が表示されますので、一般的には本務の方を役職欄に入れる形が多いかと思います。

3.同一グループ内の並び順について

ここが階層化アドレス帳の最大の特徴にして、日本から要望が上がって機能化したんだなとしみじみ思う点の1つです。日本人は、社員の一覧を表示する際に50音順では無く役職順に並ぶ事を美学としています。

この為、
20140325_05
こーんな並び方をしてた日には、酒井総務課長からけしからんというメールを頂く事にもなりかねません。

このため、階層化アドレス帳で表示させるユーザーやグループには、SeniorityIndex というパラメータを設定して明示的に偉さの順番を表現することができます。

例えば、社長440 常務430 部長320 課長 310 係長220 社員210 などと定めて、それを各社員にSet-User -SeniorityIndex で設定をしておけば、
20140325_06

といった表示となり、酒井総務課長も満足してくれます。また、複数の同一階層の組織の並び順(例えば営業部が前なのか総務部が前なのかなど)を行う際にも利用できます。

元から会社の人事システムなどでコードがあればそれで良いですし、なければ後から間に役職を足せるように適宜間を開けた数を振りましょう。(え?担当部長代理と担当課長とどっちが偉いかって? そんな事は人事の人にでも聞いて下さいw)

4.同一階層内での並び順について

同一階層で、同一SeniorityIndexの場合、もしくはその設定が無い場合、並び順はフリガナが設定してあればその順に、無ければASCIIコード順になります。

こちらもASCIIコード順だと特に日本語の環境の場合は視認性が悪くなりますので、フリガナを設定しておきましょう。コマンドはSet-User [ユーザー名] -PhoneticDisplayName [フリガナ]です。

5.その他

  • Outlook Web App(OWA) からは利用できません。Outlook 2010/2013のみです。OWAからも利用したい場合は、BBSさんのAddressLookなどのアドインを活用しましょう。
  • 階層型アドレス帳関連の設定は基本的にPowerShellからコマンドラインベースで行います。組織改編や人事異動は気合いで乗り切りましょう。(昔は管理ツールとかも出てたのですが
  • アドレス帳ポリシー(ABP)と併用することはサポートされていません(参考)。(※試した限りでは上手く階層が作れれば動きます。アドレス帳非表示設定になってると階層型アドレス帳に表示されないのと同じ理屈で、トップから表示させたい各階層のグループ&メンバーまで上手くアドレス帳ポリシーに則って分割できれば…。)

 

ADFSでの所属ADグループによる制御について

Office 365でADFSを利用するとActive Directoryのグループをベースとしたアクセス制御を実装することができます。

Microsoftのサイトなどに設定例などがいくつか記載されておりますが、今回、主に大規模な組織でこのルールを運用する場合、こちらのサンプルをそのまま利用すると一部書式の問題でセキュリティリスクに繋がると考えられる物があるためこちらで共有します。

クライアントの場所に基づいた Office 365 サービスに対するアクセスの制限
An ADFS Claims Rules Adventure

書式のサンプルは以下の通りです。グループ名ではなくSIDを利用するというのはActive Directoryなどでの管理と同じで、グループの名称を変更しても不変な値をベースとして制御しています。

exists([Type == ”http://schemas.microsoft.com/ws/2008/06/identity/claims/groupsid", Value =~ "Group SID value of allowed AD group"])

例えば、以下のSG1というセキュリティグループでアクセス拒否の制御をする場合は、
20140323_01

exists([Type == ”http://schemas.microsoft.com/ws/2008/06/identity/claims/groupsid", Value =~ "S-1-5-21-589771422-1504810464-123969929-1223"])
=> issue(Type = "http://schemas.microsoft.com/authorization/claims/deny", Value = "true");

などとします。

ところが、ここで1点問題と考えられるのが、上記赤字で書いた部分の書式です。==は「等しい」ですが、=~は「含む」です。また、SIDはGUIDなどとは違い可変長で、末尾の数字はグループが作成される度にインクリメントされてどんどん数字が増えていきます。

つまり、グループの数がどんどん増えて行った場合、いずれはSIDが一桁上がって制御すべきグループのSIDを「含む」グループが作成される可能性があるということです。
20140323_02

これにより、特定グループのメンバーを拒否しようとしたら別のグループのメンバーが意図せず拒否されてしまったり、特定グループのみアクセス許可していたサービスが意図せず許可されてしまうということが起こる可能性があります。

もっとも、ユーザーが作成するグループのSIDは基本的に4桁(1100番台?)から作成されるので、これが問題になるのは5桁のSIDが作成されるような10000以上のグループがある大きな組織になりますが。

exists([Type == ”http://schemas.microsoft.com/ws/2008/06/identity/claims/groupsid", Value == "S-1-5-21-589771422-1504810464-123969929-1223"])
 => issue(Type = "http://schemas.microsoft.com/authorization/claims/deny", Value = "true");

とすることにより、意図した挙動とすることができます。

Office365で階層型アドレス帳が利用可能に①

Office365(Exchange Online)は、新機能の追加に加え、「パブリックフォルダ」「アドレス帳の分割」など、発表以降オンプレミスのExchange Serverでしかできない機能制約がどんどん解消されています。

今回、その中で特に日本のユーザーにとって要望が多かった階層型アドレス帳(HAB)がOffice365でも利用できるようになりました。

階層型アドレス帳というのは、階層構造の組織をそのままアドレス帳として表示させる物です。(特に日本の企業であればなじみやすいかと思います。)
スクリーンショット (38)

階層型アドレス帳を利用する手順は、大きく以下の2つになります。(その後、必要に応じて並び順などのカスタマイズを行いますが、これは次回の投稿で書きたいと思います)

  1. 階層構造として表示したいアドレスをグループとそのメンバーとして表現し、そのグループのIsHierarchicalGroupの属性をTrueにする
  2. Set-OrganizationConfigで階層構造の最上位となるグループを指定する

会社組織の場合は最上位は「全社」、企業グループの場合は「○○グループ」になります。今回は、Contoso株式会社とFabrikam株式会社から構成されるContosoグループでアドレス帳を作ってみます。

階層用のグループは専用で作成しても良いですし、既存で利用している組織グループがあればそれでも構いません。グループを作成してメンバーを構成したら、各グループにIsHierarchicalGroupのフラグをセットします。

Set-Group -identity [グループ名] -IsHierarchicalGroup $true

そして、最後に最上位のグループを指定します。(Enable-OrganizationCustomizationが必要とエラーメッセージが出た場合、事前に実行します。)

Set-OrganizationConfig -HierarchicalAddressBookRoot [最上位グループ名]

これで、Outlookからアドレス帳を開くと(OWAからは階層化アドレス帳は利用できません。Outlook専用です)、新たに「組織」というタブが表示されるようになります。

(設定前)
スクリーンショット (39)

(設定後)
スクリーンショット (36)  スクリーンショット (37)

次回は、階層化アドレス帳を実際に利用していく上でのTIPSをいくつか紹介したいと思います。

それにしてもどんどん便利になっていきますね。

2013年のまとめ

WordPress.com 統計チームは、2013年のあなたのブログの年間まとめレポートを用意しました。

概要はこちらです。

ルーブル美術館には毎年850万人が訪れます。2013にこのブログは約220,000回表示されました。ルーブル美術館と同じだけの来場者が訪れるには約9日かかることになります。

レポートをすべて見るにはクリックしてください。

ディレクトリ同期の運用自動化

この記事は、Office 365 Advent Calendarに参加しています。

AD FSやディレクトリ同期を利用すると、オンプレミスのADとOffice365の間でシームレスな運用が可能になります。ただ、

  • 同期間隔が3時間
  • 同期後のサブスクリプションの割り当てが管理者が実行しなくてはならない

など、いくつか運用として管理者が対処を行わなければならない部分が存在します。

今回はディレクトリ同期で新規で作成されたユーザーに対してOffice365のプロビジョニング(サブスクリプションの割り当て)を自動で実施できるようにしたいと思います。特に社内でIdMなどを利用している場合などについては有用だと思います。

同期ユーザーの中でどのユーザーにライセンスを割り当てるかの判定は、各組織によって色々と実装方式は有ると思いますが、今回WAAD Premium のグループ管理機能と同じようにグループで判断したいと思います。

まずは、以下の内容のps1スクリプトファイルを作成して適当なフォルダに配置します。管理者のID、PassやSKU(Get-MsolAccountSkuコマンドで取得可能)、グループ名などは実際の環境に合わせて修正してください。今回はc:workscriptsautodirsync.ps1として保存します。

######################################################################
#
#    Office 365 Auto Provisioning Script for DirSync (autodirsync.ps1)
#       2013/12/11     https://blog.o365mvp.com/
#
######################################################################
$adminuser = "admin@contoso.onmicrosoft.com"     # TenantAdmin UserName
$adminpass = "P@ssw0rd"                          # TenantAdmin Passrord
$group = "Office365e3"                           # Target Group
$sku = "contoso:ENTERPRISEPACK"                  # Office365 SKU ID (cf.Get-MsolAccountSku)
$skuname = "E3"                                  # Office365 SKU name
$log = "c:workscriptsautodirsync.log"         # Log Filename

(Get-Date -Format "yyyy/MM/dd HH:mm:ss") + " Office 365 Auto Provisioning Script Start" | Out-File $log -Append

sleep 60                  # Wait for reflect DirSync information

Import-Module MSOnline
$password = ConvertTo-SecureString $adminpass -AsPlainText -Force
$LiveCred = New-Object System.Management.Automation.PSCredential $adminuser,$password
Connect-MsolService -Credential $LiveCred

$member = Get-MsolGroupMember -GroupObjectId (Get-MsolGroup -SearchString $group).ObjectId -All
$unlicensed = Get-MsolUser -UnlicensedUsersOnly
foreach ( $user in $unlicensed ){
    $result = $member | ? {$_.ObjectID -eq $user.ObjectID}
    if ($result) {
        (Get-Date -Format "yyyy/MM/dd HH:mm:ss") + " Add $skuname License to " + $user.UserPrincipalName | Out-File $log -Append
        Set-MsolUser -UserPrincipalName $user.UserPrincipalName -UsageLocation JP
        Set-MsolUserLicense -UserPrincipalName $user.UserPrincipalName -AddLicenses $sku
    }
}
(Get-Date -Format "yyyy/MM/dd HH:mm:ss") + " Office 365 Auto Provisioning Script Finished" | Out-File $log -Append

このスクリプトをディレクトリ同期が終了したタイミングで実行すれば良いので、今回はタスクのトリガーで実行したいと思います。バージョンにより異なりますが、サーバのイベントログを確認して、Directory Syncronizationサービスの4か114のExport完了のイベントログを特定します。
20131210_01 20131210_02

続いてはタスクスケジューラへの登録です。右の操作ペインから基本タスクの作成を選択してウィザードを起動します。
20131210_03

名前は適当に付けて、トリガーを「特定イベントのログへの記録時」にして、ソースやイベントIDは前の項目で特定したエクスポート完了時のイベントログを指定します。
20131210_04
20131210_05 20131210_06

実施するアクションはプログラムの開始にします。.ps1のスクリプトファイルをタスクから起動する場合は、プログラム/スクリプトの項目には c:windowssystem32WindowsPowerShellv1.0powershell.exe を、引数として -command [.ps1スクリプトのフルパス]を指定します。
 20131210_08 20131210_09 20131210_10

最後に、作成したタスクのプロパティを開いて、[ユーザーがログオンしているかどうかにかかわらず実行する]を選択して実行アカウントのパスワードを保存します。
20131210_11

これにより、デイレクトリ同期完了後、指定のグループ(上記ではOffice365e3)のメンバーでライセンスの割り当てられていないユーザーが存在した場合には自動的にライセンスが割り当てられるようになります。
20131210_12

実際の運用の中では、環境に応じてsleepの値を調整したりUsageLocationにJP以外が有ったり複数のサブスクリプションがある場合はその処理部分などを修正すれば良いかと思います。ライセンスの残数を見て閾値を下回ったら自動的にメールを飛ばすなども入れておくと楽になりますね。

ブラウザアクセス時のADFSによるIPアドレス制御

本投稿はOffice 365 Advent Calendarに参加しています。
「Office 365チームサイト活用ガイド 2013年版」が絶賛発売中のOffice 365 MVPの中村さんからバトンを頂きました。

今回は、Office365のアクセス制御の実現方法について述べたいと思います。

AD FSを利用すると、Office365に対するアクセス制御を行うことが可能です。Microsoftのサイトでも具体的な構成例などがいくつか紹介されています。

クライアントの場所に基づいた Office 365 サービスに対するアクセスの制限

アクセス制御ができるパターンは色々とあるのですが、いくつか制約事項もあります。その中で一番大きいと思われる物が、「ブラウザからのアクセス制御時に、クライアントのIPアドレスで制御ができない」ということになります。勿論、AD FSのクレームルールではなく、IISやその前のFirewallなどで完全にブロックすることは可能ですが、例えば以下の様なIPとADの情報を合わせた条件付けが必要な設定は実装できません。

  • 本社からの内部アクセスの他、特定グループ(例えば出向者、在宅勤務者)のユーザーは特定IP(例えば出向先、自宅)からのブラウザアクセスを許可する

これは、アクセス制御に利用する送信元IPの情報が付与される場所に依存しています。
20131203_06

上図の通り、IPアドレスであるグローバルIP:Aは「X-MS-Forwarded-Client-IP」に格納されてAD FSに渡されてきますが、この情報はExchange Onlineにより付与されます。この為、クライアントからAD FS Proxyに直接アクセスをするOWAやSharePoint Onlineへのアクセスの際には付与されません。

これは仕様上仕方の無いことなので、今までは上記のような構成で外部アクセスを制御する場合は、SSL-VPNで一回社内ネットワークに接続させるなどしてAD FSサーバへの直接の接続性を確保する必要がありました。(VPNをクライアントPCで張ってからブラウザでシングルサインオンをするイメージ)

今回は、一部の皆さまの熱い要望(?)にお答えしてこの制限を回避してみたいと思います。

まず、この情報がどうやってAD FSに伝わってくるかですが、上記Microsoftのサイトに以下の記載があります

サードパーティのプロキシを使用している場合は、HTTP ヘッダーの x-ms-proxy を送信するようにプロキシを構成し、プロキシ ホストの完全修飾 DNS 名の値を含める必要があります。

この情報から推測すると、これらの情報はHTTPS通信のパケット中のHTTPヘッダに埋め込まれて送信されているのではないかと考えられます。つまり、AD FS Proxyの手前にリバースProxyなどHTTPSを終端できる物を挟んで、そこで情報を挿入してあげれば良いのでは?という推測ができます。

というわけで検証です。まずは手軽なARRでリバースProxyを立てます。詳細なやり方は他の方のblogで色々紹介されているので流れだけ。IISのインストールされたサーバ上でiis.netのサイトからWeb Platform Installer使って簡単にインストールできます。
20131203_01

適当なサイトを作成してAD FS Proxyで利用している物と同じSSL証明書をバインドします。URL書き換えからリバースProxy向けの規則を作成してAD FS Proxyに要求を転送するように設定。SSLオフロードの設定は外します。そして、リバースProxyの設定からカスタムヘッダの名称をX-MS-Forwarded-Client-IPに変更し、TCPポートを含めるのチェックを外します。
20131203_03

というわけで接続をしてみると、以下の様な情報が取得できます。(AD FSの監査ログを有効にして取得しています)
20131203_04

非常に地味ですが、x-ms-endpoint-absolute-pathが/adfs/ls/(つまり、Passiveフェデレーション)なのにx-ms-forwarded-client-ipに値が入っています!

また、ARRはIISに追加するモジュールなので例えばAD FS Proxy上にインストールして、グローバルIPからの接続をARRのサイトで受けて、それを127.0.0.1のDefault Web Site配下のAD FS Proxyに渡して処理するということも可能です。
20131203_05

この構成において、Webブラウザ以外からのアクセスはIISのサイトではなくAD FS Proxyのアプリケーションが処理しているので、ARRの処理を通りません。つまり、Exchange Onlineから付与されてきたX-MS-Forwarded-Client-IPの情報は保持されます(つまり、影響無し)。また、LyncクライアントやPowerShell、Office ProPlusなどMEXへのアクセスについてもARRでIP情報を付与できないので、これまで同様にIPベースの制御は残念ながらできない形です。

というわけで、今回はさわりの部分だけなので軽くヒント的な物になってしまいましたが、何かの参考になれば幸いです。ちなみに、もちろんこちらの記事の内容はMicrosoftによってサポートされている物ではありませんのでいつ仕様が変わって利用できなくなるか分かりません。あくまで今の時点で検証レベルではできましたよ、という話です。

次はVisual C# MVPの瀬尾さんです。

独自ドメインの利用(Dozens)

以前の投稿 にコメントを頂きました。DozensさんのDNSサービスでSRVレコードに対応したとのことで、早速利用してみましたので、ご紹介致します。

結果として言いますと、問題無くSRVレコードも含めてOffice365の独自ドメインを無償でホスティングすることができました。

まずは、Dozensにサインインして、[Add a domain]からドメインを追加します。画面の右側にDNSサーバーの情報が表示されていますので、独自ドメインのネームサーバ情報をDozensのネームサーバーに変更します。ここではお名前.comでホストしているドメインを1つ変更してみます。
スクリーンショット (3) スクリーンショット (4) スクリーンショット (5)

スクリーンショット (6) スクリーンショット (7)

続いて、Office365の管理ポータルからドメインを追加し、確認用のレコードをDozensで作成します。その後、[完了しました。今すぐ確認して下さい。]をクリックするとドメインの確認が完了します。
スクリーンショット (8) スクリーンショット (9) スクリーンショット (10) スクリーンショット (11) スクリーンショット (12) スクリーンショット (13) スクリーンショット (14)

ドメインの確認が終了したら、次にユーザーの追加の有無の選択と用途を入力します。ここでは、ユーザー追加はせずに、ExchangeとLyncを用途として選択します。
スクリーンショット (15) スクリーンショット (16) スクリーンショット (17) スクリーンショット (18) スクリーンショット (19)

表示された内容をDozensに登録します。この前に、Dozensはレコード数に応じた課金体系になりますので、ドメインの所有確認で利用したTXTレコードは今後利用する事は無く、削除しても動作には問題無いので削除しておきます。
スクリーンショット (20)

レコードの追加は先ほどTXTレコードでも実施しましたが、Webから簡単に実施できます。TTLについては1時間とOffice365で表示されますが、無償版の場合は7200秒(2時間)の固定となっておりますが、特に平常時の動作としては問題無く利用できます。

1点、SRVレコードのみ記載方法が特殊になります。Priorityの欄はWebで表示されている優先度をそのまま入力しますが、Record Nameの欄に[サービス] [プトロコル]を、Contentの欄に[重さ] [ポート] [ターゲット]の順にスペースを入れて入力します。また、FQDNの末尾の.は自動で補完してくれます。
スクリーンショット (21)  スクリーンショット (22)20131120_02 スクリーンショット (24) スクリーンショット (27) スクリーンショット (28) スクリーンショット (29) スクリーンショット (30) スクリーンショット (31)

以上の工程で、Office365で独自ドメインが利用できるようになりました。
スクリーンショット (32) スクリーンショット (33)

DCへのディレクトリ同期ツールのインストール

ディレクトリ同期ツールの新しいバージョンがリリースされました。今回の更新での一番の目玉は、「DirSync can be installed on a Domain Controller.」そう、ドメインコントローラ上にディレクトリ同期ツールを入れることがサポートされたことです。

早速インストールしてみたいと思います。Windows Server 2012 R2の環境に入れていきます。まず、最新のディレクトリ同期ツールをダウンロードします。
20131105-235445

早速実行してみると、.NET Frameworkの3.5と4が必要だと怒られてしまいます。とりあえずPowerShellでCoreだけ入れておきます。
20131105-235528 - コピー 20131106-000141

Add-WindowsFeature NET-Framework-Core,NET-Framework-45-Core

あとは普通に実行すればOK。一番最後だけ、そのまま構成ウィザードの実行に移らずにチェックを外して終了します。
20131106-000219 20131106-000227 20131106-000240 20131106-003134 20131106-003141

ここで、一度ログオフして再度ログインします。これにより、インストールウィザードにてドメイン上に作成されたFIMSyncAdminsのメンバーシップ情報が反映されます。
20131106-003157

再度ログインし、デスクトップ上にあるディレクトリ同期ツールの構成ウィザードを実行します。Office365テナントの全体管理者の情報とドメインのEnterpriseAdminsの情報を入力します。これだけで完了です。
20131106-003251 20131106-003305 20131106-003337 20131106-003344 20131106-003349 20131106-003426 20131106-003430

ちなみに、ドメインコントローラー上でインストールをすることにより、従来はローカル上に出来ていたFIMSyncAdminsやSQLServer2005xxxxを初めとするディレクトリ同期の管理者グループや、AAD_xxxxxxというディレクトリ同期などがドメイン上に作成されるようになります。これらは特にフィルタされていないので、そのままOffice365に同期される形になります。
20131106-004442

 

MVPアワード受賞しました

マイクロソフトMVP(Microsoft Most Valuable Professional)を受賞しました。
分野はOffce365で、昨年に引き続きの再受賞になります。

これも普段よりblogを読んで頂いております皆様の多大な応援のおかげと感謝しております。
これからも日々進化するOffice365の情報をタイムリーに発信していきたいと考えておりますのでよろしくお願い致します。

現在、2014年1月期のMVPアワードのエントリーが以下で行われています。
10月10日までの受付になっておりますので、興味のある方は是非どうぞ。
http://www.microsoft.com/ja-jp/communities/mvp/selfregistration.aspx