次の方法で共有


SharePoint の内部セキュリティ アカウントの資格情報を管理する

Pav Cherny

目次

SharePoint 環境でのパスワードの変更
ファームの資格情報に関する問題のトラブルシューティング
まとめ

ファームの資格情報とセキュリティ アカウントのパスワードを頻繁に変更することは、Microsoft Office SharePoint Server (MOSS) ファームのセキュリティを確保するための重要な対策です。ただ、管理者にとっては、繰り返しを伴う面倒な作業です。ツールは使いにくく、基盤となるプロセスは複雑です。また、わかりやすいドキュメントはなかなか見つけられず、正しい手順をすべて実行してもサーバー ファームを破損する一定のリスクがあります。

マイクロソフト製品サポート サービス (PSS) から、問題に対する技術的なアドバイスがいくつか提供されています。サポート技術情報 (KB) には、「SharePoint Server 2007 および Windows SharePoint Services 3.0 のサービス アカウントとサービス アカウントのパスワードを変更する方法」のような役立つ記事もあれば、「SharePoint 製品とテクノロジ構成ウィザードを使用するときに、エラー メッセージ "例外: System.ArgumentException: 暗号化または解読中にエラーが発生しました" が表示される」など、障害に関する記事もあります。

この記事には、Web アプリケーションのアカウント資格情報の暗号化を解除できない場合、新しい構成データベースを作成しなければならないと記載されています。このような状況は、重要なコマンド スイッチを不適切なタイミングで使用するか、ファームの資格情報の更新プロセスがなんらかの理由で正常に完了しなかった場合に発生します。このサポート技術情報の記事は、ファームの資格情報を変更するとサーバー ファームが破損して修復不可能になるかもしれないという恐れを管理者に植え付けるすばらしい仕事をしてくれました。このようなリスクに直面するとわかっていて、ファームとセキュリティ アカウントのパスワードを頻繁に変更して SharePoint 環境のセキュリティを管理することをユーザーに期待できるでしょうか。

ユーザー アカウントをリセットするためにユーザーが Active Directory を消去することはありません。また、Web アプリケーションのパスワードをなくしただけで、SharePoint 構成データベースの消去を強いられることもありません。つまり、新しい構成データベースを作成する必要はありません。多くの場合、標準の Stsadm.exe ツールを使用して、破損した資格情報を上書きすれば十分です。それでは問題がある場合は、付属リソースに含まれているツールを使用してパスワードをリセットし構成データベースを保持できます。このツールは「2008 年 2 月のコード ダウンロード」から入手できます。Windows SharePoint Services (WSS) 3.0 および MOSS 2007 の環境でパスワードをリセットする際、古い資格情報キーにも新しい構成データベースにもアクセスする必要はありません。しかし、パスワードの変更を容易にする優れたサポート ツールと、その基盤となるプロセスに関するわかりやすいドキュメントが必要です。このようなツールは、マイクロソフトから提供されています。

このコラムは 2 部シリーズの第 1 部です。このシリーズでは、SharePoint セキュリティ アカウントを管理するための標準手順とツールを確認し、制限事項について説明し、リスクについて取り上げます。また、より優れたセキュリティを実現し、管理オーバーヘッドを削減し、結果として SharePoint 環境の総保有コスト (TCO) を削減するための代替アプローチを提案します。この第 1 部では、パスワードの変更を実現するアーキテクチャの詳細と複雑なプロセスについて取り上げます。

SharePoint がセキュリティ アカウントとパスワードを処理するしくみを理解することが不可欠です。このしくみは、セキュリティを維持する際にスクリプトを手動で使用するのか、完全に自動化されたソリューションを使用するのかによって異なります。完全に自動化されたソリューションの例については、来月のコラムで紹介する予定です。説明を現実的かつ実践的なものにするために、このコラムでもテスト環境を利用することにします。第 1 部の説明では、付属のワークシートに示したように、簡単な単一サーバーのインストールで十分です。いつものことですが、ワークシートと付属のツールはテスト ラボのみで使用することを想定していますので、運用環境では使用しないでください。これらのツールは、各自の責任でご使用ください。

SharePoint 環境でのパスワードの変更

SharePoint セキュリティ アカウントまたはファームの構成アカウントのパスワードを変更するには、非常に複雑な作業が伴います。特に、Active Directory、SharePoint サーバーのローカル セキュリティ アカウント マネージャ (SAM) データベース、サービス コントロール マネージャ (SCM) データベース、IIS メタベース、SQL Server、そしてもちろんのことですが、SharePoint のコンテンツ データベースと構成データベースに変更を適用する必要があります。

また、ファーム内のその他すべてのサーバーに変更をレプリケートして、変更を一貫して適用することも必要です。変更がファームの資格情報キーに影響する場合は、ファーム内のすべてのサーバーの SharePoint サービスとアプリケーション プールのパスワードをすべて再暗号化することが必要になる場合があります。ファームの資格情報キーは、SharePoint が構成データベース内のセキュリティ アカウントのパスワードを保護するために使用する暗号化キーです。ファームの構成アカウントのパスワードを変更すると、暗黙のうちにファームの資格情報キーが変更されます。図 1 は、2 台のフロントエンド サーバーを備えたサーバー ファームでのプロセスを示しています。正直に言うと、このプロセスが図のように動作するのは印象的です。

fig01.gif

図 1 SharePoint セキュリティ アカウントのパスワードを変更する

すべてのセキュリティ アカウントのパスワードの変更は Active Directory から開始します。パスワードの変更を開始してから、影響を受けるパスワードを SharePoint で更新するまで、ファームは一貫性のない状態になります。つまり、そのパスワードは IIS などでは期限切れの状態になりますが、SharePoint では依然として有効です。

これは、高可用性が必要な組織にとっては朗報です。パスワードの変更時にシステムを再起動する必要がありません。Windows サービスと IIS では、前回サーバーを起動したときに、古いパスワードを使用して影響を受けるセキュリティ アカウントにログオンすることによって入手したセキュリティ トークンを引き続き使用できます。ただし、このようにパスワードの不整合が生じている過渡期には、IIS やサーバー全体を再起動しないでください。

再起動すると、IIS を始めとするサービスに、古いパスワードでログオンすることができなくなります。また、影響を受けるアプリケーション プールまたはサービスをオンラインにすることもできなくなります。この状況では、IIS からサーバーのイベント ログに警告が書き込まれます (図 2 参照)。そのため、Active Directory でパスワードを変更してから SharePoint でパスワードを更新するまであまり長い時間をかけないでください。

fig02.gif

図 2 IIS によって、アプリケーション プールの古い資格情報に関する警告が書き込まれる

アプリケーション プール アカウントのパスワードを更新するには、SharePoint 3.0 サーバーの全体管理 (_admin/FarmCredentialManagement.aspx) または次の Stsadm.exe コマンドを使用します。

stsadm -o updateaccountpassword -userlogin <DOMAIN\USER> 
  -password <PASSWORD> -noadmin

これに応じて、SharePoint は、ファームの資格情報キーを使用して新しいパスワードを暗号化し、構成データベース内の暗号化されている古いパスワードを上書きします。次に、IIS メタベースやその他必要なすべての場所にあるアカウント情報を更新します。このプロセスが完了すると、SharePoint は SPContentAppPoolCredentialDeploymentJobDefinition 型のタイマ ジョブを生成し、ファーム内の残りのサーバーに新しい資格情報を展開します。この新しい資格情報は構成データベースに配置されます。

図 1 に示すように、SharePoint はタイマ ジョブを使用して管理に関する設定をファーム内のすべてのサーバーにグローバルに適用します。ファーム内の残りのサーバー上の SharePoint Timer Service によってこのジョブが選択され、それに応じて WSS Administration (SPAdmin) サービスの支援によってそれらのサーバー上のローカル セキュリティ設定が更新され、ファームが一貫性のある状態に戻ります。

これは、アプリケーション プール アカウントのプロセスですが、他にも SharePoint Timer Service 自体、WSS ヘルプ検索サービス、おそらくは共有サービス プロバイダ (SSP)、Office SharePoint Server Search サービス、シングル サインオン (SSO) サービスなど、セキュリティ アカウントを使用する多くの種類の SharePoint サービスがあります。ファームにインストールされているソリューションによっては、さらに多くのサービスがある可能性があります。また、各サービスの種類には異なるパスワード更新要件があります。support.microsoft.com/kb/934838 の記事に、WSS 3.0 と MOSS 2007 でサービス アカウントに使用する必要があるコマンドの一覧が掲載されています。追加のツール、コマンド、および更新手順に使用するその他のソリューションについては、製品ドキュメントを確認してください。

この多様でまとまりのないツールとコマンドは、現在の SharePoint セキュリティ アーキテクチャの欠点の 1 つです。セキュリティ資格情報を使用するサーバー ファーム内のカスタム ソリューションの数によっては、TCO が適切に見積もられず、TCO が飛躍的に増加することがあります。これを制御し、基になるサービスの種類にかかわらず 1 つのソリューションを使用して必要な更新をすべて実現できる方法については、このシリーズの第 2 部で説明します。

最も重要な更新シナリオは、ファームの資格情報に関係します。ファーム アカウントのパスワードは、ファームの資格情報キーに影響するので特別です。前述のとおり、ファームの資格情報キーはファーム内のすべてのパスワードを暗号化するために使用されます。そのため、Active Directory でファーム アカウントのパスワードを変更したら、次のコマンドを使用して SharePoint を更新する必要があります。

stsadm -o updatefarmcredentials -userlogin <DOMAIN\USER>
  -password <PASSWORD>

その後、SharePoint は構成データベース内の既存の (暗号化された) パスワードをすべて再暗号化し、SharePoint Timer Service アカウント (ファーム アカウントをその ID として使用します) を更新し、SPAdminAppPoolCredentialDeploymentJobDefinition 型のタイマ ジョブを使用してファーム内のすべてのサーバーにそれらの変更をもう一度反映する必要があります。

この段階で多くの問題が発生する可能性があります。図 3 のようにタイマ ジョブがキューに溜まったり、突然の停電などで更新プロセスが予期せず失敗することがあります。このような場合、暗号化された古いパスワードが残ることになります。ただし、資格情報キーは既に変更されているため、SharePoint ではそのパスワードを解読できません。

fig03.gif

図 3 ファーム内のどのサーバーでも SharePoint Timer Service が実行されていないために資格情報展開ジョブがキューにスタックされる

別のシナリオとして、ファームの新しい資格情報がファーム内のすべてのサーバーに適用される前に、アプリケーション プール アカウントのパスワードを更新してしまうことが考えられます。その結果として、図 4 に示すように、古い資格情報キーを持つサーバーでは構成データベース内の更新されたパスワードを解読できないため、エラーが発生します。これは興味深いシナリオの 1 つです。この場合、updateaccountpassword コマンドで -noadmin スイッチを使用することになります。ファーム アカウントをアプリケーション プール アカウントとしても使用している場合 (推奨しません)、まず、ファームの資格情報を更新し、ファーム内のすべてのサーバーでタイマ ジョブが処理されるのを待ってから、アプリケーション プールを更新する必要があります。

fig04.gif

図 4 管理アプリケーション プールの資格情報展開ジョブが処理されるまでアプリケーション プールの更新を保留する

これに応じて、updateaccountpassword コマンドは、指定されたセキュリティ アカウントがファーム アカウントかどうかをチェックし、更新を実行しない場合にはユーザーに依存関係を通知します。-noadmin スイッチを使用すると、このチェックが無効になり、アプリケーション プールの構成に含まれているアカウントに変更後のパスワードが適用されますが、スクリプトで適度な時間差をつけてこれらの手順を自動化するのは困難です。

ファームの資格情報に関する問題のトラブルシューティング

では、updatefarmcredentials コマンドについて詳しく見ていきましょう。記事「SharePoint 製品とテクノロジ構成ウィザードを使用するときに、エラー メッセージ "例外: System.ArgumentException: 暗号化または解読中にエラーが発生しました" が表示される」で説明されているとおりにコマンドを使用する場合、多大な労力を伴う可能性のある危険なスイッチを同時に使用します。ここで、-local というスイッチについて説明します。SharePoint 開発者は、ローカル ファームの資格情報の更新を手動で実行する目的でこのスイッチを導入しました。タイマ ジョブが破損しているか、なんらかの理由で処理されない場合にサーバーの全体管理 (_admin/ServiceJobDefinitions.aspx) のキューからタイマ ジョブを削除でき、その後、次のコマンドを使用して必要な更新手順を直接実行できるという考えです。

stsadm -o updatefarmcredentials -userlogin <DOMAIN\USER> 
  -password <PASSWORD> -local

-local スイッチは updatefarmcredentials コマンドに対し、パスワードの変更をローカル コンピュータのみに適用するよう指示します。ただし、この更新は資格情報キーと SharePoint Timer Service のみに影響し、アプリケーション プール、Search サービス、SSP などには影響しないことを認識しておくことが重要です。これは、ファーム内の別のサーバーで -local スイッチを指定せずに updatefarmcredentials コマンドを既に実行し、構成データベース内のすべてのパスワードを再暗号化したことが前提となっています。この再暗号化手順を再び実行する必要はありません。しかし、この手順を使用せずに -local スイッチを使用した場合はどうでしょうか。

最初に -local スイッチを指定しないで updatefarmcredentials コマンドを実行することなく -local スイッチを使用すると、-local スイッチによって資格情報キーが変更されるため問題が発生します。アプリケーション プールのパスワードは構成データベース内の古いキーを使用して暗号化されますが、この時点でこのキーが上書きされます。

図 5 をご覧ください。このようにコマンドを実行するには、解読できなくなったパスワードを再暗号化する必要があるため、もはや -local スイッチを指定せずに updatefarmcredentials コマンドを実行することはできません。コマンドが失敗すると、アプリケーション イベント ログに次の内容のエントリが見つかります。"管理アプリケーション プールの資格情報の展開中に、所有者 ID 431b6897-16eb-4b9a-be65-60f1f603008d で資格情報 ID 022e607e-b49e-40e4-bd3f-f56a3c69f94d を再暗号化できませんでした。資格情報を手動で再作成してください。オブジェクトの現在の状態に問題があるため、操作は有効ではありません。"

fig05.gif

図 5 パスワードを解読できなくなったためにアプリケーション プールのパスワードを再暗号化できない

単一サーバー展開でファーム アカウントをネットワーク サービス アカウントからドメイン アカウントに変更しただけでも、古い資格情報キーに再度戻すことができないため、やっかいな問題に直面します。ネットワーク サービスではパスワードを使用しないため、資格情報キーがランダムになります。

役立つ情報を探していると、前述の記事「SharePoint 製品とテクノロジ構成ウィザードを使用するときに、エラー メッセージ "例外: System.ArgumentException: 暗号化または解読中にエラーが発生しました" が表示される」が見つかることがあります。新しい構成データベースを作成して解読できなくなったパスワードを消去する必要があるということを今学んでいるため、詳しい知識がないと問題が悪化します。悪化する状況は実にさまざまです。そもそも -local スイッチを指定して updatefarmcredentials コマンドを実行できないようにする必要があります。または、そのコマンドで、古い資格情報キーのバックアップ コピーを作成し、後でパスワードを再暗号化できるようにする必要があります。あるいは、単にパスワードがまだ再暗号化されていないことを検出し、その時点でパスワードを再暗号化します。

-local スイッチが実行されると、図 5 に示すように、警告が表示されることなく、SharePoint 構成データベースがいつの間にか破損します。このように解読できなくなったパスワードをリセットするには、マイクロソフトから提供されているサポート ツールが役に立ちます。もちろん、特定のコマンド ライン操作の重要な性質に関する注意とこの問題の説明が記載されている、適切な製品ドキュメントも参考になります。

よい知らせとしては、updateaccountpassword コマンドを使用すると、アプリケーション プール アカウントの古いパスワードを解読する必要なく、新しいパスワードを暗号化できます。そのため、このコマンドを使用して、ドメイン アカウントを使用するすべてのアプリケーション プールを更新します。これで、すべてではありませんが、多くの破損したパスワードに対処できます。残念ながら、このコマンドを使用してネットワーク サービス アカウントを使用するアプリケーション プールを更新することはできません。このアカウントではパスワードは不要なので、updateaccountpassword コマンドは適用しません。

興味深いことに、ネットワーク サービス アカウントが構成データベース内のパスワード データに関連付けられている場合があります。ネットワーク サービスを使用する新しいアプリケーション プールにパスワードはありません。ただし、アプリケーション プールを、ドメイン アカウントを使用するように変更してから元に戻した場合、ネットワーク サービスはドメイン アカウントのパスワード参照を継承します。SharePoint はパスワードを null に設定しない (不正なコードの事例です) ので、今度はこの無意味なデータが原因で問題が発生します。

皮肉なことに、無意味でまったく役に立たないデータでもそれが解読できなくなっているため、ユーザーは構成データベースを破棄することになります。運が良ければ、サーバーの全体管理 (_admin/FarmCredentialManagement.aspx) でアプリケーション プールの構成を変更し、ドメイン アカウントを指定できます。運が悪いと、図 6 に表示されている暗号化エラーまたは解読エラーが発生します。サーバーの全体管理でアカウントを変更することも、updateaccountpassword コマンドを使用することも、SharePoint 製品とテクノロジ構成ウィザードを実行することも、updatefarmcredentials コマンドを使用してファームの資格情報を更新することもできません。このような状況に陥った場合、どうすればよいのでしょうか。

fig06.gif

図 6 構成データベースに残っていたネットワーク サービスの無効なパスワードによって発生した問題

この問題を解決するには、構成データベースに直接アクセスして古いパスワードを削除するツールが必要です。このようなツールには、図 7 に示されていて付属リソースのソース コードに含まれている Reset AppPool Password (AppPool パスワードのリセット) ツールがあります。このツールは非常に単純です。暗号化されたパスワードが関連付けられているアカウントを使用するアプリケーション プールのデータを構成データベースから直接取得し、SharePoint オブジェクト モデルを使用してアプリケーション プールのパスワードを解読できるかどうかを判断します。

fig07.gif

図 7 破損したパスワードを null にリセットする

オブジェクト モデルを使用したパスワードへのアクセスが引数の例外で失敗した場合、そのパスワードは破損しています。ここでツールを使用すると、暗号化されたバイト値が格納されているパスワードの配列を null 参照に置き換え、その変更を構成データベースに保存できます。空の文字列は解読する必要がないため、引数の例外は発生しません。これで問題は解決しました。

修復プロセスを完了するには、Stsadm.exe とサーバーの全体管理を使用して、ファームの資格情報を更新してからアプリケーション プールのアカウントをすべて更新することをお勧めします。ファームは一貫性のある状態に戻り、構成データベースを破棄する必要がなくなります。

まとめ

ファームの資格情報とセキュリティ アカウントのパスワードを変更するのは面倒でエラーが発生しやすいプロセスですが、ファームの資格情報を変更することによってサーバー ファームが破損して修復不能な状態になる心配をしなくて済みます。現在の資格情報キーを消失した場合でも、構成データベースを修復できます。影響を受けたパスワードをリセットする必要があるだけです。パスワードのリセットは標準の Stsadm.exe ツールまたは Reset AppPool Password (AppPool パスワードのリセット) などの低レベルのデータベース ツールを使用して実行できます。そのため、ファームの資格情報とセキュリティ アカウントを頻繁に変更し、強力なパスワードを使用するようにしてください。また、セキュリティ アカウントとしてネットワーク サービスを使用しないでください。ファームの構成が複雑になり問題が発生します。そして、専用のドメイン アカウントを使用してください。

パスワードの変更によるデータベース破損のリスクに対処したので、SharePoint セキュリティ アーキテクチャの本当の問題に取り組むことができます。現在のアーキテクチャがパスワードの変更にあまり対応していないという問題です。ファーム内で更新する必要のあるサービスの種類によって異なりますが、だいたい多くのコマンドを特定の順序で適用する必要があります。コマンドによって危険なスイッチがあるものとないものがあります。構成データベースを破損する可能性のあるコマンドと、安全なコマンドがあります。また、ファーム全体でグローバルに更新する必要のあるサービスと、特定のサーバーに対してローカルなサービスもあります。

いずれの場合も、複雑な処理を伴うため管理オーバーヘッドが高くなり、頻度の少ない変更スケジュール、脆弱なパスワード、パスワードをクリア テキストで処理するスクリプトなどにより、セキュリティが低レベルになるのが一般的です。次回のコラムでは、これらの問題にどのように取り組み、問題を解消するのかについて説明します。また、サービスのすべての種類 (まだ開発されていないものを含む) や、パスワードの更新要件についても取り上げます。もう (手動で) パスワードを変更しないでください。

Pav Cherny は、主にコラボレーションとユニファイド コミュニケーションに関するマイクロソフト テクノロジを扱う IT 専門家であり、IT 関連書籍の執筆も行っています。これまでに、IT の運用とシステム管理についてのホワイト ペーパー、製品マニュアル、書籍などを執筆してきました。Pav は、ドキュメント管理とローカライズ サービスの専門企業 Biblioso Corporation の代表取締役です。