以前、以下の投稿をしました。
http://blogs.technet.com/b/junichia/archive/2012/12/10/3539674.aspx
ダイナミックアクセス制御はとても面白いテクノロジーなのですが、かなり複雑なので手を付けている方は少ないのではないでしょうか。
そこで、現在実施しているハンズオンセミナーで使用している資料から、ダイナミックアクセス制御の部分を抜粋して公開しました。
解説編と演習編に分かれています。
演習環境はシンプルで、以下の2つの仮想マシンを用意していただければOKです。
細かな設定は必要ありません。すべて演習の中で一から構築していきます。
Windows 8 の Hyper-V でも問題なく演習できます。
是非、社内の勉強会等でも活用してください!
Dynamic Access Control 解説編
Dynamic Access Control 演習編
※この投稿は Office 365 Advent Clendar 2012 に参加しています。
軽い話題ですんません。
私の大好きな Active Directory Federation Service 2.0 は、Office 365 の爆発的人気に伴い、今ではすっかりフィールドに浸透しました。もう、「AD FS なんて知らない、聞いたことない」という方はいらっしゃらないでしょう。
そんな中、いまひそかに熱い注目を集めているのが Windows Server 2012 に標準実装された Active Directory Federation Service 2.1 です。新しい Hyper-V や Failover Cluster の陰に隠れて目立たないことこの上ないですが、地味ながら確実に進化しています。
Active Directory フェデレーション サービス(2.1)の概要 http://technet.microsoft.com/ja-jp/library/hh831502.aspx
上記サイトにも書かれている通り、AD FS 2.1 の新機能として3つが挙げられています。
ここで大いに気になるのは 3 つ目です。「Kerberos チケットからクレームを取得する」とはどういうことでしょう?そして、どんな効用があるのでしょうか?
(参考)Using AD DS Claims with AD FS(英語) http://technet.microsoft.com/ja-jp/library/hh831504.aspx
上記英語サイトにも書かれている通り、Windows Server 2012 の Active Directory には大きく分けて2種類の「クレーム」が存在しています。
基本的に、AD FS 2.0 から見れば Kerberos チケットは「ユーザーが AD DS に認証された証」であり、AD FS が Kerberos チケットからクレームとして得られるのは、ユーザーの SID およびユーザーが所属するグループの SID でした。
AD FS 2.0 ではその他に、AD DS や AD LDS および SQL Server に格納された情報をクレームとして収集し SAML トークンに変化することができました。
しかし、その対象は「ログオンしているユーザー」をキーとしたものであり、例えばログオンしているデバイスに関する情報を収集することができませんでした。そのため、「ログオンしているコンピューターによってアクセスを制御する」ことが難しかったのです。
そんな中、革命ともいえる新たな機能が Windows Server 2012 に実装されました。それが Dynamic Access Control(ダイナミックアクセス制御)です。この機能は、Kerberos チケットにユーザーやグループ、そしてユーザーがログオンしているデバイスの属性をクレームとして格納し、それらの情報とファイルサーバーの ACL を比較することで、アクセスの可否を判断する機能です。従来のグループベースの静的なアクセス制御と異なり、日々変化するユーザーやデバイスの属性にダイナミックに対応できることから、新しいアクセス制御方式として注目されています。
※ただし、グループポリシーで「複合認証」を有効にする必要があり、これは Windows 8/Windows Server 2012/Windows RT でのみサポートされています
そして、この機能は AD FS 2.1 にとっても大きな革命なのです。
先に書いたように、AD FS 2.1 では、Kerberos チケットに格納されているクレームを読み取ることができるようになりました。
つまり、AD DS 側のダイナミックアクセス制御でデバイスポリシーが設定されており、かつ AD FS 側で Kerberos チケットからクレームを受け取るための要求規則が書かれていれば、ユーザーの属性だけでなくログオンしているデバイスの属性をもとに、クレームベースのアプリケーションに対するアクセス制御が行えるようになる。。。というわけです。
これは、今後、Office 365 ユーザーにとっても期待の大きな機能であるはずです。
。。。。とはいえ、具体的な設定に関する解説がどこにも掲載されていないため、これについては追ってまとめたいと思います。
また、ダイナミックアクセス制御についても、結構複雑なテクノロジーとうこともあって使ったことがある方は少ないと思います。こちらも概念を含めてまとめていきたいと思いますのでご期待ください。
※この投稿は、PowerShell Adcent Calender 2012 に参加しています!
Hyper-V 上の仮想マシンが使用しているリソースを計測するにはパフォーマンスモニターを使用することができました。
Measuring Performance on Hyper-V http://technet.microsoft.com/ja-jp/library/cc768535(v=bts.10).aspx
しかし、パフォーマンスモニターの利用になれた方であればまだしも、通常は使用するカウンターの選定など、ちょっと面倒な面も否めません。
そこで、Windows Server 2012、Windows 8 に実装されている Hyper-V では、ゲスト OS のリソース使用量を容易に計測できる Windows PowerShell コマンドレットが用意されました。Measure-VM です。
パフォーマンスモニターが仮想マシンの正常性を計測することを主目的としていたのに対し、このコマンドレットの主な目的は「課金」です。例えば、ホスティングを担当する企業による利用を想定しています。
Measure-VM コマンドレットを使用すると以下の数値を取得することができます。
ここで、CPUの「使用率」ではなく「使用量」であることに注意してください。先にも書いた通り、Mesure-VM の主目的は「課金」です。よって、CPU の使用率では意味がありません。なぜならば、使用している物理マシンによって使用率が変わる可能性が大きいからです。よって、Mesure-VM は使用率ではなく実際にゲスト OS が使用した CPU の使用量を MHz で出力するように設計されています。
ネットワークについても同様です。帯域の使用率ではなく、実際に送受信したデータ量を算出してることに注意してください。
いずれも、計測を開始してから Measure-VM コマンドレットを実行した瞬間までを計測します。
では使ってみましょう。
<計測開始>
計測を開始するには、ゲストOS のメータリング機能を有効にする必要があります。以下はゲストOS Server1 に対してメータリングを有効にしています。
Get-VM -Name Server1 | Enable-VMResourceMetering
または
Enable-VMResourceMetering –Name Server1
<使用量の出力>
Enable-VMResourceMetering を実行してからの使用率が出力するには Measure-VM コマンドレットを使用します。以下はその出力例です。
PS C:\windows\system32> Measure-VM -Name server1
VMName AvgCPU(MHz) AvgRAM(M) MaxRAM(M) MinRAM(M) TotalDisk(M) NetworkInbound(M) NetworkOutbound(M) ------ ----------- --------- --------- --------- ------------ ----------------- ------------------ Server1 3 1000 1000 1000 130048 178 112
<使用量のリセット>
特定の時間間隔の使用量を出力するには、いったん前回までの使用量をリセットする必要があります。そのために Reset-VMResourceMetering コマンドレットが用意されています。以下のように入力することで、ゲストOS Server1 の使用量がいったんリセットされ、0から再計測が始まります。
Reset-VMResourceMetering –Name Serevr1
では、これらを使用して実際にゲストOSのコストを計測するにはどうしたらよいでしょう?
例えば、以下のようなスクリプトを作成します。
$VMName = "Server1" Calculate-VMCost($VMName)
function Calculate-VMCost($VMName) {
#ベースコストを設定 $BaseCost = 50
#各要素の単位コストを設定(例) $MemoryCostPerGB = 20 $ProcessosCostPerGHz = 30 $IncomingNetworkCostPerGB = 10 $OutgoingNetworkCostPerGB = 30
# 前回の取得から現時点までののリソース使用量を取得 $ChargebackData = Measure-VM $VMName
#ここまでの計測をリセット Get-VM $VMName | Reset-VMResourceMetering
#ベースコスト $VMCost = $BaseCost
#コストにメモリ使用コストを加える $VMCost += $ChargebackData.AverageMemoryUsage * $MemoryCostPerGB / 1024
#コストにCPU使用量を加える $VMCost += $ChargebackData.AverageProcessorUsage * $ProcessosCostPerGHz / 1024
#ネットワーク受信量を算出 $IncomingExternalTraffic = $data.NetworkMeteredTrafficReport | ` ? { ($_.Direction -eq "Inbound" ) -and ($_.RemoteAddress -eq "*.*")}
#ネットワーク送信量を算出 $OutgoingExternalTraffic = $data.NetworkMeteredTrafficReport | ` ? { ($_.Direction -eq "Outbound") -and ($_.RemoteAddress -eq "*.*")}
#コストにネットワークこすとを加える $VMCost += $IncomingExternalTraffic.TotalTraffic * $IncomingNetworkCostPerGB / 1024 $VMCost += $OutgoingExternalTraffic.TotalTraffic * $OutgoingNetworkCostPerGB / 1024
$VMCost }
こうしたスクリプトを使用することで、ゲストOSのコストを総合的に判断し課金額の算出に利用することができます。
(参考)
Hyper-V リソース メータリングに関するテクニカル プレビュー http://technet.microsoft.com/ja-jp/library/hh831661.aspx
Enable-VMResourceMetering http://technet.microsoft.com/ja-jp/library/hh848481.aspx
Introduction to Resource Metering http://blogs.technet.com/b/virtualization/archive/2012/08/16/introduction-to-resource-metering.aspx