ワークフローのセキュリティとユーザー管理を計画する (SharePoint Foundation 2010)

 

適用先: SharePoint Foundation 2010

ワークフローを Microsoft SharePoint Foundation 2010 に展開してユーザーが使用できるようにする前に、管理者は、情報公開、権限の昇格など、セキュリティに関する問題を考慮する必要があります。この記事では、セキュリティに関連するワークフローの動作と、管理者とワークフローの開発者がワークフローの構成と開発を計画する際に考慮する必要があるその他の問題について説明します。

この記事の内容

リスト管理者、管理者、および開発者の役割と責任

一般的なワークフローのアクションおよび関連する責任、ワークフローの実行における管理者と開発者の役割を以下に示します。

ワークフロー開発者

ワークフロー スケジュールとワークフロー テンプレートの開発   ワークフロー開発者は、SharePoint アイテムに対して実行されるビジネス ロジックを含むアセンブリのコーディングを担当します。このアセンブリをワークフロー スケジュールと呼びます。ワークフロー開発者は、ワークフロー フォームとアセンブリをワークフロー機能またはワークフロー テンプレートにパッケージ化する作業も担当します。

サイト管理者

サーバーの全体管理ワークフローの設定の管理   サイト管理者は、SharePoint サーバーの全体管理 Web サイトでのタスク通知結果や外部参加者の設定といった一般的なワークフロー設定を制御できます。

ワークフロー機能の展開   サイト管理者は、ワークフロー機能をサイト コレクションにインストールして、関連付けで使用できるようにします。

リスト管理者 (リストの管理権限または Web デザイナー権限を有するユーザー)

ワークフローの追加   リスト管理者は、リストやコンテンツ タイプのビジネス ニーズに従って、ワークフロー テンプレートをリストやコンテンツ タイプに関連付ける (追加する) 必要があります。この関連付けによって、エンド ユーザーがワークフロー テンプレートを使用できるようになり、既定の値と設定を選択できるようになります。

ワークフローの削除   リスト管理者は、リストまたはコンテンツ タイプからワークフローの関連付けを削除したり、新しいインスタンスの実行を禁止したりできます。

ワークフローの終了   ワークフロー インスタンスの実行に失敗した場合、リスト管理者は、[ワークフローの状態] ページの [このワークフローを終了する] リンクを使用してワークフロー インスタンスを停止できます (ワークフロー インスタンスでエラーが発生したとき、ワークフロー インスタンスが開始しなかったときなど)。このアクションは、管理者のみが実行できます。

管理者としてのワークフローの実行

セキュリティに関する概念の中でも最も重要なのは、ワークフローは、サーバー コンピューターとドメインの ID アプリケーション プールの設定を使用して SharePoint Foundation 2010 のシステム アカウントの一部として実行されるということです。これは、SharePoint Foundation 2010 の中では、ワークフローは管理者権限を有することを意味します。サーバー上では、ワークフローはアプリケーション プールと同じ権限を有します。この権限は、多くの場合管理者権限です。この権限は、ドキュメントの特定の場所やレコード センターへの送付、システムへのユーザー アカウントの追加など、通常のユーザーでは実行できないアクションをワークフローが実行することを可能にします。

ワークフローが管理者権限を有するというこの設定は変更できません。ユーザーのアクションを検出し、検出したアクションに基づいて変更を続行またはロールバックするか、ユーザーのアクセス許可を模倣するためにそのユーザーを偽装するかを決定するのは、ワークフロー スケジュール (つまりワークフロー コード) です。

ワークフロー スケジュールによってワークフローを展開する際、管理者は、ワークフローによって実行されるアクションを理解し、ワークフローの権限の昇格に伴う潜在的なリスクを評価することで、ワークフロー開発者がセキュリティ上の問題を軽減できるようにする必要があります。

ワークフローの構成設定

SharePoint Foundation 2010 には、セキュリティ上のニーズに従って管理者が設定する必要がある構成設定がいくつかあります。

ワークフローを開始するために必要なアクセス許可

リスト管理者は、コード内で権限の昇格を防ぐことに加えて、関連付けプロセス中にワークフローを開始するために必要なアクセス許可レベルを制限できます。管理者は、ワークフローの具体的な関連付けを開始するための 2 つのアクセス許可レベルであるアイテムの編集とリストの管理のどちらかを選択できます。

ワークフローの関連付けに対する既定の設定では、アイテムの編集アクセス許可を有するユーザーに対して、ワークフローの手動での開始を許可します。これは、アイテムの編集アクセス許可を有する、リストに含まれる認証された SharePoint Foundation 2010 ユーザーが、ワークフロー関連付けのインスタンスを開始できることを意味します。ワークフローの作成中に、管理者が、ユーザーによるワークフローの開始にはリストの管理アクセス許可が必要であることを要求するオプションを選択した場合は、リスト管理者だけがこの関連付けのインスタンスを開始できます。

ワークフローは標準的な投稿者による使用が想定されているので、ほとんどのワークフローでは、リストの管理アクセス許可に対する制約は必要ありません。ただし、管理者は、たとえばドキュメント破棄ワークフローのようなワークフローでこの設定を使用して、特定のユーザーだけが破棄アクションを実行できるように設定できます。

サーバーの全体管理の設定

以下の設定は、[サーバーの全体管理] ページで [アプリケーション構成の管理] をクリックし、[Web アプリケーション] セクションの [Web アプリケーションの管理] をクリックすると表示されます。[Web アプリケーション] ページで、構成する Web アプリケーションを選択し、リボンの [管理] グループで [ 全般設定] をクリックして、[ワークフロー] を選択します。[ワークフロー設定] ページが開き、以下の設定が表示されます。

  • ユーザー定義ワークフロー

  • ワークフロー タスクの通知

ユーザー定義ワークフローを有効にする

既定では、[ワークフロー設定] ページの [ユーザー定義ワークフロー] セクションに表示されるユーザー定義ワークフローは、すべてのサイトの Web アプリケーションで有効になっています。この設定が有効な場合、ユーザーは SharePoint Designer 2010 などのワークフロー エディターでワークフローを定義できます。ワークフローを定義するユーザーは、ワークフローを展開するサイト上にリストの管理アクセス許可を持っている必要があります。

サイトにアクセスできないユーザーへのタスク通知

[ワークフロー設定] ページの [ワークフロー タスクの通知] セクションで、サイトにアクセスできないユーザーに対して保留中のワークフロー タスクに関する通知を送信するオプションを設定できます。

-
内部ユーザー

SharePoint Foundation 2010 では、サイトのメンバーではない、またはタスクにアクセスできないディレクトリ サービスの内部ユーザーの名前を解決できます。この場合、管理者は、\[**ワークフロー タスクの通知**\] セクションの \[**サイト アクセス権のない内部ユーザーにワークフロー タスクが割り当てられたことを通知する**\] オプションを選択して、そのようなユーザーが電子メールでタスク通知を受け取るかどうかを設定できます。このオプションは、ワークフロー タスクが割り当てられたユーザーにはその時点で通知が行われることを意味します。このオプションは既定で有効になっており、ユーザーが受信する電子メール メッセージには、クリックによってサイトへのアクセスを要求できるリンクが含まれています (ただし、管理者がアクセスを許可する必要があります)。電子メール メッセージには、ドキュメントに関する情報を記述できます。こうした情報には、ドキュメントのタイトルや、ワークフローの所有者からの指示を含めることができます。サイトのメンバーではない内部ユーザーに関連する情報公開上の問題がある場合、管理者は、\[**サイト アクセス権のない内部ユーザーにワークフロー タスクが割り当てられたことを通知する**\] の設定を無効にできます。
  • 外部ユーザー

    ディレクトリ サービスの対象外であっても、適切な形式の SMTP 電子メール アドレスが割り当てられている外部ユーザーに対しては、ワークフロー タスクを割り当てることができます。外部ユーザーがドキュメントにアクセスすることは簡単ではないので、SharePoint Foundation 2010 には、[外部ユーザーにドキュメントのコピーを送信してワークフローへの参加を許可する] という、ドキュメントが添付された電子メールで外部ユーザーにタスク通知を送信できるオプションがあります。このオプションを有効にすると、ワークフローの所有者にタスクが割り当てられ、外部ユーザーはその所有者に電子メールを送信することでタスクを完了できます。

    既定では、[外部ユーザーにドキュメントのコピーを送信してワークフローへの参加を許可する] オプションは無効になっています。しかし、この設定は、外部の顧客が関係するビジネス文書の承認などの外部参加を必要とする状況で便利なことがあります。この設定を有効にする ([はい] をクリックする) 管理者は、ワークフロー スケジュールで外部参加設定がサポートされるかどうかを確認する必要があります。たとえば、外部ユーザー用のタスクを作成するときは、カスタム ワークフローのタスクを初期化するために使用された SPWorkflowTaskProperties オブジェクトの OnBehalfEmail プロパティに、外部電子メール アドレスを指定する必要があります。この設定は、SharePoint Foundation 2010 に組み込まれている複数のワークフローでサポートされています。

    この機能を有効化するカスタム ワークフローの開発者は、管理者と連携して、実際の文書を外部電子メール メッセージに添付すると情報公開上のリスクがあるかどうかを判断する必要があります。また、管理者は、この設定を有効にする際にその利点とリスクを評価する必要があります。

タスク リストとワークフロー履歴リストでの情報公開

タスク リストと履歴リストのアイテムは、ユーザーと、ユーザーがドキュメントに対して実行したアクションに関するデータを保持できるので、アイテムによって機密情報が公開される可能性があります。たとえば、プロモーション承認ワークフローでは、組織が表示対象をワークフローの所有者とタスクの参加者に限定するタスクのフィードバックが収集される可能性があります。

タスク リストと履歴リストは、サイト内の典型的なリストです。したがって、既定では、すべてのユーザーがタスク アイテムと履歴アイテムを表示できます。管理者と開発者は、公開できない情報を判別し、ワークフローによって作成されるタスク アイテムと履歴アイテムを保護するかどうかを決定する必要があります。

これらのアイテムの保護は、複数の方法で実行できます。たとえば、管理者は、リスト レベルのアクセス許可を設定できます。プライベートに公開する、つまり、一般公開しないで特定のグループのユーザーにだけ公開する場合、管理者は新しいタスク リストまたは履歴リストを作成し、特定のグループを対象とするアクセス許可をリストに設定します。[ワークフロー] ページに履歴イベントを表示しない場合は、状態ページに情報が読み込まれるワークフロー履歴リストの表示アクセス許可を削除できます。履歴リストそのもの、またはリストのアイテムを表示するためのアクセス許可を持たないユーザーが、履歴リストから情報を読み込む状態ページを開くと、アクセス拒否エラーが発生します。

さらに細かい制約が必要な場合は、ワークフロー開発者が、タスク アイテムまたは履歴アイテムを作成するときに、アイテム単位のアクセス許可を設定できます。CreateTask アクティビティには、新しく作成されたタスクにアクセスするための特定のアクセス許可だけを与える SpecialPermissions プロパティがあります。LogToHistoryList アクティビティにはこのようなプロパティはないので、管理者が履歴リストのアイテムに対してアイテム単位のアクセス許可を設定するには、SharePoint Foundation 2010 のオブジェクト モデル (OM) を使用する必要があります。アイテム単位のアクセス許可は、パフォーマンスにマイナスの影響を与える可能性があるので、必要な場合を除き使用しないでください。

タスク アイテムと履歴アイテムは、同じ方法で処理する必要はありません。管理者は、リストのアクセス許可とアイテム レベルのアクセス許可を変えることも一致させることもできます。

タスク リストとワークフロー履歴リストでのスプーフィングおよび改ざん攻撃

タスク リストと履歴リストに対して何も制限が設定されていなければ、すべての投稿者がリストのアイテムを変更できます。これは、悪意のあるユーザーがタスクの説明を改ざんし、参加者に不適切な指示を与えたり、悪質なリンクをクリックするように命令したりできることを意味します。さらに、悪意のあるユーザーは、プロセスの認識された結果を変えるために、偽の履歴イベントや不適切な履歴イベントを追加したり、履歴イベントを改ざんして偽の履歴イベントや不適切な履歴イベントを作成したりできます。

既に説明したように、タスク リストと履歴リストはサイト内の標準的なリストです。既定では、タスク リストにも履歴リストにも、アクセス許可に関する制限は設定されていません。スプーフィングや改ざんの発生を回避するために、管理者は、内在する脆弱性を判別して、リストの列に対するアクセスの制限 (たとえば、タスクの説明などの攻撃を受けやすい列を読み取り専用にすることで、ワークフローだけがアイテムの作成時に列を設定できるようにする)、リストに対する特別なアクセス許可の設定、またはリストのアイテムに対するアイテム レベルのアクセス許可の設定を行う必要があります。

ワークフロー履歴リストのセキュリティ上の問題

ワークフローの大きな利点は、プロセス情報を追跡してプロセスを可視化できることです。ワークフロー履歴リストはこの情報のリポジトリであり、ユーザーは [ワークフロー] ページでワークフロー インスタンスに関するデータを検索して、この情報を表示できます。ユーザーは、自分がアクセス権限を有する履歴リストのすべてのアイテムを表示できます。

ただし、ワークフロー履歴リストは情報を追跡しているので、ユーザーは、このリストをイベントの監査証跡として使用できると考える可能性があります。これは正しくありません。ワークフロー履歴は、セキュリティ機能ではありません。履歴リストは、SharePoint の標準的なリストであり、イベントを保存するために使用され、特別なアクセス許可が関連付けられていないすべてのユーザーが表示できるリストです。既定では、ユーザーは、サイトに対する編集権限と追加権限があれば、イベントを変更および追加できます。イベントを監査するには、SharePoint の監査ログ機能を使用します。このログには管理者だけがアクセスでき、改ざん攻撃から保護するための追加作業は必要ありません。

管理者は、履歴リストをより安全に保護するために、リストに対する編集権限と追加権限を制限して、システム アカウント管理者 (ワークフロー管理者など) とリスト管理者だけがアイテムを追加できるように設定できます。リスト管理者が "このワークフローを終了する" イベントを記録するには、追加アクセス許可が必要です。履歴リストで編集権限と追加権限が制限された場合でも、ユーザーには状態情報を表示できるように表示権限を与える必要があります。

宣言型ワークフローのためのユーザー偽装ステップ型

ユーザー偽装ステップ型を使用すると、ワークフローの開始者の代わりにワークフローを作成したユーザーが宣言型ワークフローの一部を実行できます。宣言型とは、ワークフローを作成し、ワークフローのパラメーターをコードを記述せずに設定するために使用するモデルを意味します。

SharePoint Foundation 2010 では、宣言型ワークフローは、偽装ステップに遭遇しない限り、常にワークフローの開始者のユーザー コンテキストで実行されます。偽装ステップに遭遇した場合、宣言型ワークフローは、ワークフローの関連付け実施者のコンテキストで実行されます。既定のワークフロー タスクでは、ワークフローの実行時にワークフローを開始したユーザーを偽装することによって、SharePoint のアクセス許可を優先します。この処置により、SharePoint Foundation 2010 の安全性は非常に高まりますが、高いレベルのアクセス許可を有するワークフロー デザイナーが、低いレベルのアクセス許可を有するユーザーが問題なく完了できる強力なワークフローを作成すると、多くの場合ブロックが発生します。

安全で範囲を限定した形で権限の昇格を使用することで、ワークフローを使用してサイト アクションを自動化できます。これにより SharePoint サイト管理者の負担が軽減されます。安全性の高いプロセスの自動化は、発行シナリオと承認シナリオでワークフローの開始者以外のユーザーを偽装するために既存のアクションを有効にする場合に便利です。

ユーザー偽装ステップ型を使用するシナリオの例を次に示します。

  • 安全なリストに対する発行

    Jackie は、自分の SharePoint サイトの公開部分に含まれる "ページ" ドキュメント ライブラリをロックしています。彼女は、Microsoft SharePoint Designer 2010 を使用して、サイトの投稿者から送られたコンテンツを承認するためのワークフローを設定しています。Jackie は、自分のワークフロー アクションを偽装ステップの中に配置して、そのワークフロー アクションではサイト管理者である自分がワークフローの作成者として常に偽装されるようにしました。

    Connie (投稿者) がコンテンツの下書きをサイトの "ページ" ライブラリに投稿して自分の記事を発行しようとすると、そのアクションによって、投稿をチェックして承認するための Jackie の承認ワークフローが開始されます。Connie の代わりに、ワークフロー内の承認者にタスクが送信されます。承認者によるチェックと承認後、投稿のモデレート状態は、Connie 自身がページを承認するための権限を持っていなくても、"承認済み" に変更されます。

  • ユーザーにアクセス許可を与える

    Joanne は、SharePoint Designer 2010 で、ユーザー偽装アクションである "グループにユーザーを追加する" を使用して、自分のサイトに対する設計権限を与えるワークフローを設定しています。このワークフローでは、偽装スコープを使用するので、グループにユーザーを追加するアクションは、常に Joanne に代わって実行されます。

    以降のワークフローでは、投稿者にサイトにアクセスしてリストへのアクセス要求を記録するフォームを完了することを許可します。

    たとえば、ユーザー Connie が要求を記録すると別のユーザーである Olivier がタスクを受信し、Olivier がタスクを承認すると Connie がサイトのデザイナー グループに追加されます。これらの動作は、Olivier と Connie のどちらにも Joanne のサイトでのリスト管理権限がない場合でも行われます。

  • テンプレートと所有権の取得

    William は、SharePoint Designer 2010 でさまざまなワークフローを作成し、それらをテンプレートとして保存して会社全体で再利用できるようにしましたが、彼自身は間もなく会社を辞めることになっています。退職すると、アカウントは削除され、管理者の地位は失効するので、William が作成した SharePoint Designer 2010 ワークフローは、William の権限の消失により、完了できなくなります。

    親 SharePoint サイトの管理者である John は、SharePoint Designer 2010 でワークフローを再作成することなく、各ワークフローに介入できます。John は、壊れた各テンプレートで発生する管理上の問題を引き継ぎます。これを行った後、William の代わりに John の名前で安全な発行とアクセス権の付与が実行されますが、名前以外は何も変更されません。

偽装できるワークフロー アクションを次に示します。

  • コンテンツの承認ステータスの設定 (所有者として)

  • リスト アイテムの作成 (所有者として)

  • リスト アイテムの更新 (所有者として)

  • リスト アイテムの削除 (所有者として)

  • リスト アイテムのアクセス許可の追加/削除/設定/継承 (所有者として)

SharePoint 管理者は、SharePoint サイトのワークフローに偽装を組み込んだ場合の潜在的なセキュリティ上の影響を考慮する必要があります。これは、新しいアクションだけでなく、リスト アイテムの更新などの既存のアクションにも適用されます。

たとえば、ワークフロー内のユーザー偽装アクションを、ワークフローの開始者として実行できるモデルについて検討します。サイト コレクションの中の特定のサイトに対してのみ管理者権限を持っているユーザーは、サイトの親 Web に対する権限を獲得するワークフローを悪意を持って作成できます。この悪意のあるユーザーは、管理者が悪意のあるユーザーのサイトのドキュメント ライブラリにファイルをアップロードするように促すだけで、ワークフローへの攻撃を開始し、サイトの親 Web 全体を混乱させることができます。

このリスクにより、SharePoint Designer 2010 では、"ユーザー偽装アクションでは、常に関連付け実施者を偽装する" という制限の開発が求められました。"関連付け実施者" とは、ワークフローを特定のリストまたは Web に関連付けるユーザーのことです。SharePoint Foundation 2010 の宣言型ワークフローでは、関連付け実施者は、ワークフローの作成者と同じユーザー、つまり、SharePoint Designer 2010 でワークフローを作成するユーザーです。ただし、宣言型ワークフロー テンプレートを関連付けるユーザーも関連付け実施者になることができます。次に問題になるのは、作成者/関連付け実施者の資格情報が昇格の中で使用されるので、ユーザー偽装ステップ型によって発生することのすべての責任を、作成者/関連付け実施者が引き受けざるを得ないということです。このため、作成者/関連付け実施者は、設計または関連付けのワークフローを把握する必要が生じます。したがって、ワークフローの作成中、SharePoint Designer 2010 では、ワークフローの作成ページに、作成者/関連付け実施者を対象とするユーザー偽装ステップ型に関する警告メッセージが表示されます。