セキュリティ ポリシーの管理の概要
重要 |
---|
.NET Framework Version 4 では、共通言語ランタイム (CLR: Common Language Runtime) がコンピューターにセキュリティ ポリシーを提供しなくなります。Microsoft では、CLR のセキュリティ ポリシーの代替として、Windows のソフトウェアの制限のポリシーを使用することをお勧めしています。このトピックの情報は、.NET Framework Version 3.5 以前に適用され、Version 4 以降には適用されません。この変更およびその他の変更の詳細については、「.NET Framework 4 におけるセキュリティの変更点」を参照してください。 |
.NET Framework セキュリティ システムは、セキュリティ ポリシーと呼ばれる、構成可能な一連の規則によって管理されます。 このポリシーの設定によって、コードからどのリソースにアクセスできるのか、最終的には、どのコードを実行できるのかが決定されますが、この設定はエンド ユーザーや管理者が調整できます。
たとえば、エンタープライズ レベルの設定の管理者が、ある特定の企業が発行するソフトウェアの信頼性を低いと判断したとします。 その企業のソフトウェアは従業員の興味を引くものかもしれませんが、ネットワーク トラフィックを増大させたり、ワークステーションを不安定にさせたりする要因を備えています。 そのような場合、管理者は、特定の暗号の厳密な名前 (プログラムの一意識別子) を持つそのソフトウェアから社内のコンピューター リソースへのアクセスを制限するような、エンタープライズ レベルのセキュリティ ポリシーを設定できます。 また、その発行元によるソフトウェアを実行できないようにするポリシーを設定することもできます。
ここでは、セキュリティ ポリシーの管理の概要について説明します。 追加情報については、「セキュリティ ポリシーの管理」を参照してください。
証拠、コード グループ、およびアクセス許可セット
共通言語ランタイムに対応するコードは、アセンブリと呼ばれる単位で配置されます。 共通言語ランタイムは、各アセンブリの読み込み時に、それらのアセンブリに関する情報 (コードの作成者のデジタル署名、コードの発生元の場所) を識別する証拠を調べます。 この証拠に基づいて、共通言語ランタイムのセキュリティ マネージャーは、セキュリティ ポリシーに基づくコード グループに各アセンブリを割り当てます。 コード グループは、特定の形式の証拠があるかどうかを確認するために定義されており、それぞれにアクセス許可セットが関連付けられています。 あるコード グループに属するアセンブリには、そのコード グループに関連付けられているアクセス許可セットによって定義されているアクセス許可が与えられます。 証拠、コード グループ、およびアクセス許可セットの詳細については、「セキュリティ ポリシー モデル」を参照してください。
アクセス許可
アクセス許可は、単に、保護されているリソースへのアクセス権を表すオブジェクトです。 アクセス許可は構成可能であり、1 つのアクセス許可オブジェクトで複数のアクセス形式を表すことができます。 たとえば、FileIOPermission は、ローカル ハード ディスク上のファイルに対するアクセス、作成、読み取り、書き込み、または変更を行う権利を表します。 アクセス許可が意味をなすためには、それ自体が表しているアクセスの種類について、固有の情報を含んでいる必要があります。 FileIOPermission を、特定のファイルの読み取り権、特定のファイルの読み書き権、またはディレクトリ内のすべてのファイルの読み取り権を表すように構成することもできます。 アクセス許可が表し、アセンブリに与えられる権利は、コンピューターの管理者が自由に構成できます。 アプリケーションでは、他のオブジェクトと同じようにアクセス許可オブジェクトを構築および構成できますが、そのアプリケーションにアクセス許可を与えることができるのはセキュリティ ポリシーだけです。 最終的には、管理者がアクセス許可を付与するかどうかを制御することになります。 一般的なアクセス許可の一覧については、「コード アクセス許可」を参照してください。
セキュリティ ポリシー レベル
セキュリティ モデルには、さまざまなホスト方法に対応して、4 つのレベルのセキュリティ ポリシーが定義されています。 各レベルの説明を次の表に示します。 エンタープライズ ポリシー レベルが最高レベルで、アプリケーション ドメイン レベルが最低レベルです。
ポリシー レベル |
説明 |
---|---|
エンタープライズ ポリシー |
エンタープライズ ドメインのポリシーを設定するエンタープライズ管理者によって定義されます。 |
マシン ポリシー |
特定のコンピューターのポリシーを設定するコンピューター管理者によって定義されます。 |
ユーザー ポリシー |
単一のログオン アカウントのポリシーを設定するユーザーによって定義されます。 |
アプリケーション ドメイン ポリシー |
読み込み時のポリシーを設定するために、ランタイム ホスト (共通言語ランタイムをホストする任意のアプリケーション) によって定義されます。 このレベルは管理できません。 |
各ポリシー レベルは、コード グループの階層構造で構成されています。 各ポリシー レベルの管理者は、それぞれ独自のコード グループと、それらのコード グループに関連付けられたアクセス許可セットを作成できます。 コード アクセス セキュリティ システムは、読み込み時にすべてのポリシー レベルを調べ、各レベルで許可されているアクセス許可セットの積集合であるアクセス許可セットを結果として付与します。 低いレベルのポリシーの管理者は、それよりも上のレベルで決定されたポリシーを緩めることはできませんが、必要に応じて、そのポリシーをより厳しくすることはできます。 既定のセキュリティ ポリシーは、マシン ポリシー レベルに設定されています。
既定のセキュリティ設定は次のとおりです。
ユーザー レベルおよびエンタープライズ レベルは無制限に設定されています。
マシン レベルには、固有のポリシーと制限が設定されています。
3 つのレベルで定義されている設定が、既定の設定を構成します。
ユーザー レベルとエンタープライズ レベルが無制限に設定されていても、アセンブリに無制限のアクセス許可が付与されるわけではありません。 マシン レベルに制限がいくつか定義されており、3 つのレベルをすべて合わせてアクセス許可が決定されるため、結果として与えられるアクセス許可が無制限になることはありません。 詳細については、「セキュリティ ポリシー モデル」を参照してください。
コード グループのアクセス許可セットへの割り当て
ポリシーの管理は、管理対象のポリシー レベルでコード グループをアクセス許可セットに割り当てることによって行います。
コード グループには、メンバーシップ条件、アクセス許可セットの関連付け、およびコード グループ属性が含まれています。 アセンブリが共通言語ランタイムに提示する証拠は、管理者がコード グループに対して指定したメンバーシップ条件と比較されます。 アセンブリが提示する証拠がメンバーシップ条件に一致した場合、そのアセンブリはそのコード グループに所属できるようになります。 管理者は、メンバーシップ条件を指定することによってアセンブリを識別して複数のコード グループに分類し、それらのコード グループにアクセス許可セットを割り当てます。 また、コード グループの属性を使用して、アクセス許可を割り当てるときに、現在のポリシーよりも下のレベルのポリシーは適用しないように、または現在のコード グループ以外のコード グループを考慮しないように指定することもできます。
メンバーシップ条件としては、次のような種類の組み込みの証拠を使用できます。
アプリケーションのインストール ディレクトリ
アセンブリの暗号ハッシュ
アセンブリ発行者のデジタル署名
アセンブリの発生元であるサイト
アセンブリの暗号の厳密な名前
アセンブリの発生元である URL
アセンブリの発生元であるゾーン
これらのメンバーシップ条件の任意の組み合わせに基づいて、アセンブリに割り当てるアクセス許可を増減できます。 カスタム メンバーシップ条件も作成できるため、上の一覧がすべてのメンバーシップ条件を示しているわけではありません。 詳細については、「証拠」を参照してください。