Dynamics CRM 2011 サンドボックス処理サービスとプラグインの部分信頼

みなさん、こんにちは。

今回はサンドボックス処理サービスに登録されるプラグインに関する
トピックをお届けします。

信頼と部分信頼

サンドボックス処理サービスに登録されたプラグインは部分信頼となり、ローカル
リソースへのアクセスが制限されます。サンプルとしてローカルリソースにアクセスする
プラグインを作成して、信頼と部分信頼に登録した場合の動作の違いを確認します。

プラグインの開発

1. Visual Studio 2010 を開き、新しいプロジェクトを作成します。Windows より
クラスライブラリを選択して、LocalResourcePlugin と名前を指定します。

image

2. ソリューションエクスプローラーより、LocalResourcePlugin プロジェクトを
右クリックして、プロパティをクリックします。

3. 署名タブをクリックして、アセンブリの署名にチェックを入れます。プルダウンより
新規作成をクリックして、キーを作成します。

image

4. 今回は以下のように設定を行い、キーを作成しました。

image

5. ソリューションエクスプローラーより参照設定を右クリックして、参照の追加を
クリックします。参照タブより sdk\bin\microsoft.xrm.sdk.dll を選択します。

6. Class1.cs ファイルを開いて、以下のコードを記述します。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

using Microsoft.Xrm.Sdk;

namespace LocalResourcePlugin
{
    public class Class1:IPlugin
    {      
        public void Execute(IServiceProvider serviceProvider)
        {
            // テキストから読み出す文字列を初期化
            string mytext = "";
            // ISV フォルダ配下のファイルを読み出し
            string file = @"C:\Program Files\Microsoft Dynamics CRM\CRMWeb\ISV\sample.txt";
            // ストリームを作成
            StreamReader reader = new StreamReader(file);
            try
            {
                do
                {
                    mytext += reader.ReadLine().ToString();
                }
                while (reader.Peek() != -1);               
            }
            catch
            {
                throw new InvalidPluginExecutionException();
            }
            finally
            {
                // ストリームを閉じる
                reader.Close();
                // 取得したファイルの情報を表示するために
                // あえてエラーとして出力
                throw new InvalidPluginExecutionException(mytext);
            }
        }
    }
}

7. コンパイルします。無事コンパイルできたら開発は完了です。

プラグインの展開 (完全信頼)

1. Visual Studio 2010 を新たに起動します。プロジェクトを開くメニューより、
sdk\tools\pluginregistration 内の PluginRegistrationTool ソリューションを開いてください。

2. プロジェクトを開いたら、ビルドメニューより、ソリューションのビルドを実行してください。

3. ビルドが完了したら、F5 キーを押下して、プログラムを実行します。

4. 起動した画面から、 Create New Connection をクリックします。
image

5. Connection Information が画面左下に開きます。 設置型 Dynmics CRM 2011 の
URL と システム管理者権限のあるユーザー情報を入力して、Connect をクリックします。
image

6. 画面左上に組織の一覧が出ます。検証で使いたい組織をダブルクリックします。

7. 画面右側に組織の詳細が出ます。Register メニューより Register New Assembly を
クリックします。
image

8. ファイルとして先ほど開発した LocalResourcePlugin.dll を指定します。

9. Isolation Mode (分離モード) を None に、配置先を DB にして
登録を行います。

image

10. Register Selected をクリックします。

11. 右画面に詳細が出ますので、登録したアセンブリを展開して、
新しいステップをクリックします。

image

12. 取引先企業の作成メッセージにプラグインを登録します。以下のように設定を
して、Register New Step をクリックします。

image

これで展開は完了です。

サンプルテキストの設置

このサンプルでは、C:\Program Files\Microsoft Dynamics CRM\CRMWeb\ISV\
sample.txt を読み取りますので、ISV フォルダ配下に同名のファイルを 1 つ作成します。
今回は中身に 「sample text」 を入力しておきました。

動作確認

では動作を確認してみます。

1. Internet Explorer で Dynamics CRM 2011 に接続します。

2. ワークプレース | 取引先企業より、新規にレコードを作成します。

3. 保存を押したタイミングでテキストファイルの中身を表示するエラーが
出力されれば成功です。

image

プラグインの更新 (部分信頼)

では展開済みのプラグインを部分信頼に変更してみます。

1. Plugin Registration Tool の画面に戻ります。

2. 登録したアセンブリを右クリックして、Update をクリックします。

image

3. Isolation Mode (分離モード) を Sandboxに変更して、
Update Selected Plugins をクリックします。

image

動作確認

では再度動作を確認してみます。

1. Internet Explorer で Dynamics CRM 2011 に接続します。

2. ワークプレース | 取引先企業より、新規にレコードを作成します。

3. 前回とは根本的に異なるエラーが表示されます。

image

これは部分信頼によってアクセスが制限されたためです。

まとめ

サンドボックスサービスを利用することで、ソースコードやセキュリティ
設定を変えることなく、サーバーローカルのリソースアクセスを保護する
ことができました。

SDK には 「ファイル システム、システム イベント ログ、特定のネットワーク プロトコル、
レジストリなどへのアクセスは、サンドボックス内では禁止されています。ただし、
サンドボックス プラグインは、Windows Azure クラウドなどの外部エンドポイント
にはアクセスできます。」

と記述がありますので、次回は外部のエンドポイントに接続するサンプルを
紹介します。

- Dynamics CRM サポート 中村 憲一郎