宣言された構成リソース へのアクセス
Windows 宣言構成 (WinDC) リソース アクセスは、デバイス構成を管理し、デバイスが望ましい状態を維持するようにポリシーを適用するために使用されます。 組織のセキュリティ、コンプライアンス、運用効率を維持するために重要です。 WinDC クラウド サービスは、リソースの目的の状態をデバイスに送信するために使用されます。これに対応して、デバイスはリソース構成状態を強制および維持する責任があります。
構成サービス プロバイダー (CSP) は 、リソース アクセスを構成するための重要な役割を果たし、デバイスと WinDC プロトコルの間のインターフェイスとして機能します。 これらは、構成のデプロイと適用に対して一貫した標準化されたアプローチを提供します。 CSP は、次のようなさまざまなリソース アクセス シナリオをサポートします。
- VPNv2 CSP と VPN CSP
- Wi-Fi CSP
- ClientCertificateInstall CSP
- ActiveSync CSP
- WiredNetwork CSP
- RootCACertificates CSP
デバイス上の WinDC スタックは、構成要求を処理し、必要な状態を維持します。これは RA にとって重要です。 効果的な RA には、構成要求の効率、正確性、および適用が不可欠です。 リソース アクセスは WinDC とシームレスに統合され、スケーラビリティと効率が向上し、クラウドを介してデバイスを管理するための拡張メソッドが提供されます。
- 効率: バッチ ベースの処理により、サーバー リソースの使用量を最小限に抑え、待機時間を短縮します。
- 精度: WinDC クライアント スタックは、デバイスの構成領域を理解し、継続的な更新の効果的な処理を可能にします。 これにより、クラウド サービスによって通信される構成変更の正確な実行が保証されます。
- ポリシーの適用: デバイス間で組織のポリシーを一貫して大規模に適用および維持し、コンプライアンスと均一な構成を確保します。 この側面により、組織はデバイス間で目的のセキュリティ体制を維持できます。
リソース アクセスのガイドライン
これらのガイドラインは、開発者とテスト担当者がリソース アクセス (RA) 構成を安全で効率的で一貫性のある方法で実装するためのベスト プラクティスと例を提供します。 ポリシーとコンプライアンス要件に準拠しながら、ネットワーク セキュリティを強化し、エンド ユーザーのリソース アクセスを最適化することを目指しています。
- 構成の整合性: 中断なく安全なリソース アクセスをサポートするには、デバイスとユーザー間で一貫性のある構成を確保します。
- 状態の検証: 構成の状態を監視して、リソース アクセス設定の正しいアプリケーションを確認します。
- プロファイル管理: リソースへのアクセスを制御し、セキュリティを維持するために、必要に応じて追加、更新、削除することで、ユーザー プロファイルを効果的に管理します。
- ログと監査: 操作と変更にログと監査証跡を利用して、トラブルシューティングとコンプライアンスを支援します。
- ドリフト検出と修復: RA ポリシーへの準拠を維持するには、ドリフト (構成または動作の変更) を継続的に監視し、是正措置を講じます。
- セキュリティとプライバシー: ユーザーのデータとリソースを保護するには、構成に強力なセキュリティとプライバシー対策を実装します。
これらのガイドラインに従い、 DeclaredConfiguration CSP の構文を理解することで、セキュリティとコンプライアンスを維持しながら、RA 構成を効果的に実装および管理できます。
WinDC ドキュメント
DeclaredConfiguration CSP のDocument
リーフ ノードの値は、要求を記述する XML ドキュメントです。 リソース アクセス用に指定された構成データを含む WinDC ドキュメントの例を次に示します。
<DeclaredConfiguration context="user" schema="1.0" id="DCA000B5-397D-40A1-AABF-40B25078A7F9" osdefinedscenario="MSFTVPN" checksum="A0">
<CSP name="./Vendor/MSFT/VPNv2">
<URI path="Test_SonicWall/TrafficFilterList/0/Protocol" type="int">2</URI>
<URI path="Test_SonicWall/TrafficFilterList/0/Direction" type="chr">outbound</URI>
</CSP>
</DeclaredConfiguration>
osdefinedscenario
でサポートされている値のみを使用できます。 サポートされていない値を指定すると、 Invalid scenario name
のようなエラー メッセージが表示されます。
osdefinedscenario | を使用することをお勧めします |
---|---|
MSFTWiredNetwork | WiredNetwork |
MSFTResource | ActiveSync |
MSFTVPN | VPN と VPNv2 |
MSFTWifi | Wifi |
MSFTInventory | 証明書インベントリ |
MSFTClientCertificateInstall | SCEP、PFX、一括テンプレート データ |
これらの osdefinedscenario
値には、次のタグと属性が必要です。
<CSP>
XML タグは、対象となる CSP について説明します。このタグには、次の属性があります。
属性 説明 name
ターゲット CSP OMA-URI を指定します。 <URI>
XML タグは、CSP 設定ノードと目的の値を指定します。このタグには、次の属性があります。
属性 説明 path
パスの設定 type
データ型の設定
注
シナリオ設定のターゲットは、WinDC コンテキストと一致する必要があります。
<LocURI>
コンテキストと WinDC コンテキストで定義されている CSP スコープは、どちらもDevice
またはUser
である必要があります。
osdefinedscenario の例
Wifi の部分的な
MSFTWifi
の例:<DeclaredConfiguration context="Device" schema="1.0" id="10249228-e719-58bf-b459-060de45240f1" osdefinedscenario="MSFTWifi" checksum="11111111"> <CSP name="./Vendor/MSFT/WiFi">
ActiveSync の部分的な
MSFTResource
例:<DeclaredConfiguration context="User" schema="1.0" id="33333333-1861-4131-96e8-44444444" osdefinedscenario="MSFTResource" checksum="5555"> <CSP name="./Vendor/MSFT/ActiveSync">
SyncML の例
標準の OMA-DM SyncML 構文は、 置換、 追加、削除などの DeclaredConfiguration CSP 操作を指定するために使用 されます。 SyncML の <Data>
要素のペイロードは XML エンコードされている必要があります。 この XML エンコードには、さまざまなオンライン エンコーダーを使用できます。 ペイロードのエンコードを回避するには、次の SyncML の例に示すように CDATA セクション を使用します。
リソース アクセス用に VPNv2 プロファイルを構成する
この例では、VPNv2 CSP を使用して、ユーザー スコープ内のデバイスで Test_SonicWall という名前の VPN プロファイルを構成する方法を示します。
<SyncML xmlns="SYNCML:SYNCML1.1">
<SyncBody>
<Replace>
<CmdID>2</CmdID>
<Item>
<Meta>
<Format>chr</Format>
<Type>text/plain</Type>
</Meta>
<Target>
<LocURI>./User/Vendor/MSFT/DeclaredConfiguration/Host/Complete/Documents/DCA000B5-397D-40A1-AABF-40B25078A7F9/Document</LocURI>
</Target>
<Data><![CDATA[<?xml version="1.0" encoding="utf-8"?>
<DeclaredConfiguration context="user" schema="1.0" id="DCA000B5-397D-40A1-AABF-40B25078A7F9" osdefinedscenario="MSFTVPN" checksum="A0">
<CSP name="./Vendor/MSFT/VPNv2">
<URI path="Test_SonicWall/TrafficFilterList/0/Protocol" type="int">2</URI>
<URI path="Test_SonicWall/TrafficFilterList/0/Direction" type="chr">outbound</URI>
<URI path="Test_SonicWall/TrafficFilterList/1/Protocol" type="int">6</URI>
<URI path="Test_SonicWall/TrafficFilterList/1/LocalPortRanges" type="chr">43-54</URI>
<URI path="Test_SonicWall/TrafficFilterList/1/RemotePortRanges" type="chr">243-456</URI>
<URI path="Test_SonicWall/TrafficFilterList/1/Direction" type="chr">outbound</URI>
<URI path="Test_SonicWall/EdpModeId" type="chr">wip.contoso.com</URI>
<URI path="Test_SonicWall/RememberCredentials" type="bool">true</URI>
<URI path="Test_SonicWall/AlwaysOn" type="bool">true</URI>
<URI path="Test_SonicWall/Proxy/AutoConfigUrl" type="chr">https://auto.proxy.com</URI>
<URI path="Test_SonicWall/DeviceCompliance/Enabled" type="bool">true</URI>
<URI path="Test_SonicWall/DeviceCompliance/Sso/Enabled" type="bool">false</URI>
<URI path="Test_SonicWall/PluginProfile/ServerUrlList" type="chr">23.54.3.6;server1,vpn.contoso.com;server2</URI>
<URI path="Test_SonicWall/PluginProfile/CustomConfiguration" type="chr"><custom></custom></URI>
<URI path="Test_SonicWall/PluginProfile/PluginPackageFamilyName" type="chr">SonicWALL.MobileConnect_e5kpm93dbe93j</URI>
</CSP>
</DeclaredConfiguration>
]]></Data>
</Item>
</Replace>
<Final />
</SyncBody>
</SyncML>
リソース アクセスのための VPNv2 プロファイルの更新
この例では、同じ WinDC ドキュメント ID を使用し、新しい checksum("A3") を使用する方法を示します。
Test_SonicwallNew
という名前の新しい VPNv2 プロファイルをインストールし、古いプロファイルを削除します。
<SyncML xmlns="SYNCML:SYNCML1.1">
<SyncBody>
<Replace>
<CmdID>2</CmdID>
<Item>
<Meta>
<Format>chr</Format>
<Type>text/plain</Type>
</Meta>
<Target>
<LocURI>./User/Vendor/MSFT/DeclaredConfiguration/Host/Complete/Documents/DCA000B5-397D-40A1-AABF-40B25078A7F9/Document</LocURI>
</Target>
<Data><![CDATA[<?xml version="1.0" encoding="utf-8"?>
<DeclaredConfiguration context="user" schema="1.0" id="DCA000B5-397D-40A1-AABF-40B25078A7F9" osdefinedscenario="MSFTVPN" checksum="A3">
<CSP name="./Vendor/MSFT/VPNv2">
<URI path="Test_SonicWallNew/TrafficFilterList/0/Protocol" type="int">2</URI>
<URI path="Test_SonicWallNew/TrafficFilterList/0/Direction" type="chr">outbound</URI>
<URI path="Test_SonicWallNew/EdpModeId" type="chr">wip.contoso.com</URI>
<URI path="Test_SonicWallNew/RememberCredentials" type="bool">true</URI>
<URI path="Test_SonicWallNew/AlwaysOn" type="bool">false</URI>
<URI path="Test_SonicWallNew/Proxy/AutoConfigUrl" type="chr">https://auto.proxy.com</URI>
<URI path="Test_SonicWallNew/DeviceCompliance/Enabled" type="bool">true</URI>
<URI path="Test_SonicWallNew/DeviceCompliance/Sso/Enabled" type="bool">false</URI>
<URI path="Test_SonicWallNew/PluginProfile/ServerUrlList" type="chr">23.54.3.8;server1,vpn2.contoso.com;server2</URI>
<URI path="Test_SonicWallNew/PluginProfile/PluginPackageFamilyName" type="chr">SonicWALL.MobileConnect_e5kpm93dbe93j</URI>
</CSP>
</DeclaredConfiguration>
]]></Data>
</Item>
</Replace>
<Final />
</SyncBody>
</SyncML>
VPNv2 プロファイルの取得
この例では、 <Get>
を使用して WinDC 要求の結果を取得する方法を示します。
<?xml version="1.0" encoding="utf-8"?>
<SyncML xmlns="SYNCML:SYNCML1.1">
<SyncBody>
<Get>
<CmdID>1</CmdID>
<Item>
<Meta>
<Format>chr</Format>
<Type>text/plain</Type>
</Meta>
<Target>
<LocURI>./User/Vendor/MSFT/DeclaredConfiguration/Host/Complete/Results/DCA000B5-397D-40A1-AABF-40B25078A7F9/Document</LocURI>
</Target>
</Item>
</Get>
<Final />
</SyncBody>
</SyncML>
応答:
<SyncML xmlns:msft="http://schemas.microsoft.com/MobileDevice/MDM">
<SyncHdr />
<SyncBody>
<Status>
<CmdID>1</CmdID>
<MsgRef>1</MsgRef>
<CmdRef>0</CmdRef>
<Cmd>SyncHdr</Cmd>
<Data>200</Data>
</Status>
<Status>
<CmdID>2</CmdID>
<MsgRef>1</MsgRef>
<CmdRef>2</CmdRef>
<Cmd>Get</Cmd>
<Data>200</Data>
</Status>
<Results>
<CmdID>3</CmdID>
<MsgRef>1</MsgRef>
<CmdRef>2</CmdRef>
<Item>
<Source>
<LocURI>./User/Vendor/MSFT/DeclaredConfiguration/Host/BulkTemplate/Results/DCA000B5-397D-40A1-AABF-40B25078A7F9/Document</LocURI>
</Source>
<Data><DeclaredConfigurationResult context="user" schema="1.0" id="DCA000B5-397D-40A1-AABF-40B25078A7F9" osdefinedscenario="MSFTVPN" checksum="A3" result_checksum="9D2ED497C12D2FCEE1C45158D1F7ED8E2DACE210A0B8197A305417882991C978" result_timestamp="2024-08-06T13:54:38Z" operation="Set" state="60"><CSP name="./Vendor/MSFT/VPNv2" state="60"><URI path="Test_SonicWallNew/TrafficFilterList/0/Protocol" status="200" state="60" type="int" /><URI path="Test_SonicWallNew/TrafficFilterList/0/Direction" status="200" state="60" type="chr" /><URI path="Test_SonicWallNew/EdpModeId" status="200" state="60" type="chr" /><URI path="Test_SonicWallNew/RememberCredentials" status="200" state="60" type="bool" /><URI path="Test_SonicWallNew/AlwaysOn" status="200" state="60" type="bool" /><URI path="Test_SonicWallNew/Proxy/AutoConfigUrl" status="200" state="60" type="chr" /><URI path="Test_SonicWallNew/DeviceCompliance/Enabled" status="200" state="60" type="bool" /><URI path="Test_SonicWallNew/DeviceCompliance/Sso/Enabled" status="200" state="60" type="bool" /><URI path="Test_SonicWallNew/PluginProfile/ServerUrlList" status="200" state="60" type="chr" /><URI path="Test_SonicWallNew/PluginProfile/PluginPackageFamilyName" status="200" state="60" type="chr" /></CSP></DeclaredConfigurationResult></Data>
</Item>
</Results>
<Final />
</SyncBody>
</SyncML>
ヒント
状態の値を理解するには、「 WinDC の状態」を参照してください。
VPNv2 プロファイルの削除
この例では、 <Delete>
を使用して構成要求を削除して VPNv2 プロファイルを設定する方法を示します。
<?xml version="1.0" encoding="utf-8"?>
<SyncML xmlns="SYNCML:SYNCML1.1">
<SyncBody>
<Delete>
<CmdID>1</CmdID>
<Item>
<Meta>
<Format>chr</Format>
<Type>text/plain</Type>
</Meta>
<Target>
<LocURI>./User/Vendor/MSFT/DeclaredConfiguration/Host/Complete/Documents/DCA000B5-397D-40A1-AABF-40B25078A7F9/Document</LocURI>
</Target>
</Item>
</Delete>
<Final />
</SyncBody>
</SyncML>
リソースの所有権
VPN プロファイルなどの MDM で管理されるリソースは、WinDC ドキュメントが同じリソースのデバイスに送信されるときに、WinDC 管理に転送または移行されます。 このリソースは、WinDC ドキュメントが 削除 または破棄されるまで、WinDC 管理 の下にとどまります。 それ以外の場合、MDM が SyncML を使用してレガシ MDM チャネル経由で同じリソースを管理しようとすると、エラー 0x86000031で失敗します。
MDM ConfigurationManager: Command failure status. Configuraton Source ID: (29c383c5-6e2d-43bf-a741-c63cb7516bb4), Enrollment Type: (MDMDeviceWithAAD), CSP Name: (ActiveSync), Command Type: (Add: from Replace or Add), CSP URI: (./User/Vendor/MSFT/ActiveSync/Accounts/{3b8b9d4d-a24e-4c6d-a460-034d0bfb9316}), Result: (Unknown Win32 Error code: 0x86000031).
一括テンプレート データ
一括テンプレート データ シナリオは、通常の ClientCertificateInstall CSP を超えて拡張されます。 特殊な一括テンプレート ドキュメントの種類を使用します。 このセクションでは、一括テンプレート データを使用した構造、仕様、結果について説明します。
テンプレート ドキュメント
PFXImport テンプレート ドキュメントには、証明書を一括でインポートするために必要な構造が含まれています。 ドキュメントでは、必要なフィールドと、一括インポートに必要な形式を定義する必要があります。
- ドキュメントの種類は
BulkTemplate
する必要があります。 - URI パスは、
@#pfxThumbprint#
構文を使用して通常の URI とは異なり、動的ノードであることを宣言します。 動的ノードのインスタンス データは、後でBulkVariables
を使用して送信されます。 各動的ノードには、この例の@#pfxBlob#
ノードや#@pfxPassword#
ノードなどの動的サブノードが含まれる場合があります。
<?xml version="1.0" encoding="utf-8"?>
<SyncML xmlns="SYNCML:SYNCML1.1">
<SyncBody>
<Replace>
<CmdID>2</CmdID>
<Item>
<Meta>
<Format>chr</Format>
<Type>text/plain</Type>
</Meta>
<Target>
<LocURI>./Device/Vendor/MSFT/DeclaredConfiguration/Host/BulkTemplate/Documents/47e88660-1861-4131-96e8-f32e85011e55/Document</LocURI>
</Target>
<Data><![CDATA[<?xml version="1.0" encoding="utf-8"?>
<DeclaredConfiguration context="Device" schema="1.0" id="47e88660-1861-4131-96e8-f32e85011e55" osdefinedscenario="MSFTResource" checksum="FF356C2C71F6A41F9AB4A601AD00C8B5BC7531576233010B13A221A9FE1BE7A0">
<ReflectedProperties>
<Property name="foo" type="chr">foovalue</Property>
<Property name="bar" type="chr">barvalue</Property>
</ReflectedProperties>
<CSP name="./Vendor/MSFT/ClientCertificateInstall">
<URI path="PFXCertInstall/@#pfxThumbprint#/KeyLocation" type="Int">2</URI>
<URI path="PFXCertInstall/@#pfxThumbprint#/PFXCertBlob" type="chr">@#pfxBlob#</URI>
<URI path="PFXCertInstall/@#pfxThumbprint#/PFXCertPassword" type="chr">@#pfxPassword#</URI>
<URI path="PFXCertInstall/@#pfxThumbprint#/PFXKeyExportable" type="bool">True</URI>
<URI path="PFXCertInstall/@#pfxThumbprint#/PfxCertPasswordEncryptionType" type="int">0</URI>
<URI path="PFXCertInstall/@#pfxThumbprint#/PfxCertPasswordEncryptionStore" type="chr">SomeValue</URI>
<URI path="PFXCertInstall/@#pfxThumbprint#/ContainerName" type="chr"></URI>
</CSP>
</DeclaredConfiguration>
]]></Data>
</Item>
</Replace>
<Final />
</SyncBody>
</SyncML>
テンプレート データ
一括テンプレート データは、BulkTemplate
のBulkVariables
URI を使用して base64 でエンコードされた形式でインポートする証明書を指定します。 テンプレート データ ドキュメントには、複数のインスタンスを含めることができます。 各インスタンスでは、すべてのサブインスタンス データを指定する必要があります。
この例では、2 つのインスタンスがあります。 各インスタンスは、 pfxThumbprint、**pfxBlob、および pfxPassword の値を定義します。
<?xml version="1.0" encoding="utf-8"?>
<SyncML xmlns="SYNCML:SYNCML1.1">
<SyncBody>
<Replace>
<CmdID>3</CmdID>
<Item>
<Meta>
<Format>chr</Format>
<Type>text/plain</Type>
</Meta>
<Target>
<LocURI>./Device/Vendor/MSFT/DeclaredConfiguration/Host/BulkTemplate/Documents/47e88660-1861-4131-96e8-f32e85011e55/BulkVariables/Value</LocURI>
</Target>
<Data><![CDATA[
<InstanceBlob schema="1.0">
<Instance>
<InstanceData variable="pfxThumbprint">813A171D7341E1DA90D4A01878DD5328D3519006</InstanceData>
<InstanceData variable="pfxBlob">pfxbase64BlobValue1</InstanceData>
<InstanceData variable="pfxPassword">Password1</InstanceData>
</Instance>
<Instance>
<InstanceData variable="pfxThumbprint">813A171D7341E1DA90D4A01878DD5328D3519007</InstanceData>
<InstanceData variable="pfxBlob">pfxbase64BlobValue2</InstanceData>
<InstanceData variable="pfxPassword">Password2</InstanceData>
</Instance>
</InstanceBlob>
]]></Data>
</Item>
</Replace>
<Final />
</SyncBody>
</SyncML>
テンプレートの結果
一括テンプレート データ ドキュメントが正常に処理されると、指定された証明書が、指定されたパスワードとキーの場所を使用して定義されたストアにインポートされます。
- 正常なインポート: 証明書は、デバイスの証明書ストアに正しくインポートされます。
- エラー処理: インポート プロセス中に発生したエラーには、関連する状態コードやトラブルシューティングのためのメッセージが含まれます。
要求:
<?xml version="1.0" encoding="utf-8"?>
<SyncML xmlns="SYNCML:SYNCML1.1">
<SyncBody>
<Get>
<CmdID>2</CmdID>
<Item>
<Meta>
<Format>chr</Format>
<Type>text/plain</Type>
</Meta>
<Target>
<LocURI>./Device/Vendor/MSFT/DeclaredConfiguration/Host/BulkTemplate/Results/47e88660-1861-4131-96e8-f32e85011e55/Document</LocURI>
</Target>
</Item>
</Get>
<Final />
</SyncBody>
</SyncML>
応答:
<SyncML xmlns:msft="http://schemas.microsoft.com/MobileDevice/MDM">
<SyncHdr />
<SyncBody>
<Status>
<CmdID>1</CmdID>
<MsgRef>1</MsgRef>
<CmdRef>0</CmdRef>
<Cmd>SyncHdr</Cmd>
<Data>200</Data>
</Status>
<Status>
<CmdID>2</CmdID>
<MsgRef>1</MsgRef>
<CmdRef>2</CmdRef>
<Cmd>Get</Cmd>
<Data>200</Data>
</Status>
<Results>
<CmdID>3</CmdID>
<MsgRef>1</MsgRef>
<CmdRef>2</CmdRef>
<Item>
<Source>
<LocURI>./Device/Vendor/MSFT/DeclaredConfiguration/Host/BulkTemplate/Results/47e88660-1861-4131-96e8-f32e85011e55/Document</LocURI>
</Source>
<Data><DeclaredConfigurationResult context="Device" schema="1.0" id="47e88660-1861-4131-96e8-f32e85011e55" osdefinedscenario="MSFTResource" checksum="FF356C2C71F6A41F9AB4A601AD00C8B5BC7531576233010B13A221A9FE1BE7A0" result_checksum="DD8C1C422D50A410C2949BA5F495C2C42CC4B0C7B498D1B43318C503F6CEF491" result_timestamp="2024-08-06T13:26:23Z" operation="Set" state="60">
<CSP name="./Vendor/MSFT/ClientCertificateInstall" state="60">
<URI path="PFXCertInstall/813A171D7341E1DA90D4A01878DD5328D3519006/KeyLocation" status="200" state="60" type="int" />
<URI path="PFXCertInstall/813A171D7341E1DA90D4A01878DD5328D3519006/PFXCertBlob" status="200" state="60" type="chr" />
<URI path="PFXCertInstall/813A171D7341E1DA90D4A01878DD5328D3519006/PFXCertPassword" status="200" state="60" type="chr" />
<URI path="PFXCertInstall/813A171D7341E1DA90D4A01878DD5328D3519006/PFXKeyExportable" status="200" state="60" type="bool" />
</CSP><CSP name="./Vendor/MSFT/ClientCertificateInstall" state="60">
<URI path="PFXCertInstall/CertPFX1/KeyLocation" status="200" state="60" type="int" />
<URI path="PFXCertInstall/CertPFX1/PFXCertBlob" status="200" state="60" type="chr" />
<URI path="PFXCertInstall/CertPFX1/PFXCertPassword" status="200" state="60" type="chr" />
<URI path="PFXCertInstall/CertPFX1/PFXKeyExportable" status="200" state="60" type="bool" />
</CSP>
</DeclaredConfigurationResult>
</Data>
</Item>
</Results>
<Final />
</SyncBody>
</SyncML>