ハイライト
Apple のデバイス管理チームの Cyrus Daboo が、2022 年の宣言型デバイス管理の拡張について包括的に説明します。 昨年の WWDC 21 で iOS のみのユーザー登録のサポートとして初めて導入されましたが、今年はすべての MDM 登録タイプ、すべてのプラットフォーム (iOS、macOS、tvOS) に拡張され、ステータス レポートと述語システムが大幅に強化されました。
主要内容
デバイスのポーリングに使用されるモバイル デバイス管理 (MDM) サーバー。
典型的な例はパスワード ポリシーです。サーバーは最初にパスワード ポリシーを発行し、次にデバイスに継続的にクエリを実行し、ユーザーがパスワードを準拠した状態に変更するのを待ちます。次のポーリングでコンプライアンスが確認された後でのみ、サーバーは Wi-Fi や VPN などの機密性の高い構成を発行します。
Declarative Device Management は、このビジネス ロジックをデバイスに配置します。デバイスは自身のステータスに基づいてアクティベーション条件を再計算し、変更を積極的に報告し、サーバーはより軽量なリアクティブ システムになります。 (00:37)
WWDC22 のアップデートは、プラットフォームと登録タイプの対象範囲の拡大、ステータス レポート項目の追加、述語システムの強化の 3 つに焦点を当てています。 (03:46)
詳細
対象範囲がすべての MDM プラットフォームに拡大
(04:02) 宣言型デバイス管理が WWDC21 で最初に開始されたとき、それは iOS のユーザー登録のみをサポートしていました。 2022 年には、MDM でサポートされるすべての登録タイプ (自動デバイス登録、プロファイル ベースの登録、プロファイルとアカウント ベースのユーザー登録) に拡張されます。
Shared iPad、macOS Ventura、tvOS 16 にも導入されます。オペレーティング システムがサポートしている限り、同じ宣言とステータス モデルのセットを iOS、macOS、tvOS で使用できます。
macOS と共有 iPad にはそれぞれデバイス チャネルとユーザー チャネルがあります。チャネルで宣言型管理を使用するには、サーバーはDeclarativeManagement注文。ステータス レポートもチャネルごとに個別に生成されるため、サーバーはそれらを個別に監視する必要があります。
macOS / Shared iPad
├─ device channel -> send DeclarativeManagement -> monitor device status report
└─ user channel -> send DeclarativeManagement -> monitor user status report
キーポイント:
device channelデバイスレベルのステータスを管理します。 -user channel特定のユーザーのステータスを管理します。 -DeclarativeManagementチャネルごとに個別に有効にします。- ステータス レポートもチャネルごとに個別に生成され、いずれか 1 つだけを監視することはできません。
パスワードのステータスにより、Wi-Fi 設定を自動的にアクティブ化できます
(07:41) このセッションでは、パスワードに関連する 2 つのステータス項目が追加されます。passcode.is-compliantそしてpasscode.is-present。これらは、従来の MDM クエリで取得できるパスワードのステータスに対応するブール値です。
{
"management": {
"client-capabilities": {
"supported-payloads": {
"status-items": [
"passcode.is-compliant",
"passcode.is-present"
]
}
}
}
}
キーポイント:
management.client-capabilitiesデバイスがサポートする宣言機能を説明します。 -supported-payloads.status-items購読できるステータス項目をリストします。 -passcode.is-compliant現在のパスワードが、MDM プロファイルまたは構成によって発行されたすべてのパスワード ポリシーに準拠しているかどうかを示します。 -passcode.is-presentデバイスがすでにパスワードを持っているかどうかを示します。
(08:05) Apple が提供するシナリオは、安全なネットワーク構成です。サーバーは強力なパスワード ポリシーと Wi-Fi 構成を同時に送信し、Wi-Fi 構成を依存関係にバインドできます。passcode.is-compliant活性化述語。
通常、最初はパスワードがまだ準拠しておらず、述語が false であり、Wi-Fi はアクティブになりません。ユーザーがパスワードを変更すると、デバイスはアクティベーションを再計算し、述語が true になり、Wi-Fi が自動的にアクティベートされます。このプロセスはサーバー側のポーリングを必要とせず、デバイスが一時的にオフラインの場合でも完了できます。
send passcode policy configuration
send Wi-Fi configuration with activation predicate
if passcode.is-compliant == false:
keep Wi-Fi inactive
when user updates passcode:
reevaluate activation predicates
activate Wi-Fi configuration
send status report to server
キーポイント:
- これは概念的なプロセスであり、セッションでは完全な Wi-Fi 宣言 JSON が提供されません。
- サーバーはパスワード ポリシーと Wi-Fi 設定を一度に配信します。
- デバイスは、パスワード状態の変更をリッスンし、述語を再計算する責任があります。
- サーバーは、ステータス レポートを通じて、構成がいつアクティブ化されるかを認識します。
アカウントのステータスは配列を使用して段階的に報告されます
(10:52) アカウント ステータスに 8 つの新しいステータス項目が追加されました。これには、CalDAV、CardDAV、Exchange、Google、LDAP、受信メール、送信メール、購読カレンダーが含まれます。
{
"status-items": [
"account.list.caldav",
"account.list.carddav",
"account.list.exchange",
"account.list.google",
"account.list.ldap",
"account.list.mail.incoming",
"account.list.mail.outgoing",
"account.list.subscribed-calendar"
]
}
キーポイント:
account.list.*構成によってインストールされたアカウントのみがレポートされます。- 手動で作成したアカウントは、これらのステータスには表示されません。
- MDM プロファイル経由でインストールされたアカウントもここには表示されません。
- 受信メールと送信メールは別々にレポートされます。
(11:19) 各アカウント ステータス項目は、アカウント タイプに対応する JSON オブジェクトを返します。identifier配列オブジェクト内の一意の識別子です。declaration-identifierインストールアカウントに対応する構成識別子。
{
"identifier": "592D763E-C15B-44F8-A1FC-F88EB1901646",
"declaration-identifier": "BF8FD199-467B-4BA5-886D-D82B7849E517",
"hostname": "mail.example.com",
"port": 443,
"username": "user01",
"is-mail-enabled": true,
"are-notes-enabled": false
}
{
"identifier": "592D763E-C15B-44F8-A1FC-F88EB1901646",
"declaration-identifier": "BF8FD199-467B-4BA5-886D-D82B7849E517",
"calendar-url": "https://holidays.example.com/country/US.ics",
"username": "user01",
"is-enabled": true
}
キーポイント:
identifier同じ状態配列内のオブジェクトを見つけるために使用されます。 -declaration-identifierサーバーに状態オブジェクトをインストール アカウントの構成に関連付けさせます。 -hostname、port、is-mail-enabled、are-notes-enabledメールアカウントステータスのフィールドです。 -calendar-url、is-enabled購読済みカレンダー状態のフィールドです。- サーバーは、将来のシステム バージョンで追加される可能性のある不明なキーを受け入れる必要があります。
(12:11) 配列値はオブジェクト単位で報告されます。初めて購読するとき、デバイスは完全なアカウント リストを送信します。アカウントを追加するときは、新しいオブジェクトのみが報告されます。アカウントのステータスが変化すると、変更されたオブジェクトのみが報告されます。アカウントが削除されると、レポートは次のようになります。removed: true物体。
{
"identifier": "592D763E-C15B-44F8-A1FC-F88EB1901646",
"removed": true
}
キーポイント:
identifierサーバー上の既存のオブジェクトと一致します。 -removed: trueサーバーがローカルに保存されたオブジェクトの状態を削除する必要があることを示します。- 増分レポートにより、サーバーとデバイス間で送信されるステータスのサイズが削減されます。
- デバイスは、パフォーマンスの問題を回避するために、最大約 1 分間の状態変化を集約します。
MDM アプリのステータスにより、インストールの進行状況のポーリングが不要になります
(17:13) MDM サーバーは、アプリが正常にインストールされたかどうか、およびアプリがユーザーによって削除されたかどうかを知る必要があることがよくあります。過去には機能していましたInstalledApplicationListまたはManagedApplicationListこのコマンドはデバイスをポーリングします。新しいmdm.appステータス項目を使用すると、デバイスは MDM によってインストールされたアプリのステータスを積極的に報告できます。
{
"management": {
"client-capabilities": {
"supported-payloads": {
"status-items": [
"mdm.app"
]
}
}
}
}
キーポイント:
mdm.app配列ステータス項目です。- 各配列オブジェクトは、MDM サーバーによってインストールされたアプリを表します。
- 監視対象デバイスであっても、MDM によってインストールされたアプリのみを報告します。
- 配列オブジェクトは、以前のアカウント ステータスと同じルールに従って増分レポートされます。
(17:35) アプリステータスレポートでは、identifierはバンドル識別子、state現在のインストール段階を示します。
{
"StatusItems": {
"mdm": {
"app": [
{
"identifier": "com.apple.Pages",
"name": "Pages",
"version": "7358.0.134",
"short-version": "12.0",
"external-version-id": "844362702",
"state": "managed"
}
]
}
},
"Errors": []
}
キーポイント:
StatusItems.mdm.appMDM アプリのステータス配列です。 -identifierこの状態でアプリのバンドル識別子を使用します。 -nameはアプリ名です。 -version、short-version、external-version-id対応するManagedApplicationList応答内のバージョン情報。 -stateセッションで説明されているように、インストール段階を示します。prompting、installing、managed、managed-but-uninstalled。Errors空の配列は、ステータス レポートにエラーがないことを示します。
(18:18) インストールプロセス中、ユーザーがデバイスを登録するには、アプリをインストールするためのユーザーの承認が必要です。機器を最初に報告できますprompting、ユーザーがクリックしてインストールした後に報告されますinstalling、インストール完了後のレポートmanaged。ユーザーがアプリを手動で削除すると、デバイスは報告します。managed-but-uninstalled。サーバーは送信できるようになりますRemoveApplication内部的に維持されている管理ステータスを削除します。
述語は配列ステータス項目をクエリできます
(20:40) アクティベーション述語は NSPredicate 文字列を使用します。 WWDC22 で追加された新しい構文では、ステータス項目名が次のようになります。@status(...)、古い構文は引き続き互換性がありますが、非推奨としてマークされています。
(22:15) ステータス項目が配列の場合、次を使用できます。SUBQUERY条件に一致する要素を検索します。次の例では、バンドル識別子がデバイス上に存在するかどうかを確認します。com.example.appそしてステータスはmanagedMDM アプリ。
SUBQUERY(@status(mdm.app),
$app,
($app.@key(identifier) == "com.example.app") AND ($app.@key(state) == "managed")
).@count == 1
キーポイント:
@status(mdm.app)引用mdm.appステータス配列。 -$appはいSUBQUERY配列を反復処理するときに使用される変数。 -$app.@key(identifier)配列オブジェクトからの読み取りidentifierkey。$app.@key(state)配列オブジェクトからの読み取りstatekey。.@count == 1条件を満たすオブジェクトが 1 つだけ見つかったことを示します。- 配列オブジェクト内のキーにアクセスするときに使用されます
@keyextension term。
管理プロパティ サーバー ロジックをデバイス プロパティに変換します
(24:10) サーバーは述語計算を直接制御する必要がある場合があります。たとえば、学校では、低学年または高学年の Wi-Fi、IT 管理者用の共有メールボックス、運動コーチ用のカレンダーなど、教師の役割ごとに構成を配布しています。従来の MDM では、多くの場合、デバイスが教師に割り当てられた後、プロファイルを 1 つずつインストールまたは削除する必要があります。
WWDC22 新規com.apple.management.properties宣言。サーバーはカスタム JSON プロパティをデバイスに書き込み、アクティブ化述語にこれらのプロパティを読み取らせることができます。
{
"management": {
"client-capabilities": {
"supported-payloads": {
"declarations": {
"management": [
"com.apple.management.properties"
]
}
}
}
}
}
キーポイント:
supported-payloads.declarations.managementデバイスでサポートされている管理宣言タイプをリストします。 -com.apple.management.propertiesこれは、このセッションに新しく追加された宣言タイプです。- これにより、サーバーは述語によって読み取れる任意の JSON プロパティを設定できるようになります。
(24:40) 管理プロパティの宣言Payloadサーバー側で定義されたJSONオブジェクトです。値には、文字列、数値、配列、またはオブジェクトを使用できます。
{
"Type": "com.apple.management.properties",
"Identifier": "AAE09D73-6EF6-4F3B-9E15-11B0F86D5591",
"ServerToken": "AB4C5B91-3E08-4D4E-A9FF-1E44FE5BFDD4",
"Payload": {
"name": "Student One",
"age": 7,
"roles": ["grade1", "spanish"]
}
}
キーポイント:
Type宣言タイプを指定します。 -Identifierこの宣言の識別子です。 -ServerTokenサーバーが送信するバージョンを識別するために使用されます。 -Payload.name、Payload.age、Payload.rolesすべてはサーバーによって定義されます。- 複数の管理プロパティ宣言が同時に存在できますが、キーは一意のままである必要があります。キーが重複すると、述語の値が予測不能になります。
(24:53) アクティベーション述語が使用されます@property(...)これらのプロパティを読んでください。
{
"Type": "com.apple.activation.simple",
"Identifier": "076F928B-9D8E-4BA2-AD34-5655805C82D7",
"ServerToken": "4FFA91BF-85AE-4053-B8FE-B1C3E507A9CB",
"Payload": {
"StandardConfigurations": [
"3BBB4407-238A-44B1-ABB1-5E7AB95160E0"
]
},
"Predicate": "(@property(age) >= 18) AND (\"Grade12\" IN @property(roles))"
}
キーポイント:
Typeこれが単純なアクティベーションであることを示します。 -Payload.StandardConfigurationsアクティブ化する構成を指します。 -Predicate管理プロパティを読み取ります。 -@property(age) >= 18診るage財産。 -"Grade12" IN @property(roles)診るroles指定されたロールが配列に含まれているかどうか。
(27:24) 学校のシナリオでのアプローチは、まず完全な宣言をデバイスにプリセットすることです。デバイスが教師に割り当てられた日に、サーバーは教師の役割を含む管理プロパティ宣言のみを送信します。デバイスはアクティベーションを再計算し、対応する Wi-Fi、メールボックス、またはカレンダーの構成を自動的に有効にします。
before assignment:
preload Wi-Fi, mail, calendar declarations
predicates are false on unassigned devices
on assignment day:
send one management properties declaration with teacher roles
reevaluate activations on device
activate matching configurations
when role changes:
update one management properties declaration
reevaluate activations again
キーポイント:
- これはセッションによって記述されたプロセスの概要であり、新しいプロトコル API ではありません。
- 事前ロード宣言により、ピーク時にプロファイルを 1 つずつ配信するプレッシャーが軽減されます。
- 役割が変更された場合、サーバーは属性宣言を更新するだけで済みます。
- 複雑なサーバー ロジックが、デバイス上の単純な状態変化に凝縮されています。
重要ポイント
1. パスワードコンプライアンス主導のネットワーク構成の切り替えを行う
- 対処方法: 企業の Wi-Fi または VPN 構成をパスワード コンプライアンス状態に関連付けます。
- *なぜそれを行う価値があるのか: セッションを明確に説明
passcode.is-compliantアクティブ化述語をトリガーして、サーバーのポーリングを回避できます。 - 開始方法: 購読する
passcode.is-compliant、ステータスに応じて機密ネットワーク構成をアクティブ化し、構成がアクティブ化された後のステータス レポートを観察します。
2. アカウントのインストールステータスパネルを作成する
- 作業内容: MDM コンソールの構成によってインストールされたメール、カレンダー、LDAP、Exchange、およびその他のアカウントのステータスを表示します。
- 実行する価値がある理由: アカウント ステータス オブジェクトには、
declaration-identifierを使用すると、サーバーはステータスを配信された構成に直接関連付けることができます。 - 開始方法: 購読する
account.list.mail.incoming、account.list.mail.outgoing、account.list.subscribed-calendarステータス項目を待って、 を押しますidentifier増分レポートを統合します。
3. アプリのインストール進行フローを作成する
- 対処方法: アプリのインストールプロセスを次のように表示します。
prompting、installing、managed、managed-but-uninstalledステータスの変化を待ちます。 - 実行する価値がある理由:
mdm.appMDM によってインストールされたアプリのステータスをデバイスが積極的に報告して、InstalledApplicationListまたはManagedApplicationList投票。 - 開始方法: 宣言型管理を有効にしてサブスクライブします
mdm.app、バンドル識別子を使用して配列オブジェクトをマージし、stateコンソールの状態にマップします。
4. 役割に基づいた学校設備の割り当てプロセスを作成する
- 手順: 構成をプリロードし、教師の役割属性を使用して、対応する Wi-Fi、メールボックス、カレンダーをアクティブにします。
- 実行する価値がある理由:
com.apple.management.propertiesサーバーの役割のロジックは、デバイス上で述語入力に変換できるため、学校の初日などのピーク時のシナリオに適しています。 - 開始方法: ユニークなデザインを作成します。
roles属性キー、使用@property(roles)アクティブ化述語を記述し、デバイスを割り当てるときに管理プロパティの宣言のみを更新します。
5. ステータス配列の増分シンクロナイザーを作成する
- やるべきこと: アカウント ステータスと MDM アプリ ステータスの共通配列オブジェクト マージ ロジックを実装します。
- 実行する価値がある理由: セッション記述配列の値はオブジェクトごとに増分的にレポートされ、新規追加、更新、削除はすべてオブジェクトによって異なります。
identifier。 - 開始方法: から始めます
identifierインデックスを構築します。不明な識別子を受信した場合に挿入します。既知の識別子を受信したときに更新します。受け取るremoved: trueいつ削除します。
関連セッション
- 宣言的デバイス管理の紹介 - WWDC21 では、宣言的デバイス管理のデータ モデル、ステートメント、ステータス、およびアクティブなデバイス管理のアイデアが初めて導入されます。
- Apple デバイス管理の新機能 - WWDC22 デバイス管理の概要。Apple Configurator、アイデンティティ テクノロジ、MDM プロトコルの更新について説明します。
- Explore Apple Business Essentials - 中小企業向けのデバイス管理、サポート、クラウド ストレージ、コレクション、アプリ、設定ワークフローについて説明します。
コメント
GitHub Issues · utterances