Table of Contents
Projects
A Project is the top-level organizational unit in ZEDEDA Cloud. Every asset you create — edge nodes, app instances, network instances, volumes, images, datastores, and policies — belongs to exactly one project. Projects define access control scope, policy inheritance, and the boundary for zero-touch deployments. When an edge node checks in, it receives configuration based on its assigned project.
Each project belongs to a single enterprise. An enterprise starts with one default empty project, and you can create as many additional projects as your segmentation requires.
Project Types
| Type | Profile | Purpose |
|---|---|---|
| Deployment | Regular only | Current recommended type. Uses Zero-Touch Deployments (ZTD) with tag-based policy and app matching. All new projects should use this type. |
| Legacy | Regular | Original project type, still supported. Policies and apps auto-apply to all nodes without tag matching. |
| Legacy | Azure | Integrates with Azure IoT Hub. Supports Azure DPS enrollment (symmetric key or TPM), module policies, and Device CA certificate generation. |
Project Status
| Status | Meaning |
|---|---|
| Active (purple) | Project is ready to use; all required policies are configured. |
| Inactive (yellow) | Project is not ready; a required policy is missing or misconfigured. |
| Initialized (dark blue) | Project created but no policy has been added yet. |
| Archived (grey) | Not currently used. |
| Unknown (light grey) | Status cannot be determined. |
| Error (red) | Not currently used. |
The project's status rolls up from the status of its attached policies. If any policy is broken or incomplete, the project goes Inactive.
Policies
Policies are the key mechanism by which a project controls what happens on every edge node assigned to it. When a node joins a project, all active policies in that project are automatically applied to that node. When a node is removed from a project, policies delivered by that project are revoked.
Attestation Policy
Enforces remote attestation on every edge node in the project. When enabled:
- EVE-OS generates a PCR quote using the TPM at each attestation cycle
- The quote is sent to ZEDEDA Cloud, which compares PCR values against the registered baseline template for that node model
- If the values match, the controller releases the key to unseal the node's encrypted disk
- If the values do not match, the node is quarantined: apps are not started and config is withheld until the attestation issue is resolved
This uses measured boot (not secure boot). Measured boot records component state into TPM PCR registers for remote verification. It does not block unsigned code from running, but it does make tampering detectable.
To enable: check Enforce Edge Node Attestation in the project's Policies tab.
Network Instance Policy
Automatically deploys one or more network instances to every edge node in the project. This eliminates the need to manually create the same network instance on every node.
Use cases:
- Ensure all nodes in a factory project have the same local switch network wired up before any apps land
- Pre-provision a management VLAN network instance on every node at onboarding time
How it works: select one or more pre-defined network instances from the dropdown. When a new node is added to the project, EVE-OS receives the network instance config and creates the instance automatically.
Edge App Policy
Automatically deploys a specified app instance to every edge node in the project. When a new node is added, the app is deployed without any manual step.
Key behaviors:
- The app is created as an app instance on every existing node in the project immediately
- Any new node added to the project receives the app at its first heartbeat
- If a node is moved to a different project, the app instance deployed by this policy is deleted from that node
Use cases:
- Ensure every node in a project runs a monitoring agent, VPN client, or security scanner
- Auto-deploy a standard telemetry container to all nodes in a region project
EdgeView Policy
Controls remote access via the EdgeView feature. EdgeView lets operators open a terminal session to an edge node that is behind a firewall, without requiring a VPN.
Policy settings:
| Setting | Description |
|---|---|
| Allow EdgeView | Master on/off switch for the policy. |
| Max Session Duration (sec) | Maximum lifetime of a single EdgeView session (e.g., 2592000 = 30 days). |
| Max Concurrent Instances | Maximum number of simultaneous EdgeView sessions to any node in the project. |
| Allow Change | Whether operators can modify session parameters at runtime. |
| Dev Access | Allow terminal access to the EVE-OS host (device-level shell). |
| App Access | Allow terminal access into individual app containers/VMs on the node. |
| Ext Access | Allow external (non-ZEDEDA) users to join via JWT invitation. |
How it works:
- The policy is delivered to the node as part of the project config at next heartbeat
- To start a session, an operator requests a JWT token via ZEDEDA Cloud (time-limited, project-scoped)
- EVE-OS validates the JWT and opens an encrypted tunnel back to the ZEDEDA relay
- The operator connects using the EdgeView client container on their laptop
Note: The EdgeView policy must be enabled at the project level before any EdgeView session can be started on nodes in that project.
Device Policy (dev-policy)
A device-level policy delivered to all nodes in the project. Controls node-level behaviors including:
- Flow logs: enable/disable collection of application network flow records (source/destination IP, port, ACL rule matched, packet/byte counters) for network instances in the project
- Metric collection intervals: how frequently EVE-OS samples CPU, memory, disk, and network metrics
- Debug settings: verbose logging levels, coredump enablement
Flow logs are disabled by default. Enable at the project level when you need network traffic visibility for compliance, debugging, or traffic analysis.
Volume Instance Policy (vol-inst-config)
Available in Deployment type projects only. Automatically provisions a volume instance on every edge node in the project. Used to pre-stage persistent storage before apps land.
Defined as part of a project deployment (see Zero-Touch Deployments below).
Zero-Touch Deployments (ZTD)
ZTD is exclusive to Deployment type projects. It automates policy assignment and app instance deployment using a tag-matching system.
How It Works
- You define a deployment inside the project: a named, versioned bundle of policies and app configs
- Each deployment has one or more deployment tags (key:value pairs)
- Each edge node in the project also has tags
- ZEDEDA Cloud continuously matches node tags to deployment tags; matching nodes receive that deployment's config and apps automatically
- Changing a node's tags (or a deployment's tags) re-evaluates the match and applies or removes configs accordingly
This means you can:
- Maintain canary vs. production deployments: nodes tagged
env:canaryget one app version, nodes taggedenv:productionget another - Roll back by reactivating a previous deployment version (ZEDEDA retains up to 100 deployment versions per project)
- Migrate node groups between deployments simply by changing node tags
Deployment Contents
Each deployment version can include:
| Config | Purpose |
|---|---|
app-inst-config | Which app bundles to deploy and with what overrides |
net-inst-config | Which network instances to create on matching nodes |
vol-inst-config | Which volume instances to pre-create on matching nodes |
dev-policy-config | Device-level policy (flow logs, metrics, debug) |
edgeview-config | EdgeView policy for remote access |
ZCLI: Create a Deployment Project with ZTD
zcli project create MY_PROJECT \ --description="Workshop project" \ --project-type=deployment \ --deployment-name=MY_DEPLOYMENT-v1 \ --deployment-tag=env:production \ --app-inst-config=./app_config.json \ --net-inst-config=./net_config.json \ --vol-inst-config=./vol_config.json \ --dev-policy-config=./dev_policy.json \ --edgeview-config=./edgeview_policy.json
ZCLI: Update a Deployment
zcli project update-deployment MY_PROJECT \ --deployment-id=<deployment-id> \ --app-inst-config=./updated_app_config.json \ --deployment-tag=env:production
Enable Flow Logs via ZCLI
zcli project update MY_PROJECT --config=flowlogs:true
Flow log records include: source and destination IP, source and destination port, ACL rule applied, and packet and byte counters per flow.
Flow: ZEDUI to API to Edge Node
ZEDUI
- Navigate to Administration > Projects
- Click the + icon
- Details: enter Name, Title, Description; select Type (Deployment or Legacy) and Profile (Regular or Azure)
- Deployments (Deployment type only): define deployment name and tags
- Policies: configure Attestation, Network Instance Policy, Edge App Policy, EdgeView Policy, and Device Policy
- Review and click Add
The Name field is permanent and unique within the enterprise. The Title can be changed later. The Type and Profile cannot be changed after creation.
Terraform
resource "zedcloud_project" "workshop" {
name = "workshop-project"
title = "EVE-KVM Workshop Project"
description = "Workshop project for EVE-OS and EVE-KVM workflows"
type = "DEPLOYMENT"
# Attestation policy
attestation_policy {
enforce = true
}
# Edge App policy: auto-deploy a monitoring agent to all nodes
app_policy {
app_id = zedcloud_application.monitoring_agent.id
}
# EdgeView policy: allow dev and app access, 8-hour sessions
edge_view_policy {
edgeview_allow = true
max_expire_sec = 28800
max_instances = 3
dev = true
app = true
ext = false
}
tag {
key = "env"
value = "workshop"
}
}
API
POST /v1/projects
{
"name": "workshop-project",
"title": "EVE-KVM Workshop Project",
"type": "PROJECT_TYPE_DEPLOYMENT",
"attestationPolicy": {
"enforceAttestation": true
},
"appPolicy": {
"apps": [{ "id": "<app_bundle_id>" }]
},
"edgeviewPolicy": {
"edgeviewAllow": true,
"maxExpireSec": 28800,
"maxInstances": 3,
"dev": true,
"app": true
},
"tags": { "env": "workshop" }
}
What Happens on the Edge Node
- At the next heartbeat, EVE-OS receives the full project config bundle from the controller
- Attestation policy: EVE-OS begins the TPM-based PCR quote cycle; attestation results are reported back before apps are started
- Network Instance policy: EVE-OS creates the specified network instance(s) on the node (e.g., sets up a local switch bridge, wires it to the specified uplink port)
- Edge App policy: EVE-OS receives the app bundle reference and starts the download and deployment pipeline (INIT > DOWNLOAD > INSTALL > RUNNING)
- EdgeView policy: EVE-OS starts the EdgeView server-side container with the policy parameters; the node is now reachable via EdgeView sessions authenticated by JWT
- Device policy / flow logs: EVE-OS configures its network monitoring subsystem; flow records begin accumulating and are reported to the controller on schedule
Project Segmentation Patterns
| Pattern | Description | Example |
|---|---|---|
| By environment | Separate projects for dev, staging, prod | env:dev, env:prod tags on deployments |
| By geography | One project per region or site | region:us-east, site:plant-3 |
| By function | Separate projects for different workload types | type:inference, type:connectivity |
| By customer | MSP scenario: one project per tenant | Keeps edge nodes, apps, and data isolated per customer |
