1.0 Introduction
This article describes the steps to create collaborating groups in Fortanix Confidential Computing Manager (CCM) for Advanced Micro Devices (AMD) Secure Encrypted Virtualization (SEV) - Secure Nested Paging (SNP) and run the application on AMD SEV-SNP.
A Collaborating Group in Fortanix CCM represents a collaboration established between two groups that belong to different Fortanix CCM accounts. Through this collaboration, the participating groups can securely share selected resources and work together on common workflows.
This document explains the end-to-end collaboration process, including creating collaborating groups, sharing collaboration tokens, building shared workflows, approving workflows, and managing collaboration lifecycle events.

Figure 1: Collaborating groups and shared workflows
2.0 Collaborating Groups for AMD SEV Applications
A Fortanix CCM collaborating group is created when groups from different Fortanix CCM accounts establish a collaboration. Through this collaboration, the groups can share resources and participate together in workflows.
In a collaborating setup:
One group acts as the consumer group and initiates the collaboration.
One group acts as the publisher group and participates by contributing permitted resources.
The collaboration is represented and managed through shared workflows, which enforce controlled interaction, approval sequencing, and access restrictions between participating groups.
This article describes collaboration between two Fortanix CCM groups from different Fortanix CCM accounts using a workflow that includes an AMD SEV-SNP application. In this example, one group acts as the consumer group and another group acts as the publisher group.
3.0 Create Consumer Group (Enterprise)
This section describes how to create a consumer group that participates in a workflow collaboration with a publisher group.
A Consumer Group is created by an enterprise that wants to run a proprietary model on-premises.
In this example, a consumer group is created in a Fortanix CCM account and initiates collaboration with a publisher group using a shared workflow. The consumer group adds an AMD SEV-ANP placeholder application to the workflow, enabling the publisher group to contribute the application to the shared workflow.
Perform the following steps to create a consumer group for workflow-based collaboration:
Log in to Fortanix CCM and create a new account, for example, DemoA, or log in to an existing account. For more information on how to log in and create a new Fortanix CCM account, refer to Logging In.
In the CCM user interface (UI) left navigation panel, click the Groups menu item, and on the Groups page, click + ADD GROUP to create the consumer group or use an existing group.

Figure 2: Create consumer group
On the GROUP form, do the following:
Name: Enter a name for the group. For example, DemoA-Group1.
Description (optional): Enter a short description for the group.
Labels (optional): Add one or more key–value labels to the group.
Click SAVE to create the consumer group.

Figure 3: Consumer group created
4.0 Create Publisher Group (Model Owner)
This section describes how to create a publisher group that participates in workflow collaboration with a consumer group.
A Publisher Group is established by the model owner to securely share their application (proprietary model) with enterprises without disclosing the model, model weights, or other configurations.
In this example, a publisher group is created in a different Fortanix CCM account and contributes the application to a shared workflow initiated by the consumer group.
NOTE
To collaborate with resources in the consumer group, you must create an additional group in a different Fortanix CCM account, as collaboration between groups within the same account is not supported.
Create a new Fortanix CCM account, for example DemoB, or log in to an existing account if it already exists. For steps to log in and create a new Fortanix CCM account, refer to Logging In
Repeat Steps 2 to 4 in Section 3.0: Create Consumer Group (Enterprise), to create a new publisher group, for example DemoB-Group2 or use an existing group.

Figure 4: Create publisher group
4.1 Create Application
Perform the following steps to create an application:
Click the group to open the detailed view of the consumer group.
Create a new ACI application in the consumer group to participate in the workflow collaboration. From the group’s details page, go to the APPLICATIONS tab.
On the Applications page, click + ADD APPLICATION to add a new application.
.png?sv=2022-11-02&spr=https&st=2026-03-13T22%3A20%3A29Z&se=2026-03-13T22%3A43%3A29Z&sr=c&sp=r&sig=1tbzyG1E1OSSU98BV%2BFeXdoNycARGiZ7UtrRD%2B2DXTc%3D)
Figure 5: Publisher create app
On the APPLICATION dialog box, select AMD SEV-SNP, and then click PROCEED.

Figure 6: Select application
For more information on how to create an AMD SEV-SNP application, refer to Add and Edit an Application.
For more information on how to create an AMD SEV-SNP application image, refer to Create an Image.
4.2 Create Application Configuration
Once the application image is created, create an application configuration to associate the image with a group and enable its participation in the workflow.
Perform the following steps to create application configuration:
Go to the CONFIGURATION tab and then click + ADD CONFIGURATION to add a new configuration.

Figure 7: Add app configuration
In the APPLICATION CONFIGURATION dialog box, do the following:
Select Add new configuration.
Image: Select the application image for which the configuration will be created.
Configuration name: Enter a name for the configuration.
Group: Select the required group from the drop down menu to associate the configuration with that group. For example, DemoB-Group2.
Description (optional): Enter a description for the configuration.
Ports: Keep this field empty.
Labels: Add any meaningful key value pair to identify your application configuration.
Configuration items: Keep this field empty.

Figure 8: Application configuration form
Click SAVE to save the configuration.
The application configuration is created successfully.

Figure 9: App configuration added
5.0 Generate Collaboration Token
To initiate collaboration, a consumer group must authenticate itself to a publisher group. Without authentication, a publisher group could receive unsolicited or spam collaboration requests from another consumer group. To prevent this, the publisher group administrator generates a “collaboration token”, which serves as proof of identity for collaboration requests.
When a consumer group requests collaboration, it includes the collaboration token provided by the publisher group in the request. The publisher group then verifies the token and authenticates the consumer group before allowing the collaboration to proceed.
Perform the following steps to generate the collaboration token:
Go to the detailed view of DemoB-Group2 in the DemoB account.
Click COLLABORATE to generate a new collaboration token.

Figure 10: Collaborate
On the COLLABORATE dialog box, click + GENERATE to generate the token.

Figure 11: Generate token
Click COPY to copy the collaboration token.
You must share this collaboration token with the consumer group administrator to enable collaboration. The method used to share the collaboration token is outside the scope of this guide.

Figure 12: Copy collaboration token
Click SHOW TOKENS to view the previously generated tokens.

Figure 13: View token
6.0 Create Collaborating Group
This section explains the collaboration process between the consumer group and the publisher group using the collaboration token shared by the publisher group.
Perform the following steps to create a collaborating group for workflow collaboration:
Open the detailed view of the consumer group, for example DemoA-Group1, in the DemoA account.
Click ACCEPT TOKEN.

Figure 14: Share group
In the ACCEPT TOKEN dialog box, paste the collaboration token shared by the publisher group in Section 5.0: Generate Collaboration Token.
Click PROCEED to initiate the collaboration request.

Figure 15: Enter collaborating token
Navigate to Groups and select the COLLABORATION GROUPS tab.
On the CONSUMER tab, verify that the consumer group DemoA-Group1 appears associated with the publisher group DemoB-Group2.

Figure 16: Publisher group association
In the Status column, observe that the collaboration request is in the Pending state.
NOTE
The publisher group must accept the collaboration request before collaboration can begin.
Go to the publisher group (DemoB-Group2) and select the COLLABORATION GROUPS tab.
On the PUBLISHER tab, verify that DemoB-Group2 shows an association request from DemoA-Group1.

Figure 17: Publisher group association
Click the overflow menu
for the publisher group row and click ACCEPT to approve the collaboration request.
Figure 18: Approve collaboration
Verify that the collaboration status updates to Accepted in the publisher group view.

Figure 19: Status accepted
Return to the consumer group account (DemoA) and confirm that the collaboration status for the consumer group (DemoA-Group1) also shows Accepted.

Figure 20: Status accepted
7.0 Create Shared Workflow
After creating the collaborating groups, the consumer group administrator initiates collaboration by creating a shared workflow.
In the shared workflow, the consumer group administrator creates a placeholder node. The placeholder node is assigned to the publisher group, and only administrators of that publisher group can populate the placeholder nodes assigned to them.
Perform the following steps as a consumer group administrator to create a shared workflow:
In the DemoA account, click the Workflows menu item in the CCM UI left navigation panel.
On the Workflows page, click + ADD WORKFLOW to create a new workflow.

Figure 21: Select workflow
In the WORKFLOW form, do the following:
Name: Enter a name for the workflow.
Group: Select the consumer group for the shared workflow. If you do not select a group, Fortanix CCM uses the default group.
Click SAVE to create the shared workflow.

Figure 22: Create shared workflow
Add the application placeholder node to the workflow and assign it to the publisher group, DemoB-Group2.

Figure 23: Add placeholder node
.png?sv=2022-11-02&spr=https&st=2026-03-13T22%3A20%3A29Z&se=2026-03-13T22%3A43%3A29Z&sr=c&sp=r&sig=1tbzyG1E1OSSU98BV%2BFeXdoNycARGiZ7UtrRD%2B2DXTc%3D)
Figure 24: Assign application to publisher group

Figure 25: Add application to workflow graph
Click SAVE AS DRAFT to save the workflow.
Saving the workflow as a draft makes it available to the publisher group, allowing the administrator of the assigned publisher group to access the draft workflow in its respective account and populate the placeholder node assigned to it.
7.1 Fill the Placeholder Nodes with Actual Data
After the consumer group creates the shared workflow and assigns placeholder nodes, members of the publisher groups populate the placeholder nodes with their own resources.
Each publisher group can update only the placeholder node assigned to its group. Publisher group administrators cannot add, remove, or modify other nodes in the workflow.
Perform the following steps as a publisher group administrator:
Log in to the DemoB account and click the Workflows menu item in the Fortanix CCM left navigation panel.
On the Workflows page, click the Draft menu item. The draft shared workflow created by the consumer group appears in the list.
Select the workflow and locate the placeholder node assigned to the publisher group DemoB-Group2.

Figure 26: Fill placeholder nodes with data
Click the placeholder node to add the application.
In the APPLICATION form, select the AMD SEV-SNP application image that was automatically created in Section 4.1: Create Application.
Figure 27: Select dataset – publisher group
Click SAVE DRAFT to save the updated shared workflow.

Figure 28: Save draft - publisher group
After the publisher group populates its assigned placeholder node, the shared workflow is complete and ready for approval.
7.2 Request Approval to Create Approved Workflow
After the publisher group fills its assigned placeholder nodes, the shared workflow is ready for approval.
The publisher group must review and approve the workflow before the consumer group can complete the approval process.
NOTE
The consumer group cannot approve the workflow until the publisher group approves it. This ensures that the publisher group explicitly consents to the sharing of data.
Perform the following steps to request and approve the shared workflow:
Log in to the DemoA account as a consumer group administrator.
In the Fortanix CCM left navigation panel, click the Workflows menu item.
Click the Draft menu item and select the shared workflow for which you want to request approval.
Click SAVE AND REQUEST APPROVAL to send the approval request to all the publisher groups.

Figure 29: Request shared workflow approval – consumer group
A confirmation dialog appears. Click REQUEST APPROVAL to submit the approval request to the publisher groups.

Figure 30: Confirm action
The workflow moves to the Pending state.
Go to the Pending tab to view workflows awaiting approval.

Figure 31: Pending approval – consumer group
Log in to the DemoB account as a publisher group administrator. Navigate to the Workflows menu item and click the Pending menu item.
Select the shared workflow from the list and click VIEW REQUEST for the shared workflow.

Figure 32: Approve the workflow – publisher group
In the APPROVAL REQUEST FOR CREATING WORKFLOW dialog box, click APPROVE.

Figure 33: Approve workflow – publisher group
After the publisher group approves the workflow, log in to the DemoA account as the consumer group administrator and approve the workflow to complete the approval process.

Figure 34: Approve request – consumer group

Figure 35: Approve workflow - consumer group
The workflow now appears in the Approved tab.

Figure 36: Workflow approved - consumer group
NOTE
After a shared workflow reaches the Approved state, it cannot be modified. To make changes, edit the workflow to create a new version using the EDIT WORKFLOW option. After approval, the new version replaces the previous one.
7.3 Run the Shared Workflow
Only the consumer group administrator, who owns the workflow, can run a shared workflow.
The members of the publisher groups cannot run the workflow.
Perform the following steps to run the workflow:
Click the workflow application and copy the Runtime configuration hash from the APPLICATION dialog box. This value is used for
APPCONFIG_IDparameter.
Figure 37: App config ID
Extract the VM image files:
Modify the following
launch_cvm.shscript, and add theAPPCONFIG_IDvalue copied in Step 1.NOTE
Ensure that the
launch_cvm.shscript has all the required variables# before running - (IMAGE, KERNEL, BIOS, MANAGER_ENDPOINT, JOIN_TOKEN, ALT_NAMES_ARR, # CPU_TYPE and NUM_CPUS). If above parameters are not populated in the script then # this is standard template generated without any input parameters. In this case please # fill in these parameters and run the script. ( set -x modprobe kvm modprobe vfio-pci # Model provider's artifacts locations and configurations - These are measured artifacts # .qcow2 file IMAGE="cvm-image-latest.qcow2" # .efi file KERNEL="cvm-image-latest.efi" # OVMF.fd file BIOS="OVMF.amdsev.fd" # NVIDIA IT's configuration # Other config parameters CPU_TYPE=EPYC-v4 NUM_CPUS=2 ALT_NAMES="fortanix.com" APPCONFIG_ID="9b3f89c28ba7be6fccde70e7a37b97ae73c7cccab955ebbee9261a3991bc0b62" #Hardware Settings NVIDIA_GPU=45:00.0 MEM=16 #in GBs FWDPORT=9899 doecho=true docc=true dogpu=true while getopts "nexp:" flag do case ${flag} in n) dogpu=false;; e) doecho=true;; x) docc=false;; p) FWDPORT=${OPTARG};; esac done NVIDIA_GPU=$(lspci -d 10de: | awk '/NVIDIA/{print $1}') NVIDIA_PASSTHROUGH=$(lspci -n -s $NVIDIA_GPU | awk -F: '{print $4}' | awk '{print $1}') if [ "$doecho" = true ]; then echo 10de $NVIDIA_PASSTHROUGH > /sys/bus/pci/drivers/vfio-pci/new_id fi if [ "$docc" = true ]; then USE_HCC=true fi if [ "$dogpu" = true ]; then USE_GPU=true fi qemu-system-x86_64 \ -machine memory-encryption=sev0,vmport=off \ -object memory-backend-memfd,id=ram1,size=16G,share=true,prealloc=false -machine memory-backend=ram1 \ -object sev-snp-guest,id=sev0,cbitpos=51,reduced-phys-bits=1,kernel-hashes=on \ -enable-kvm -nographic -no-reboot \ -cpu ${CPU_TYPE} -machine q35 -smp ${NUM_CPUS},maxcpus=31 -m ${MEM}G,slots=2,maxmem=512G \ -bios ${BIOS} \ -drive file=${IMAGE},if=virtio,id=disk0,format=qcow2,readonly=on \ -kernel ${KERNEL} \ -device virtio-net-pci,disable-legacy=on,iommu_platform=true,netdev=vmnic,romfile= \ -netdev user,id=vmnic,hostfwd=tcp::2223-:22,hostfwd=tcp::80-:8000 \ -object iommufd,id=iommufd0 \ -device pcie-root-port,id=pci.1,bus=pcie.0 \ -device vfio-pci,host=${NVIDIA_GPU},bus=pci.1,iommufd=iommufd0,romfile= \ -fw_cfg name=opt/ovmf/X-PciMmio64Mb,string=262144 \ -fw_cfg name=opt/com.fortanix/app_cert_alt_names,string=${ALT_NAMES} \ -fw_cfg name=opt/com.fortanix/appconfig_id,string=${APPCONFIG_ID} \ -device vhost-vsock-pci,id=vhost-vsock-pci0,guest-cid=8 )Run the following command to launch the VM:
sudo ./launch_cvm.shThis will start the AMD SEV-SNP application and trigger the Fortanix Attestation Client.
The Publisher (Model Owner) navigates to the application details view to confirm that:
The image is deployed in Fortanix CCM.
.png?sv=2022-11-02&spr=https&st=2026-03-13T22%3A20%3A29Z&se=2026-03-13T22%3A43%3A29Z&sr=c&sp=r&sig=1tbzyG1E1OSSU98BV%2BFeXdoNycARGiZ7UtrRD%2B2DXTc%3D)
Figure 38: Image deployed
The audit log contains a successful
REQUEST_APP_CERTIFICATEevent, indicating that the application certificate was generated.
Figure 39: Audit logs for Publisher
The Consumer (Enterprise) can view audit logs for a successful application certificate event.

Figure 40: Audit logs for consumer
NOTE
The audit logs are available in the log tool configured by the Publisher and Consumer.
8.0 Manage Tokens
8.1 Revoke Token
A collaboration token can be revoked by a publisher group administrator.
Revoking a collaborating token does not affect existing active collaborations between the publisher group and consumer group that were established using that token. Any existing shared workflows continue to function as expected.

Figure 40: Revoke token
8.2 Revoke Status
Perform the following steps to revoke a collaboration between a consumer group and a publisher group:
Navigate to the COLLABORATION GROUPS page.
Locate the collaboration entry you want to revoke.
Click the overflow menu for the corresponding row and select REVOKE from the drop down menu to revoke the collaboration.
You can revoke the collaboration from either the consumer group or the publisher group.
After you revoke the collaboration, the shared workflow cannot progress, and collaboration between the groups stops.

Figure 41: Revoke collaboration status