Appendix: Apple Silicon System Configuration
A node’s configuration parameters.
Overview
The darwin-init process implements a policy to limit which configuration it will apply in customer security mode. The policy summaries on this page are for reference and illustration; the authoritative policy is the one darwin-init implements.
Policy implementation
darwin-init implements configuration policy using Rego, a policy language from the Open Policy Agent (OPA) project. Rego enables darwin-init to express validation rules as declarative statements rather than procedural code.
When applying a configuration, darwin-init loads the policy bundle from /usr/share/misc/darwin-init_validator_bundle and evaluates the configuration against the rule set for the configured security mode. The node’s attestation covers these rules, because the bundle’s path is part of the immutable Signed System Volume.
Validation flow
When darwin-init receives a configuration, it follows this validation process:
Parses the JSON configuration into a Swift struct representation to be applied if validation succeeds.
Serializes the Swift struct back to JSON and passes it to the embedded OPA engine to evaluate the JSON against the policy loaded for the current security mode.
Parses the validation result from the OPA engine and logs any policy violations.
If validation fails, darwin-init rejects the entire configuration array and takes its failure action, rebooting the node or exiting. darwin-init initiates entry into Restricted Execution Mode (REM) only as its last step, after it applies every configuration, so a node whose configuration fails validation stays outside REM. Its attestation reports that state, and Node validation rejects the node. A rejected configuration still leaves a record in that attestation: darwin-init registers the merged secure-config parameters with secureconfigd before it validates, so their values are sealed into the Configuration Seal Register.
Validation fails if a configuration violates any of the following policies.
Top-level keys
For the top-level keys, darwin-init prohibits any configuration that is not in accordance with the policy described:
Top-Level Key | Policy |
|---|---|
| Allow Apple’s internal Certificate Authority to be trusted. |
| Allow cryptexes to be installed. |
| Allow firewall rules to be installed at boot. |
| Setting CFPrefs is allowed only for the application IDs listed below. |
|
|
| Private logs must be redacted by setting |
| Logging to disk and snapshots must be disabled by setting |
| Allow any setting. |
| Allow any setting. |
| Allow configuring hostname. |
| Allow emitting boot performance data. |
| Allow any setting. |
| Enabling ssh daemon not permitted. Must be unset or |
| Enabling ssh password authentication not permitted. Must be unset or |
| System reboot after setup not permitted. Must be unset or |
| Opting out of userspace-reboot into rem not permitted. Must be |
| Enabling diagnostic log submission not permitted. Must be unset or |
| Disabling cryptex lockdown not permitted. Must be |
| Allow configuring bandwidth used for cryptex downloads. |
| See table below for policy. |
| Allow any setting. |
| Retaining cryptexes from previous boot session configs not permitted. Must be unset or |
| Allow any setting. |
| Creating and configuring users not permitted. |
| Applying custom network configuration not permitted. |
| Executing pre-init scripts not permitted. Must be unset. |
| Installing roots with |
| Diavlo server configuration not permitted. Must be unset. |
| Installing packages not permitted. Must be unset. |
| Applying custom tailspin configuration not permitted. Must be unset. |
| Declaring Softwarefoundations for persistent per-workload storage is permitted. |
| Setting maximum storage space for cryptex cache not permitted. Must be unset. |
Secure config keys
The customer policy enforces the following restrictions on secure-config keys:
Key | Required Value | Purpose |
|---|---|---|
|
| Redacts unique information from crash reports generated on the node. |
|
| Enforces aggressive filtering of the unified logging store (see |
|
| Enables only a limited subset of metrics from the node. |
|
| File-system path to the log policy directory. |
| Unset or | Relaxes validation of PCC infrastructure external to the node, for example certificates of the PCC Gateway. |
| Unset or | Relaxes validation of external inputs in TIE, for example prompt template enforcement. |
| Unset or | Relaxes validation of internal request options in TIE. |
| Valid format if set | Specifies allowed cryptex app identifiers. Values must be non-empty strings consisting of alphanumeric characters, periods, and hyphens. |
| Any value | Indicates the workload class this node serves. Clients pass the matching hint as routing metadata to reach a node of that class rather than a specific node. Included in attestation. |
| Any value | Indicates other members of the ensemble. Included in attestation. |
|
| Enforces that non-proxy PCC nodes cannot make requests to other PCC nodes. |
The customerProxy policy enforces the same policies as the customer policy, with the following exception:
Key | Required Value | Purpose |
|---|---|---|
|
| Allows a PCC proxy node to transitively attest and trust other PCC nodes. Enforces the use of dedicated proxy node attestations to establish Transitivetrust. |
CFPrefs domains
The customer and customerProxy policies allow setting preferences in the following CFPrefs domains:
Domain | Purpose |
|---|---|
com.apple.acdc.cloudmetricsd | Configures the |
com.apple.acsi.cloudusagetrackingd | Specifies a project identifier associated with the node for inclusion in |
com.apple.cloudos | Provides general cloud extensions configuration. |
com.apple.cloudos.AppleComputeEnsembler | Defines ensemble properties, such as hostname and identifier for each node. |
com.apple.cloudos.cb_attestationd | Configures the |
com.apple.cloudos.cloudconfigurationd | Configures the |
com.apple.cloudos.cb_jobauthd | Configures the |
com.apple.cloudos.cb_jobhelper | Configures the |
com.apple.cloudos.cloudOSInfo | Configures the CloudOSInfo framework used to obtain node OS version and release specifications. |
com.apple.cloudos.cloudboardd | Configures the |
com.apple.cloudos.CloudBoardNullApp | Configures the |
com.apple.cloudos.NullCloudController | Configures the |
com.apple.cloudos.hotproperties.cb_attestationd | Configures |
com.apple.cloudos.hotproperties.cb_jobhelper | Configures |
com.apple.cloudos.hotproperties.cloudboardd | Configures |
com.apple.cloudos.hotproperties.splunkloggingd | Configures |
com.apple.cloudos.hotproperties.test | Configures tests for the hot properties service. |
com.apple.cloudos.hotproperties.tie | Configures |
com.apple.prcos.splunkloggingd | Configures the |
com.apple.privateCloudCompute | Specifications for the |
com.apple.thimble.inference.tie-controllerd | Configures |