July, 2010 - フィールドSEあがりの安納です - Site Home - TechNet Blogs

フィールドSEあがりの安納です

Microsoft Evangelist -- Junichi Anno

July, 2010

  • 【Management】Group Policy の設定をクラウドで検索

    すっかり7月ですねぇ。汗だくです。

    グループポリシーの設定で一番困るのは、目的の設定がどこにあるのかが分からないときですよね。

    そこで、まずは、何も言わずに以下にアクセスしてみてください。Windows Azure 上で動作しているアプリケーションです。

    http://gps.cloudapp.net/

    次に、[Settings] - [Add Search Provider] を実行してください。

    image

    すると、Internet Explorer の検索プロバイダーとして、「GPS」というものが追加されます。GPS= Group Policy Search の略です。

    image

    例えば、検索ボックスに、「wallpaper」と入力して検索を実行すると、以下のような結果が得られます。

    image

    超便利です。

    さらに、[Tree]-[Registry View] を選択すると…。

    image 

    左側のツリー表示が、レジストリパスのツリーになります。

     image

    検索結果には全OSの設定が含まれているので、特定のOSやソフトウェアに限定して表示する場合には以下のように [Filter] で表示したいカテゴリを絞り込むことができます。

    image

    このツール、正式サポートされたサービスではありませんので、日本語が未サポートであることについて文句も言えないのですが、フランス語やイタリア語をサポートしているんだったら、日本語だってサポートしてくれてもいいですよねぇ。。。と思ったり。

    参考サイト

    Announcing the Group Policy Search service
    http://blogs.technet.com/b/askds/archive/2010/06/24/announcing-the-group-policy-search-service.aspx

  • 【IDM】Identity Developer Training Kit がうまくインストールできないときの対処

    「Identity Developer Trainiing Kit のインストールがうまくいかなくて泣いているのは、どこのどいつだ~い?あたしだよ。(西岡風)」

    というわけで、Windows Identity Foundation(WIF)を使用して Windows Azure アプリケーションを開発する手法を学習するのに最適なツールがあります。

    それが、

    Identity Developer Training Kit (最新版は 2010年6月版)

    です。

    これには、様々なパターンの Identity 関連アプリケーションのデモサンプル+Step By Step ガイド(英語)が含まれていて、とても良さげなのですが、日本語環境にインストールしようとすると、どうもうまくいきません。

    一見正常に終わったように見えるのですが、Visual Studio を起動してプロジェクトを開くと、以下のようなエラーが発生します。

    image
    ソリューション内の1つ以上のプロジェクトが正しく読み込まれていません。詳細については出力ウィンドウを確認してください。

    ということで、Visual Studio の出力ウィンドウを確認してみると、以下のように WEBサイトが開けないというエラーが出ています。

    image 
    https://localhost/ClaimsEnableWebSiteEx01 : error : Web サイト https://localhost/ClaimsEnableWebSiteEx01 が開けません。ローカル IIS Web サイトにアクセスするには、次の IIS コンポーネントをインストールする必要があります:

    (注意)”ClaimsEnableWebSiteEx01” 部分は、開くプロジェクトによって異なります。

    実はセットアップ時に表示されるコマンドプロンプトを目を見開いてみていると、エラーが発生していることがわかります。

    image

    「パラメーターが間違っています」というエラーが出ていることがわかります。どうやら原因はこいつにありそうなので、スクリプトを開いてデバッグしてみましょう。

    今回は、Identity Develper Training Kit の中の「WebSitesAndIdentity」というサンプルプロジェクトに対して対処してみます。

    まずは、以下のファイルを開いてください。

    C:\IdentityTrainingKit2010
    \Labs
      \WebSitesAndIdentity
       \Source
        \Setup
         \Scripts
          \SetupCertificates.cmd

    開いたものを以下に示します。ちょっと長いですが、単なるバッチファイルであることがわかります。

    問題になっているのは、以下のバッチファイルの「httpcfg.exe set ssl -i 0.0.0.0:443 -f 2 -h %CERTHASH%」です。httpcfg.exe コマンドの引数である %CERTHASH% が空っぽだったために、エラーになっていたのです。

    じゃ、空っぽの原因はどこにあるかというと、以下のバッチファイルの「Cert Hash(sha1)」部分です。

    SetupCertificates.cmd

    @echo off

    echo.
    echo ================================================================
    echo WARNING: This setup script will replace the existing "localhost"
    echo certificate. If you have applications that uses the current
    echo localhost certificate, remember to create a backup copy of it
    echo before continue with this setup.
    echo ================================================================
    echo.
    REM choice /m "Do you want to proceed with the certificates installation"

    REM if ERRORLEVEL 2 goto :end

    echo Installing CAPICOM...
    echo.

    msiexec /qn /i "%~dp0capicom_dc_sdk.msi"

    call "%~dp0CleanupCertificates.cmd"

    echo Installing certificates...
    echo.
    set IsWinClient=false

    echo certutil -f -addstore Root "%~dp0certs\localhost.cer"
    certutil -f -addstore Root "%~dp0certs\localhost.cer"

    IF EXIST "%PROGRAMFILES%\Microsoft CAPICOM 2.1.0.2 SDK" (
        regsvr32 /s "%PROGRAMFILES%\Microsoft CAPICOM 2.1.0.2 SDK\Lib\X86\capicom.dll"
        SET capicompath="%PROGRAMFILES%\Microsoft CAPICOM 2.1.0.2 SDK\Samples\vbs\cstore.vbs"
        SET cscript=%windir%\system32\cscript.exe
    )

    IF EXIST "%PROGRAMFILES(x86)%\Microsoft CAPICOM 2.1.0.2 SDK" (
        SET capicompath="%PROGRAMFILES(x86)%\Microsoft CAPICOM 2.1.0.2 SDK\Samples\vbs\cstore.vbs"
        SET cscript=%windir%\syswow64\cscript.exe

        ECHO Setting up CAPICOM for 64 bits environment...
        copy /y "%PROGRAMFILES(x86)%\Microsoft CAPICOM 2.1.0.2 SDK\Lib\X86\capicom.dll" %windir%\syswow64
        %windir%\syswow64\regsvr32.exe /s %windir%\syswow64\capicom.dll
    )

    %cscript% /nologo %capicompath% import -l LM "%~dp0certs\localhost.pfx" "xyz"
    %cscript% /nologo %capicompath% import -l LM "%~dp0certs\IdentityTKStsCert.pfx" "IdentityTKStsCert"
    %cscript% /nologo %capicompath% import -l LM -s trustedpeople "%~dp0certs\IdentityTKStsCert.pfx" "IdentityTKStsCert"

    @set IsW7=
    (ver | findstr /C:"6.1") && set IsW7=true

    @if "%IsW7%" == "true" (
        "%~dp0winhttpcertcfg.exe" -g -c LOCAL_MACHINE\My -s localhost -a "IIS_IUSRS"
        "%~dp0winhttpcertcfg.exe" -g -c LOCAL_MACHINE\My -s IdentityTKStsCert -a "IIS_IUSRS"
        set IsWinClient=true
    ) else (
        "%~dp0winhttpcertcfg.exe" -g -c LOCAL_MACHINE\My -s localhost -a "NETWORK SERVICE"
        "%~dp0winhttpcertcfg.exe" -g -c LOCAL_MACHINE\My -s IdentityTKStsCert -a "NETWORK SERVICE"
    )

    for /f "tokens=2,* usebackq" %%a in ( `certutil -store my localhost ^| findstr /c:"Cert Hash(sha1)"` ) do (
        set CERTHASH=%%b
    )

    if NOT "%CERTHASH%" == "" (
    set CERTHASH=%CERTHASH: =%
    )

    set IsVista=
    (ver | findstr /C:"6.0") && set IsVista=true

    if "%IsWinClient%" == "false" (
        set IsWinClient=%IsVista%
    )

    if "%IsWinClient%" == "true" (
       ECHO Setting up SSL at port 443 using localhost certificate...
       netsh http delete sslcert ipport=0.0.0.0:443 > nul
       netsh http add sslcert ipport=0.0.0.0:443 appid={00000000-0000-0000-0000-000000000000} certhash=%CERTHASH% clientcertnegotiation=enable
    ) else (
       ECHO Importing server certificate and point HTTP.SYS at it...
       httpcfg.exe delete ssl -i 0.0.0.0:443 > nul
       httpcfg.exe set ssl -i 0.0.0.0:443 -f 2 -h %CERTHASH%
    )

    "%~dp0IIS7Util.exe" SetSslCert %CERTHASH%

    IISReset

    echo.
    echo ============================
    echo Certificates Setup finished!
    echo ============================

    pause

    :end

    以下は、問題部分となっている部分です。何をしているかわかりますか?

    for /f "tokens=2,* usebackq" %%a in ( `certutil -store my localhost ^| findstr /c:"Cert Hash(sha1)"` ) do (
        set CERTHASH=%%b
    )

    certutil.exe コマンドで、ローカルホストに登録されている証明書の一覧を出力しています。

    ここで、findstr に注目してください。findstr コマンドでは、certutil の出力結果から「Cert Hash(sha1)」という文字列を探し出して、同じ行に出力されるはずの証明書のハッシュ文字列を取り出し、CERTHASH という環境変数に格納しようとしています。

    なんでこれがエラーになるのか?

    以下の画面ショットをご覧ください。これは、certutil コマンドを単独で入力したときの出力結果(例)です。赤枠で囲んだ部分に目を凝らしていただくと、なんと「 Cert ハッシュ(sha1) 」と日本語で出力されていることがわかります。

    image

    原因はまさにこれです。

    よって、バッチファイル SetupCertificates.cmd を以下のように修正してあげることで正しく動作するようになります。

    for /f "tokens=2,* usebackq" %%a in ( `certutil -store my localhost ^| findstr /c:"Cert ハッシュ(sha1)"` ) do (
        set CERTHASH=%%b
    )

    やり直す場合には、一度 Cleanup.cmd を実行して環境をきれいにした後で再実行してください。

    なんとも馬鹿げたトラブルですが、まぁ、ありがちといえばありがちではあります…orz。

    こんなトラブルが発生したときには、ITPROでよかったなぁ、と心から思うのでありました。

  • 【IDM】AD FS 2.0 で属性ストアとしてSQL Server を使用する

    すっかり7月も半ばを過ぎてしまいました…。TechEd の資料提出の締め切り間近で少々あせりつつ…気分転換に久々の投稿です。

    AD FS 2.0 を使用してセキュリティトークンを発行する場合、属性の格納庫として使用できるのは Active Directory だけではありません。以下を属性ストアとして使用することができます。

    • LDAP サーバー
    • SQL Server 2005/2008/2008R2
    • カスタムストア(テキストファイル 等を属性ストアにする場合)
      ただしカスタムストアを使用するには、属性のプロバイダーを独自に作成する必要があります
      http://msdn.microsoft.com/en-us/library/ee895358.aspx

    ただ、このあたりの情報が英語しかなく、しかも結構稀薄なんですよね…なので、今回は SQL Server を属性ストアとして使用する手順を以下に示します。

    ※ このあたりの記事を書かせていただけるメディア様 募集中でございます。
    ※ 今はニーズが少ないかもしれませんが、1年後のビュー拡大は確実です

    【Step 1】準備

    • SQL Server 上にデータベースとテーブルを用意する。
    • AD FS 2.0 サービス(adfssvc)の実行アカウントに対して、データベースへの ReadReader 権限を与えておきます。これをしないと、SQL Server への接続時にアクセス拒否エラーとなり、イベントログに イベントID 376 が報告されます。
      image

    【Step 2】属性ストア として SQL Server の登録

    AD FS 2.0 の管理コンソールから、[信頼関係] - [属性ストア] - [属性ストアの追加] を選択します。
    image

    [属性ストアの種類] として 「SQL」を選択し、SQL Server への接続文字列を入力します。今回は、以下のように入力しました。以下のように Integrated Security を True にした場合には、【Step 1】での、サービスアカウントに対するデータベースへのアクセス権を確実に付与したことを再度確認しておいてください。

    Server=t330401 ; Database=AttrStore ; Integrated Security = True

    image

    「表示名」は属性ストアを識別するために、Step 3 で使用するので、覚えておいてください。

    なお、ここで接続文字列が間違えていてもエラーが出ません…。実際に動かしてみて問題がある場合には、イベントログに以下のようなエラー(イベントID 376)が出力されます。

    image
    [イベントビューアー] - [アプリケーションとサービスログ] -  [AD FS 2.0] - [Admin]

    【Step 3】要求規則の追加

    本来ならば、要求規則や要求記述について詳細に解説したいのですが、今回はおいときます。

    AD FS 2.0 の管理コンソールから [信頼関係] - [証明書利用者信頼] を選択し、要求規則を追加する RP(Rerying Party:証明書利用者) を右クリックしてください。

    [要求規則の編集] を選択します。

    image

    [発行変換規則] タブで、[規則の追加] をクリックします。
    image

    変換要求規則の追加ウィザードが起動するので、最初の画面で 「カスタム規則を使用して要求を送信」を選択します。

    image

    次の画面で規則を入力します。ここでは、以下のように入力しました。

    image

    => issue(store = "AttributeStore_SQLServer", types = ("http://schemas.t3304.com/postalcode"), query = "select PostalCode from Attributes where userid='T3304\Administrator'");

    さて、問題は、コレが何を意味しているか?ということですよね。

    詳細な解説は後日行いますが、まずは試していただきたい!ということで、簡単に書きます。

    • =>
      この文字列から予測できるように、実は、=> の前には「クレームを発行する」条件を記述することができます。今回は条件を省略したので、「無条件でクレームが発行される」ことになります。
    • issue (               );
      この部分はクレームを発行するときに使用する記述です。() 内に取得する属性を記載します
    • store = "AttributeStore_SQLServer"
      Step2 で作成したSQL Server の属性ストア名です。
    • types = ("http://schemas.t3304.com/postalcode")
      クレームタイプ(要求の種類)と呼ばれるもので、属性が格納されるクレームを指定します。…とかくと難しく感じますが、管理コンソールの [サービス] - [要求記述] の一覧に表示されているクレームタイプの中から、適切なものを選択して指定します。
      とはいえ、何が適切かわからない..もしくは適切な入れ物(クレームタイプ)が無い…場合が多いですよね。その場合には、自分で作っちゃってください。
      以下の画面で、一番下に「郵便番号」とありますが、これは私が勝手に作ったクレームタイプです。http:// の後に指定する URI は、世界で一意になるようにします。通常は、自分のドメイン名等を使用します。
      image 
      ちなみに、上の画面の「名前」の部分は、単なる 管理画面上の識別名であり、プログラム等から使用することはできません。あくまでもクレームの識別は、「クレームタイプ」で行われるのだということを覚えておいてください。
    • query = "select PostalCode from Attributes where userid='T3304\Administrator'")
      これはわかりますよね。SQL Server に対するクエリーです。この結果が、Types で指定したクレームに格納されます。

    いかがでしょう?なんとなく見えてきましたか?

    おそらく、多くの方が煮え切らない感じかなぁと思います。お気持ちはよくわかります。カスタム規則の記述方法は奥が深いので、追ってきちんと解説します(できれば TechEd 2010 にもいらしてくださいませ)。

  • 【IDM】AD FS 2.0 をアンインストールするには

    今後 FAQ になりそうなので、Blog にも書いておきたいと思います。

    ご存知の通り、AD FS 2.0 は以下のサイトからダウンロードしてインストールする必要があります。

    Active Directory Federation Services 2.0 RTW - 日本語

    AD FS 2.0 をセットアップすると、以下のコンポーネントがインストールされます。

    • AD FS 2.0 本体 および PowerShell コマンドレット(KB974408)
    • Windows Identity Foundation ランタイム(KB974405)
    • Windows Internal Database
      (MICROSOFT##SSEE インスタンスの AdfsArtifactStore と AdfsConfiguration)
    • IIS 上の 仮想ディレクトリ(/adfs, /adfs/ls)およびアプリケーションプール(ADFSAppPool)
    • 証明書の共有コンテナ

    AD FS 2.0 を再インストールしようとして一旦アンインストールしたつもりが、「既にインストールされている」的なメッセージで再インストールや再構成が失敗したり警告を発することがあります。原因は上記に示した AD FS 2.0 関連の アプリケーションが既にインストールされているためです。

    それぞれのコンポーネントは個別にインストールされるため、アンインストールする場合にも個別に実施する必要があります。以下に手順を示します。

    【証明書の共有コンテナ の削除】

    ※この手順は AD FS 2.0 本体を削除する前に実行してください

    AD FS 2.0 の構成ウィザードで「サーバーファーム」を選択した場合、Active Directory 上に証明書の共有コンテナが作成されます。このコンテナは、AD FS サーバーファーム内の全てのAD FS サーバーで共有されるため、複数のサーバーに同じ証明書を何度もインストールする必要が無くなります。

    共有コンテナを削除するには以下の手順を実施します。

    PowerShell コンソールを起動。

    以下のコマンドレットで AD FS 関連のコマンドレットを読み込む。

    PS C:\>Add-PsSnapin Microsoft.Adfs.Powershell

    以下のコマンドレットで 証明書共有コンテナの場所を確認する

    PS C:\>Get-ADFSProperties |Select-Object CertificateSharingContainer

    上記の結果、以下のように表示されるのでパスを控えておく。

    CertificateSharingContainer
    ---------------------------
    CN=0586a130-89fa-40e8-8896-18ece4d171e7,CN=ADFS,CN=Microsoft,CN=Program Data,DC=T3304,DC=com

    ADSI Edit を起動し、「既定の名前付きコンテキスト」に接続する。

    CertificateSharingContainer の値と一致するコンテナを削除する。

    【AD FS 2.0 の削除】

    [コントロールパネル] - [プログラム] – [インストールされた更新プログラムの表示] から 「Active Directory Federation Service 2.0(KB974408)」をアンインストールする

    【Windows Identity Foundation ランタイム の削除】

    ※ランタイムなので無理に削除する必要は無いと思いますが…

    [コントロールパネル] - [プログラム] – [インストールされた更新プログラムの表示] から 「Windows Identity Foundation(KB974405)」をアンインストール

    【Windows Internal Database の削除】

    Windows Internal Database(WID)自身は Windows Server の「機能」としてインストールされているので、これ自体を削除することも可能なのですが、他のプログラムが WID を使用している可能性があります。よって、ここでは AD FS 2.0 に関連しているデータベース AdfsArtifactStore と AdfsConfiguration のみを削除しましょう。

    WID には GUI が提供されていないので、以下から SQL Server 2008 R2 Express Edition の Management Studio をダウンロードしてインストールしてください。

    Microsoft SQL Server 2008 R2 RTM - Management Studio Express

    Management Studio を起動し、以下に接続してください。

    \\.\pipe\mssql$microsoft##ssee\sql\query
    image

    データベースの一覧から AdfsArtifactStore と AdfsConfiguration を削除します。

    image

    【IIS 上の 仮想ディレクトリ(/adfs, /adfs/ls)およびアプリケーションプール(ADFSAppPool) の削除】

    [サーバーマネージャー] - [Web サーバー(IIS)] - [インターネットインフォメーションサービス マネージャー] を開く。

    [Default Web Site] を選択し、右側のペインから「アプリケーショの表示」を選択。

    「/adfs」と「/adfs/ls」という2つのアプリケーションが表示されるので、これらを削除。

    image

    次に、[アプリケーション プール] を選択して、「ADFSAppPool」を削除する。

    image

    エクスプローラーを使用して、C:\Inetpub フォルダから「adfs」フォルダを削除。

    以上で環境がキレイになったはずです。

    再度 AD FS 2.0 をインストール&構成 してみてください。

    ※参考サイト
    How to restore IIS and clean up Active Directory when you uninstall Active Directory Federation Services 2.0

  • 【IDM】AD FS 2.0 スタンドアロン と サーバーファーム の大きな違いは構成DB

    なんか、もう、イロイロと飽きてきたので、BLOG に逃避中です。

    AD FS 2.0 の構成を行おうとして最初につまずいたのが以下の画面だったのはどいつだ~い。あたしだよ。←近頃はやりのギャグ

    image

    両者の大きな違いを簡単に、そして栃木弁で書いてしまうと、

    AD FS のサーバーが 1台が否が。

    です。当然ですし、栃木弁も標準語もあまり変わらないことがわかります。

    AD FS 2.0 のサイジングに関するドキュメントはまだ公開されていないのですが、8コア 2.2GHz のマシンが1秒間に発行できるトークンの数は 約200程度のようです。200K とか 200M じゃないですよ! 200 です。結構重たいですよね。

    全社的に AD FS を展開する場合には、フロントの AD FS サーバーを増やしてロードバランス構成を考慮する必要があるでしょう。

    さて、フロントのサーバーを増やしたら次にやらなければならないのは?

    もちろんバックエンドのデータベースサーバーの強化です。性能はもちろんですが、AD FS の構成データベースには「承認」に関する重要なルールが定義されていますから、絶対に落としてはなりませんし、一時的にも殺してはなりません。Active Directory はマルチマスターで生きていても、AD FS のサーバーが死んだらクレームベースの承認ができなくなります。つまりアプリケーションにアクセスできなくなります。もともこもありません!

    実は、データベースの観点でも スタンドアロン と サーバーファーム には違いがあります。

    それは、

    構成データベースとして製品版の SQL Server が使用できるか否か

    スタンドアロンでは Windows Internal Database(WID)しか使用することができません。

    サーバーファーム構成にした場合には、WID 以外に製品版の SQL Server を使用することができます。ただし、構成ウィザードでは SQL Server を指定することはできず、「FSConfig CreateSQLFarm」コマンドを使用して構成しなければなりません。

    現バージョンでは、一度構成を完了した AD FS 構成データベースを WID から SQL Server に移行することができません!
    ので注意が必要です。

    SQL Server が使えるってことは…単体の性能が向上することはもちろんなのですが、クラスタ構成が作れる…という大きなメリットがありますし、データベースを別のサーバーに外出しすることができます。

    簡単にまとめると以下の通りです。

    ※WID = Windows Internal Database

    スタンドアロン

    • サーバー1台がフロントのAD FSサーバーと構成データベースを持つ
    • 構成データベースとして WID のみを使用可能

    サーバーファーム + WID

    • フロントの AD FSサーバーを複数のサーバーでロードバランス可能
    • 最初にインストールした AD FS サーバーがプライマリとなり、WID の Read / Write が可能
      • プライマリは後からコマンドで変更することが可能
    • 2 台目以降の AD FS サーバーの WID は Read Only
    • 2 台目以降の AD FS サーバーは、規定で 5分に1回 プライマリの WID から構成情報を複製する
       Windows Internal Database
    • サーバーファームで WID を使用した場合には以下の機能が使用できない
      • SAML/WS-Federation Token Replay アタックの抑止
      • SAML アーティファクトプロファイル

    いかがでしょう? サーバーファームで WID を使用すると、結構な制限がありますよね。ちなみに、プライマリの AD FS サーバーはPowerShell コマンドレットを使用して変更するとができます(Set-ADFSSyncProperties)。

    サーバーファーム + SQL Server

    • フロントの AD FS サーバーを複数のサーバーでロードバランス可能(WID 使用時と同様)
    • 構成ウィザードを使用せずに 「FSConfig CreateSQLFarm」コマンドを使用する
      • コマンドのパラメタとして 接続文字列を指定できるので、外部サーバーをデータベースサーバーにすることが可能
    • 1台の構成データベースを全てのAD FSサーバーで共有
      • どの AD FSサーバーからでも構成変更が可能
        SQL Database
    • 製品版SQL Serverの機能はフルに活用できる(もちろんクラスタだってOK)

    結論です。

    AD FS を導入すっときは SQL Server のこども ちぃっと 気にしてみっぺよ

  • 【IDM】AD FS 2.0 で構成データベースを SQL Server にする

    先日、以下を投稿しました。

    【IDM】AD FS 2.0 スタンドアロン と サーバーファーム の大きな違いは構成DB

    せっかくなので、サーバーファーム構成の構成データベースを SQL Server にしてみましょう。

    【準備 1】ADFS 2.0 のインストール

    AD FS 2.0 をインストールしておいてください。

    ただし、構成ウィザードを実行しないでください。構成ウィザードでセットアップすると、構成DB は WID(Windows Internal Database)になってしまい、あとから変更することはできません。

    間違えて構成ウィザードを使用してしまった場合には、以下の手順で既存の AD FS 2.0 の環境を削除しておいてください。

    【IDM】AD FS 2.0 をアンインストールするには

    【準備 2】サービスアカウントの準備

    ADFSのサービスアカウントとなるユーザーを事前に作成しておいてください。ここでは「adfssvcaccount」とします。

    【準備 3】SQL Server のインストール

    どこかのサーバー(もちろんローカルでもOK)に SQL Server をインストールしておいてください。

    【構成の実施】

    現バージョンでは、SQL Server を使用するように構成するには、fsconfig.exe コマンドを使用しなければなりません。

    コマンドプロンプトを起動し、C:\Program Files\Active Directory Federation Services 2.0 に移動します。

    書式は以下の通りです。

    FSConfig.exe CreateSQLFarm /ServiceAccount <ドメイン名>\<サービスアカウント名> /ServiceAccountPassword <サービスアカウントのパスワード> /SQLConnectionString "database=<構成DB名> ; server=<SQL Server のサーバー名>\<インスタンス名> ; integrated security=SSPI" /AutoCertRolloverEnabled

    ここでは以下のパラメタで環境を作成するものとします。

    • サービスアカウント : adfssvcaccount
    • サービスアカウントのパスワード : P@ssw0rd
    • SQL Server のサーバー名 : T330401
    • SQL Server のインスタンス名 : MSSQLSERVER(デフォルトのインスタンス名)
    • 構成DB名 : AdfsConfiguration (←既定のデータベース名です。変更してもかまいません。)
    • SQL Server へのログオン : 統合セキュリティ

    書式に埋め込んだものが以下の通りです。サービスアカウント名には必ずドメイン名を指定してください。また、規定のインスタンス(MSSQLSERVER)を使用する場合には、インスタンス名の指定は必要ありません。

    FSConfig.exe CreateSQLFarm /ServiceAccount t3304\adfssvcaccount /ServiceAccountPassword P@ssw0rd /SQLConnectionString "database=AdfsConfiguration ; server=T330401 ; integrated security=SSPI" /AutoCertRolloverEnabled

    実行結果例を以下に示します。

    C:\Program Files\Active Directory Federation Services 2.0>FSConfig.exe CreateSQL
    Farm /ServiceAccount t3304\adfssvcaccount /ServiceAccountPassword P@ssw0rd /SQLC
    onnectionString "database=AdfsConfiguration ; server=T330401 ; integrated securi
    ty=SSPI" /AutoCertRolloverEnabled

    新しいフェデレーション サーバー ファームを作成しています...
    AD FS 2.0 Windows サービスを停止しています...
    正常に終了しました
    AD FS 構成データベースを構成しています...
    正常に終了しました

    署名証明書と暗号化解除証明書を共有するために Active Directory コンテナーを作成し
    ています...

    正常に終了しました
    証明書、サービス設定、およびエンドポイントを構成しています...
    警告: 指定されたサービス アカウントの SPN を設定しようとしてエラーが発生しました
    。サービス アカウントの SPN を手動で設定してください。サービス アカウントの SPN
    を手動で設定する方法の詳細については、AD FS 2.0 の展開ガイドを参照してください。

    エラー メッセージ: このフェデレーション サービスに必要な SPN が別の Active Direc
    tory アカウントで既に設定されています。別のフェデレーション サービス名を指定して
    、再度実行してください。

    IIS の既定の Web サイトの /adfs/ls 仮想ディレクトリにブラウザー サインイン Web
    サイトを展開しています...
    正常に終了しました
    AD FS 2.0 Windows サービスを開始しています...
    正常に終了しました
    既定の要求セットを作成していま��...
    正常に終了しました
    Active Directory 要求プロバイダー信頼で既定の要求受け付け規則を作成しています

    正常に終了しました

    構成は完了しましたが、1 つ以上の警告が発生しました。

    C:\Program Files\Active Directory Federation Services 2.0>

    途中、警告が1つ出ていますが、これはAD FS 2.0 のインストールや削除を繰り返すたびに、以前から使用しているサービスアカウントを使いまわしているためです。

    以下のように、SQL Server の 既定のインスタンス上に構成データベースが作成されたことがわかります。

    image