Create an Image

Prev Next

1.0 Introduction

This article describes the steps to create an application image in the Fortanix Confidential Computing Manager (CCM). The users are provided the ability to quickly and easily navigate the interface to run containerized applications accordingly.

A Fortanix CCM image is a particular software release or a version of an application. Each image is associated with one enclave hash (MRENCLAVE).

When an image is first created in Fortanix CCM, it is in an unapproved state. After configurable approval actions are taken, the image is considered approved. When an image is approved, Fortanix CCM knows that enclaves with the associated hash (MRENCLAVE) are trusted instances of the corresponding application, and will issue certs with the application’s domain name(s) to those enclaves.

2.0 Prerequisites

Ensure the following:

  • For Enclave OS (Operating System) applications - the Tag of the Docker image for the application.

  • For Enclave Development Platform (EDP) applications - the sigstruct.bin file which is used to register the enclave with Fortanix CCM.

  • For Azure Container Instances (ACI) applications - the Tag of the Docker image for the application.

  • For Azure Confidential Virtual Machine (CVM) applications - a Confidential VM is created in Azure, and the Fortanix attestation agent runs on it.

  • For Advanced Micro Devices (AMD) Secure Encrypted Virtualization (SEV) – Secure Nested Paging (SNP) applications – access to a system that supports AMD SEV-SNP and the required attestation measurements for the workload.

3.0 Create an Image

This section describes how to create an application image for different application types supported by Fortanix CCM.

An application image defines the trusted workload configuration that Fortanix CCM builds, verifies, and approves before deployment.

3.1 Enclave OS Applications

Before creating the image, ensure that you have created an Enclave OS application as mentioned in Add and Edit an Application.

Perform the following steps to create an image for the Enclave OS application:

  1. Navigate to the Applications menu item in the CCM UI left navigation panel and select the required Enclave OS application for which you want to configure an application image.

  2. On the following page, click + ADD IMAGE to configure the image of the Enclave OS application.

    Figure 1: Images tab for the selected Enclave OS application

  3. In the Image form, do the following:

    1. In the Image Type section, the AWS Nitro Enclaves is selected by default.

    2. In the Input image name section, add the required tag name.

    3. In the Output image name section, add the required tag name and enter the REGISTRY CREDENTIALS. Here, the registry credentials are the credentials needed to access the private Docker registry where the image will be pushed. Since the input image is stored in a public registry, there is no need to provide credentials for the input image.

      • If you have added a registry in a particular account as described in Image Registry, then Use same credential as input image registry check box will be selected by default and the registry names for the output image will be filled automatically in the Add Registry Credentials fields.

      • If you have not saved any Registry Credentials, then manually enter the registry credentials for the Output image name

    4. In the Enclave Parameters section,

      • Memory size - Select the memory size from the drop-down to change the memory size of the Nitro.

      • CPU count - CPU count is the number of CPUs dedicated to an enclave out of all the CPUs available to the host machine.

      NOTE

      The Memory size and CPU count can be overridden at runtime with the following environment variables:

      • MEM_SIZE

      • CPU_COUNT

      • File persistence – This check box is selected by default. This feature allows you to save the filesystem changes to an encrypted container mount. It allows the Nitro system to access a managed Security-object in Fortanix DSM to be able to encrypt and decrypt the Linux Unified Key Setup (LUKS) overlay file system. For more information, refer to AWS Nitro File Persistence.

        NOTE

        For the File Persistence feature to work, you must configure the app certificate since when a Nitro image runs, it must be configured ahead of time to receive a certificate, which will authorize access to Fortanix DSM to obtain the keys for the Linux Unified Key Setup (LUKS) volume. Without the app certificate, this feature will not work.

  4. Click SAVE to create the image.

    Figure 2: Add Image form for the Enclave OS application

  5. An image approval task is created and added which is visible on the Tasks page. You can approve the task to approve the application image.

    For more information on how to approve the application image tasks for the Enclave OS application, refer to Domain and Application Image Approval.

  6. After it is approved, a green tick will appear in the Approval status column for that image.

    Figure 3: Approved Enclave OS application image

    NOTE

    The Source Image tag and Output Image tag are optional fields and by default, the tag value is “latest” internally. If the user is entering a different tag value, then it can either be different values or the same. Once an image of an application is created, it will be pushed to the specified location in the Output Image Name of the application.

3.2 EDP Applications

Ensure that you have created an EDP application as mentioned in Add and Edit an Application.

Perform the following steps to create an image for the EDP application:

  1. Navigate to the Applications menu item in the CCM UI left navigation panel and select the required EDP application for which you want to configure an application image.

  2. On the following page, click + ADD IMAGE to configure the image of the EDP application.

    Figure 4: Images tab for the selected EDP application

  3. In the Image form, do the following:

    1. Image Version: Enter the version of the image.

    2. Image Type: Select Intel SGX or AWS Nitro Enclaves as the platform.
      If you select the Image Type as Intel SGX, you must add the Sigstruct details. The SIGSTRUCT for an enclave is generated when an application is signed. It is used to register the enclave with Fortanix Confidential Computing Manager.

      • Enclave Configuration SIGSTRUCT: Three options are available to add SIGSTRUCT:

        • Upload Enclave SIGSTRUCT: To upload an enclave sigstruct.bin file, click UPLOAD as shown in Figure 6. Here is a sample sigstruct.bin file.
          OR

        • Paste Base64-encoded Enclave SIGSTRUCT: You can also paste a Base64-encoded SIGSTRUCT binary in the text box provided.
          OR

        • Enter Enclave SIGSTRUCT Parameters: Enter the following parameters:
          MRENCLAVE: This is the identity or hash of the enclave.
          MRSIGNER: This is the identity of the signer of the enclave.
          ISVPRODID: This is the numeric product identifier to be assigned to the enclave. Choose a unique value in the range 0-65535 for each application.
          ISVSVN: This is the numeric security version to be assigned to the enclave. Increment this value when a security-relevant change is made to the application.

          NOTE

          The Enclave SIGSTRUCT Parameters section is automatically filled when you either upload a sigstruct.bin file or paste a base64 encoded enclave SIGSTRUCT.

      If you select the Image Type as AWS Nitro Enclaves, you have to add the Enclave Configuration JSON details which are unique enclave measurements that include a series of Hashes and Platform. The JSON measurements for an enclave are generated when an application is signed. It is used to register the enclave with Fortanix Confidential Computing Manager.

      • Enclave Configuration JSON: Three options are available to add measurements:

        • Upload Measurement JSON: To upload an enclave measurement.json file, click UPLOAD as shown in Figure 7.
          OR

        • Paste Measurement JSON: You can also paste the JSON enclave measurements in the text box provided.
          OR

        • Enter Measurement: Enter the following parameters:
          PCR0: This is the hash of the enclave image file.
          PCR1: This is the hash of the Linux kernel and bootstrap.
          PCR2: This is the Hash of the user application.

          NOTE

          The Enter Measurement section is automatically filled when you either upload a measurement.json file or paste the JSON enclave measurements.

        Figure 5: Add Image form for the Intel SGX platform

        Figure 6: Add Image form for the AWS Nitro Enclaves platform

  4. Click SAVE to create the EDP application image.

  5. An image approval task is created and added, which is visible on the Tasks page. You can approve the task to approve the image.
    For more information on how to approve the application image tasks for the EDP application, refer to Domain and Application Image Approval.

  6. After the image is approved, a green tick will appear in the Approval status column for that image.

    Figure 7: Approved EDP application image

3.3 ACI Applications

Ensure that you have created an ACI application as mentioned in Add and Edit an Application.

Perform the following steps to create an image for ACI application:

  1. Navigate to the Applications menu item from the CCM UI left navigation panel and select the required ACI application for which you want to configure an application image.

  2. On the following page, click + ADD IMAGE to configure the image of the ACI application. 

    Figure 8: Images tab for the selected ACI application

  3. In the Image form, do the following:

    1. Tag: Enter the tag value of the docker image.

      WARNING

      If an image of an existing ACI application already has the same tag value as the current ACI application image, then it will give an error. Use a new tag value.

    2. Add Registry Credentials: Enter the REGISTRY CREDENTIALS for the Input image name. Here, the registry credentials are the credentials needed to access the private docker registry where the image will be pulled. Since the input image is stored in a public registry, there is no need to provide credentials for the input image.

      NOTE

      If a registry credential is given, then the image name must have a domain. For example, if the image is from Docker Hub, then the domain prefix is not required. However, if a registry credential is given, then the image name must start with `docker.io/` or similar.

      • If you have added a registry in a particular account as described in the article Image Registry of Fortanix CCM, then the Use saved credentials check box will be selected by default.

        Figure 9: Add Image form for the ACI application

    3. Advanced Settings: It is recommended to always select the Wait for node registration to begin check box unless the application has special requirements. Selecting this check box does not allow the execution before the Fortanix ACI node agent has retrieved the signed app certificate from the Fortanix CCM backend cluster.

      • CPU Count: Enter the number of CPU cores. By default, the value is 1.

      • Memory in GB: Enter the amount of required RAM in GB units. By default, the value is 1.

  4. Click GENERATE SECURE POLICY to initiate the build of the JSON Fortifier template, which is used to deploy the confidential ACI container group.

    NOTE

    The creation of an application image may take up to a few minutes.

  5. An image approval task is created and added, which is visible on the Tasks page. You can approve the task to approve the image.
    For more information on how to approve the application image tasks for the ACI application, refer to Domain and Application Image Approval.

  6. After the image is approved, a green tick will appear in the Approval status column for that image.

    Figure 10: Approved ACI application image

3.3.1 Deploy the ACI Application Using Azure Portal

Perform the following steps to deploy the application image to Fortanix ACI either through the Azure Portal or with the Azure CLI:

  1. Navigate to the Applications → Image menu item and select the required image from the list.

  2. Click the POLICY tab to view the JSON Azure Resource Manager (ARM) template encoding of the security policy generated earlier in Section 5.0: Create an Image for ACI Application. 

    DeployACI.png

    Figure 11: Generated ARM template for the ACI security policy

  3. Click DOWNLOAD to save the ARM template for the deployment procedure.

For more information on how to deploy an ACI application, refer to Deploying the ACI Application Using Azure Portal.

3.4 AMD SEV-SNP Applications

Ensure that you have created an AMD SEV-SNP application as mentioned in Add and Edit an Application.

Perform the following steps to create an image for the EDP application:

  1. Navigate to the Applications menu item from the CCM UI left navigation panel and select the required ADM SEV-SNP application for which you want to configure an application image.

  2. On the following page, click + ADD IMAGE to configure the image of the ACI application.

    Figure 12: Add Image option for the AMD SEV-SNP application

  3. In the Image form, do the following:

    1. Image Version: Enter a unique tag for the image.

    2. In the Secure VM attestation section,

      1. Measurement: Enter the platform specific attestation measurement value associated with the secure image as copied in Section 10.0: Calculate Image Measurements of Deploy Confidential VM Applications on AMD SEV-SNP Using Fortanix CCM.

      2. VMPL: Select the VMPL0, VMPL1, VMPL2, or VMPL3 as Virtual Machine Privilege Level.

    3. Coprocessors: Select an option to configure the NVIDIA Graphics Processing Unit (GPU) attestation setting:

      1. Ignored: The virtual machine (VM) must have a GPU, and the attestation agent collects GPU attestation data, but Fortanix CCM does not validate this attestation, it only checks that GPU attestation data is present. The actual attestation result is ignored during verification.

      2. Required: The VM must have a GPU, and the attestation agent collects GPU attestation data, and Fortanix CCM validates this data using NVIDIA Remote Attestation Service (NRAS).

    Figure 13: Add image form for the AMD SEV-SNP application

  4. Click SAVE to create the image.

  5. An image approval task is created and added, which is visible on the Tasks page. You can approve the task to approve the image.

    For more information on how to approve the application image tasks for the AMD SEV-SNP application, refer to Domain and Application Image Approval.

  6. After the image is approved, a green tick will appear in the Approval status column for that image.

    Figure 14: Approved AMD SEV-SNP application image

3.5 Azure Confidential Virtual Machine (CVM) Applications

Before creating the image, ensure that you have collected the required Platform Configuration Register (PCR) values from the Azure CVM environment.

For more information on deploying a CVM on Azure and obtaining PCR values for creating the application image, refer to the following guides:

Perform the following steps to create an image:

  1. After you create an Azure CVM application, click the Applications menu item in the CCM UI left navigation panel and select the required Azure CVM application for which you want to configure an application image.

  2. On the following page, click + ADD IMAGE to configure the image of the Azure CVM application.

    Figure 15: Images tab for the selected Azure CVM application

  3. In the Image form, do the following:

    1. Image Version: Enter a version identifier for the image in the format <image-version>.

    2. Platform Configuration Register (PCR): Enter one or more PCR values collected from the Azure CVM. These values are verified during attestation to validate the integrity of the workload. You can enter values from PCR0 to PCR22 in 64-character hex string format only, depending on your security requirements.

      NOTE

      • When entering PCR values copied from the VM console, remove the “0X” prefix from each value, if any.

      • No two application images in Fortanix CCM can use the exact same combination of PCR values. However, you can create multiple images if their PCR combinations differ.

        For example:

        • Image 1: [pcr0abc]

          Image 2: [pcr0 def]

          OR

        • Image 1: [pcr0 - abc]

        • Image 2: [pcr0 - abc, pcr1 - xyz]

    Figure 16: Add Image form for the Azure CVM application

  4. Click SAVE to create the image.

  5. An image approval task is created and added, which is visible on the Tasks page. You can approve the task to approve the image.

    For more information on how to approve the application image tasks for the Azure CVM application, refer to Domain and Application Image Approval.

  6. After the image is approved, a green tick will appear in the Approval status column for that image.

    Figure 17: Approved Azure CVM application image

3.5.1 How PCR Values Influence Image Attestation

During Azure CVM attestation, images are validated against their configured PCR values. When multiple images are enrolled, the attestation service evaluates PCRs in priority order to determine which image should be attested. The examples below illustrate how different PCR configurations affect this selection.

  • If you do not provide any PCR values for an image, the attestation will still succeed for this image only if there is no matching image determined by the PCR priority.

    Example:

    • Image 1 = [pcr0 – not set]

    • Image 2 = [pcr1 - xxx]

    • Azure CVM = pcr0 - aaa, pcr1 - bbb

    In this case, Image 1 will be attested.

  • If multiple images are enrolled and at least one image has valid PCR values, the image without PCR values will not be considered.

    Example:

    • Image 1 = [pcr0 – not set, pcr1 - bbb]

    • Image 2 = [pcr0 - aaa, pcr1 bbb]

    • Azure CVM = pcr0 - aaa, pcr1 - bbb

    In this case, Image 2 will be attested.

  • The images with valid PCR values will be evaluated for attestation based on their priority order.

    Example:

    • Image 1 = [pcr0 - aaa, pcr1 - bbb]

    • Image 2 = [pcr3 - ddd, pcr4 - eee]

    • Image 3 = [pcr7 - hhh, pcr9 - jjj]

    • Image 4 = [pcr9 - jjj, pcr10 - lll, pcr11 - mmm]

    • The Azure CVM = pcr0 - aaa, pcr1 - bbb, pcr2 - ccc, pcr3 - ddd, pcr4 - eee, pcr5 - fff, pcr6 - ggg, pcr7 - hhh, pcr8 - iii, pcr9 - jjj, pcr10 - lll, pcr11 - mmm

    In this case, Image 1 will be attested because pcr0 and pcr1 have the highest priority.

    The order in which the images were created does not affect the attestation decision.

  • If two images are enrolled - one without PCR values set and another that is not approved in Fortanix CCM, the attestation process will evaluate the available PCR values based on their priority order.

    Example:

    • Image 1 = [pcr0 – not set, pcr1 - bbb]

    • Image 2 (unapproved) = [pcr0 - aaa, pcr1 - bbb]

    • Azure CVM = pcr0 - aaa, pcr1 bbb

    In this case, Image 2 will be selected for attestation because it has PCR values of highest priority defined. However, the attestation will fail since Image 2 is not an approved build. To resolve this, either approve image 2 or delete it.

  • If two images are enrolled - one without PCR values set and another whose PCR values do not fully match the Azure CVM, the attestation process will evaluate the available PCR values based on their priority order.

    Example:

    • Image 1 = [pcr0 – not set, pcr1 - bbb]

    • Image 2 = [pcr0 - aaa, pcr2 - ccc]

    • Azure CVM = pcr0 - aaa, pcr1 bbb

    In this case, Image 2 will be selected for attestation because its highest-priority matching PCR (pcr0) aligns with the Azure CVM. However, the attestation will fail because the remaining PCRs do not match the Azure CVM PCR values. To resolve this, either delete Image 2, or create and approve Image 3, which is a copy of Image 1 but with pcr0 set so that it has a higher priority than Image 2.

    • Image 3 = [pcr0 - aaa, pcr1 - bbb]

  • If all PCR values are invalid for an image (for example, set to all zeros), the attestation certificate is not generated. To determine the reason for the failure, you must check the agent logs. When run with RUST_LOG=debug, the log will display the message ‘Build with matching PCRs not found’.

Fortanix-logo

4.6

star-ratings

As of August 2025