openapi: 3.2.0 info: description: Fortanix Confidential Computing Manager Backend. These are APIs using which the frontend and other clients (compute node agents) interact with Fortanix Confidential Computing Manager functionalities, which include compute node and app enrollment, attestation and signing, and Certificate Authority. version: 2.0.0 title: Confidential Computing Manager Build API termsOfService: https://www.fortanix.com/legal/terms/ contact: name: Fortanix Support url: https://support.fortanix.com/hc/en-us/categories/360003107511-Confidential-Computing-Manager email: support@fortanix.com license: name: Apache 2.0 url: http://www.apache.org/licenses/LICENSE-2.0.html servers: - url: https://ccm.fortanix.com tags: - name: Build paths: /v1/builds: get: tags: - Build summary: Get all images information. description: Get the image's information with all the attributes. operationId: getAllBuilds x-auth-resource: Reader,Writer,Manager parameters: - name: all_search in: query description: Search on all fields(docker image name, app name, mrenclave, mrsigner, app output image name). required: false schema: type: string - name: docker_image_name in: query description: Search on docker image name or app's output image name. required: false schema: type: string - name: config_id in: query description: Search builds with access to application config id. required: false schema: type: string - $ref: '#/components/parameters/BuildDeploymentStatusType' - $ref: '#/components/parameters/BuildStatusType' - name: limit in: query description: Maximum numbers of images to return. required: false schema: type: integer - name: offset in: query description: Number of images to skip from start. required: false schema: type: integer - name: sort_by in: query description: Sort fields. In the format of key1:ASC,key2:DESC,key3:DESC required: false schema: type: string - name: filter in: query description: Filter to use for items, currently supports list of groups required: false schema: type: string responses: '200': description: Search result for image objects. content: application/json: schema: $ref: '#/components/schemas/GetAllBuildsResponse' security: - bearerToken: [] post: tags: - Build summary: Create a new image. description: Create a new image. operationId: createBuild x-auth-resource: Writer,Manager,ActiveAccount parameters: - $ref: '#/components/parameters/CreateBuildRequest' responses: '200': description: Details of the created image. content: application/json: schema: $ref: '#/components/schemas/Build' security: - bearerToken: [] /v1/builds/{build-id}: get: tags: - Build summary: Get details of a particular image. description: Details of a particular image. operationId: getBuild x-auth-resource: Reader,Writer,Manager parameters: - $ref: '#/components/parameters/BuildId' responses: '200': description: Details of an image. content: application/json: schema: $ref: '#/components/schemas/Build' security: - bearerToken: [] delete: tags: - Build summary: Delete a particular image. description: Delete a particular image. operationId: deleteBuild x-auth-resource: Writer,Manager parameters: - $ref: '#/components/parameters/BuildId' responses: '204': description: Nothing is returned on success. security: - bearerToken: [] patch: tags: - Build summary: Update details of a particular image. description: Update details of a particular image. operationId: updateBuild x-auth-resource: Writer,Manager parameters: - $ref: '#/components/parameters/BuildId' - $ref: '#/components/parameters/BuildUpdateRequest' responses: '200': description: Details of a compute node. content: application/json: schema: $ref: '#/components/schemas/Build' security: - bearerToken: [] /v1/builds/deployments/{build-id}: get: tags: - Build summary: Get all deployments of an image. description: Get all deployments of an image. operationId: getBuildDeployments x-auth-resource: Reader,Writer,Manager parameters: - $ref: '#/components/parameters/BuildId' - $ref: '#/components/parameters/AppStatusType' - name: all_search in: query description: Search on all fields (image status and compute node name). required: false schema: type: string - name: sort_by in: query description: Sort fields. In the format of key1:ASC,key2:DESC,key3:DESC required: false schema: type: string - name: limit in: query description: Maximum number of images to return. required: false schema: type: integer - name: offset in: query description: Number of images to skip from start. required: false schema: type: integer responses: '200': description: Details of image deployments. content: application/json: schema: $ref: '#/components/schemas/GetAllBuildDeploymentsResponse' security: - bearerToken: [] /v1/builds/convert-app/nitro-enclaves: post: tags: - Build summary: Convert a docker image and create a new Nitro enclaves converted image. description: Convert a docker image and create a new Nitro enclaves converted image. operationId: convertAppBuildNitroEnclaves x-auth-resource: Writer,Manager,ActiveAccount parameters: - $ref: '#/components/parameters/NitroEnclavesConversionRequest' responses: '200': description: Details of the created image. content: application/json: schema: $ref: '#/components/schemas/Build' security: - bearerToken: [] /v1/builds/convert-app/aci: post: tags: - Build summary: Analyze a docker image and create Confidential ACI deployment templates. description: Analyze a docker image and create Confidential ACI deployment templates. operationId: convertAppBuildAci x-auth-resource: Writer,Manager,ActiveAccount parameters: - $ref: '#/components/parameters/AciConversionRequest' responses: '200': description: Details of the created image. content: application/json: schema: $ref: '#/components/schemas/Build' security: - bearerToken: [] components: schemas: ConversionRequestImageInfo: type: object required: - name properties: name: type: string description: Docker image name auth_config: $ref: '#/components/schemas/AuthConfig' description: Docker credentials BaremetalTdxAttributes: type: object required: - mrtd - rtmr0 - rtmr1 - rtmr2 - rtmr3 - coprocessors properties: mrtd: type: string description: TD firmware binary (OVMF.fd) measurement as a hex string. rtmr0: type: string description: Firmware and platform runtime measurements as hex string rtmr1: type: string description: Runtime measurement for kernel for direct boot and bootchain for indirect boot as hex string rtmr2: type: string description: Runtime measurement of kernel cmdline and initrd as hex string rtmr3: type: string description: Runtime extendable measurement register 3 as hex string coprocessors: type: array items: $ref: '#/components/schemas/Coprocessor' BuildStatus: type: object required: - status - status_updated_at properties: status: $ref: '#/components/schemas/BuildStatusType' status_updated_at: type: integer format: int64 description: Time since the status change. AmdSevSnpVmpl: type: string description: Virtual Machine Privilege Level enum: - vmpl0 - vmpl1 - vmpl2 - vmpl3 BuildStatusType: type: string description: Status string for the image. enum: - REJECTED - WHITELISTED - PENDING NitroEnclavesConversionRequest: type: object required: - request - nitro_enclaves_options properties: request: $ref: '#/components/schemas/ImageConversionRequest' description: Conversion request information nitro_enclaves_options: $ref: '#/components/schemas/NitroEnclavesConversionRequestOptions' description: Nitro enclaves conversion options DockerNetworkProtocol: type: string description: Protocol Associated with a Port exposed by a docker container. enum: - Tcp - Udp LaunchHint: type: object description: This object encodes a suggested manner for launching a confidential application. It may need to be configured further depending on your environment. minProperties: 1 maxProperties: 1 properties: azure_resource_template: description: The Microsoft ARM Template for launching this build. May require some properties (such as the join token). type: string GetAllBuildDeploymentsResponse: type: object required: - items properties: metadata: $ref: '#/components/schemas/SearchMetadata' items: type: array items: $ref: '#/components/schemas/AppNodeInfo' BuildUpdateRequest: type: object properties: configs: type: object additionalProperties: type: object Coprocessor: type: object required: - attestation properties: attestation: $ref: '#/components/schemas/Attestation' gpu_vendor: $ref: '#/components/schemas/GpuVendor' DockerNetworkPort: type: object description: A port exposed by a docker container. required: - port - protocol properties: port: type: integer description: A valid, specific port number from 1..65535 (inclusive). protocol: $ref: '#/components/schemas/DockerNetworkProtocol' SearchMetadata: type: object required: - total_count - filtered_count - page - pages - limit properties: page: type: integer description: Current page number pages: type: integer description: Total pages as per the item counts and page limit. limit: type: integer description: Number of items to limit in a page. total_count: type: integer description: Total number of unfiltered items. filtered_count: type: integer description: Total number of items as per the current filter. ImageConversionRequest: type: object required: - app_id - input_image - output_image - converter_options properties: app_id: type: string format: uuid description: App id of the image. input_image: $ref: '#/components/schemas/ConversionRequestImageInfo' description: Input docker image name output_image: $ref: '#/components/schemas/ConversionRequestImageInfo' description: Output docker image name converter_options: $ref: '#/components/schemas/ConverterOptions' description: Converter options AppStatusType: type: string description: Status string for the app on a compute node. enum: - RUNNING - STOPPED - UNKNOWN AuthConfig: description: Credentials for authenticating to a docker registry type: object required: - username properties: username: type: string description: User name for docker registry authentication password: type: string description: Password for docker registry authentication. Note that this field may be redacted when it appears in API responses. NitroEnclavesConversionRequestOptions: type: object properties: cpu_count: type: integer format: int32 description: CPU count mem_size: type: integer format: int64 description: Enclave memory size in MBs enable_overlay_filesystem_persistence: type: boolean default: true description: Flag to enable file persistence, on by default. GpuVendor: type: string description: An enum for GPU Vendor enum: - Nvidia BuildDeploymentStatusType: type: string description: Status string for the image deployment. enum: - DEPLOYED - UNDEPLOYED JavaRuntime: type: string description: Java runtime mode for conversion. enum: - JAVA-ORACLE - OPENJDK - OPENJ9 - LIBERTY-JRE GetAllBuildsResponse: type: object required: - items properties: metadata: $ref: '#/components/schemas/SearchMetadata' items: type: array items: $ref: '#/components/schemas/Build' EnclaveInfo: type: object description: Info on a application enclave. required: - mrenclave - mrsigner - isvsvn - isvprodid properties: mrenclave: type: string description: mrenclave of an image, as a hex string. mrsigner: type: string description: mrsigner of an image, as a hex string. isvprodid: type: integer format: int32 description: ISV Product Id. isvsvn: type: integer format: int32 description: ISV Security Version Number. ImageAttributes: type: object minProperties: 0 maxProperties: 1 x-derive-default: true properties: sgx: description: SGX1/SGX2 Enclave Attributes $ref: '#/components/schemas/SgxAttributes' nitro_enclave: description: AWS Nitro Enclave Attributes $ref: '#/components/schemas/NitroEnclaveAttributes' aci: description: Azure ACI Policy Attributes $ref: '#/components/schemas/AciAttributes' azure_cvm: description: Azure Confidential VM Attributes $ref: '#/components/schemas/AzureCvmAttributes' baremetal_tdx: description: Baremetal TDX Enclave Attributes $ref: '#/components/schemas/BaremetalTdxAttributes' baremetal_amd_sev_snp: description: Baremetal AMD SEV-SNP Enclave Attributes $ref: '#/components/schemas/BaremetalAmdSevSnpAttributes' AciConversionRequestOptions: type: object properties: cpu_count: type: integer format: int32 minimum: 1 maximum: 65535 default: 1 description: Number of cores gb_mem: type: number format: double default: 1 description: Container memory size in GBs (1,000,000,000 bytes) exclusiveMinimum: 0 wait_for_agent: type: boolean default: true description: 'Inserts a loop waiting for /opt/fortanix/agent.ready into your application''s entrypoint; ensures app startup occurs after confidential compute verifications. Don''t touch this unless there''s good reason. ' AppNodeInfo: type: object required: - certificate - created_at - node_id description: Detailed info of an app running on a compute node. properties: certificate: $ref: '#/components/schemas/Certificate' created_at: type: integer format: int64 description: App compute node creation time. node_id: type: string format: uuid description: Compute Node Id. node_name: type: string description: Compute Node Name. status: $ref: '#/components/schemas/AppStatus' build_info: $ref: '#/components/schemas/Build' message_count: type: integer format: int32 description: App heartbeat message count. key_id: type: string description: Key Id for app heartbeat. is_debug: type: boolean description: App running in debug mode or not. CertificateStatusType: type: string description: Certificate status. enum: - PENDING - REJECTED - ISSUED - REVOKED - EXPIRED HashAlgorithm: type: string enum: - SHA256 NitroEnclaveAttributes: type: object required: - hash_algorithm - pcr0 - pcr1 - pcr2 properties: hash_algorithm: $ref: '#/components/schemas/NitroEnclaveHashAlgorithm' pcr0: type: string description: A contiguous measure of the contents of the image file, without the section data as a hex string. pcr1: type: string description: A contiguous measure of the contents of the image file, without the section data as a hex string. pcr2: type: string description: A contiguous measure of the contents of the image file, without the section data as a hex string. SgxAttributes: type: object required: - mrenclave properties: mrenclave: type: string description: mrenclave as a hex string. features: type: array uniqueItems: true items: type: string AciAttributes: type: object description: ACI generated policy that represents the containers to run and other security restrictions. required: - policy properties: policy: type: string description: Base64-encoded output of azure confcom acipolicygen tool. Build: type: object description: Detailed info of an application image. required: - status properties: build_id: type: string format: uuid description: Image Id. docker_info: $ref: '#/components/schemas/DockerInfo' created_at: type: integer format: int64 description: Timestamp of image addition to the system (number of seconds since epoch). updated_at: type: integer format: int64 description: Timestamp of when the image was updated (number of seconds since epoch). app_id: type: string format: uuid description: App Id. app_name: type: string description: App name. status: $ref: '#/components/schemas/BuildStatus' deployment_status: $ref: '#/components/schemas/BuildDeploymentStatus' enclave_info: $ref: '#/components/schemas/EnclaveInfo' attributes: type: object description: Image attributes additionalProperties: $ref: '#/components/schemas/ImageAttributes' app_description: type: string description: App Description. mem_size: type: integer format: int64 description: Memory size required for the image. threads: type: integer format: int32 description: Threads required for the image. advanced_settings: $ref: '#/components/schemas/AdvancedSettings' build_name: type: string description: image name if curated app. pending_task_id: type: string format: uuid description: UUID of pending build whitelist task for the build configs: type: object description: Application configurations attached to the image. additionalProperties: type: - object - 'null' marketplace_build_id: type: string format: uuid description: Id of the corresponding marketplace listing. launch_hint: $ref: '#/components/schemas/LaunchHint' enable_overlay_filesystem_persistence: type: boolean description: Flag indicating if file persistence is enabled. This is only for Nitro Enclaves. group_id: type: string format: uuid description: Group Id BuildDeploymentStatus: type: object required: - status - status_updated_at properties: status: $ref: '#/components/schemas/BuildDeploymentStatusType' status_updated_at: type: integer format: int64 description: The time when the deployment status changed. CreateBuildRequest: type: object properties: docker_info: $ref: '#/components/schemas/DockerInfo' mrenclave: type: string description: mrenclave of the image. mrsigner: type: string description: mrsigner of the image. isvprodid: type: integer format: int32 description: Isv Product Id of the image. isvsvn: type: integer format: int32 description: ISV Security Version Number of the image. app_id: type: string format: uuid description: App id of the image. app_name: type: string description: App name of the image. mem_size: type: integer format: int64 description: Memory size required for the image. threads: type: integer format: int32 description: Threads required for the image. attributes: type: object description: Image attributes additionalProperties: $ref: '#/components/schemas/ImageAttributes' advanced_settings: $ref: '#/components/schemas/AdvancedSettings' launch_hint: $ref: '#/components/schemas/LaunchHint' enable_overlay_filesystem_persistence: type: boolean default: false description: Flag to enable file persistence, off by default. This is only for use with Nitro Enclaves. group_id: type: string format: uuid description: In case of curated app, group_id may be passed so that we can create an app and build in the particular group. CertificateConfig: type: object properties: issuer: type: string description: Certificate issuance strategy default: MANAGER_CA enum: - MANAGER_CA - NODE - SELF_IAS subject: type: string description: Certificate subject common name, typically a DNS name keyType: type: string description: Type of key to generate default: RSA enum: - RSA keyParam: type: object description: 'Key parameters. Currently must be an instance of RsaKeyParam, but other types may be supported in the future. ' keyPath: type: string description: Path to expose the key in the application filesystem certPath: type: string description: Path to expose the certificate in the application filesystem AzureCvmAttributes: type: object required: - pcrs - coprocessors properties: pcrs: type: object description: List of TPM PCRs hash values to enforce. 64 hex characters required: - hash_alg properties: hash_alg: $ref: '#/components/schemas/HashAlgorithm' pcr0: type: string pcr1: type: string pcr2: type: string pcr3: type: string pcr4: type: string pcr5: type: string pcr6: type: string pcr7: type: string pcr8: type: string pcr9: type: string pcr10: type: string pcr11: type: string pcr12: type: string pcr13: type: string pcr14: type: string pcr15: type: string pcr16: type: string pcr17: type: string pcr18: type: string pcr19: type: string pcr20: type: string pcr21: type: string pcr22: type: string coprocessors: type: array items: $ref: '#/components/schemas/Coprocessor' Certificate: description: A certificate request or issued certificate. type: object properties: certificate_id: type: string format: uuid description: Certificate ID. status: $ref: '#/components/schemas/CertificateStatusType' csr: type: string description: The certificate signing request. certificate: type: string description: The certificate itself, if issued. node_id: type: string format: uuid description: The node relevant to this certificate, if known. app_id: type: string format: uuid description: The app relevant to this certificate, if known. build_id: type: string format: uuid description: The build relevant to this certificate, if known. AppStatus: type: object description: Run status info of an app for a compute node. properties: status: $ref: '#/components/schemas/AppStatusType' status_updated_at: type: integer format: int64 description: Time since the status change. attested_at: type: integer format: int64 description: The app attestation date. AciConversionRequest: type: object required: - app_id - input_image - aci_options properties: app_id: type: string format: uuid description: App id of the image. input_image: $ref: '#/components/schemas/ConversionRequestImageInfo' description: Input docker image name converter_options: $ref: '#/components/schemas/ConverterOptions' description: Converter options aci_options: $ref: '#/components/schemas/AciConversionRequestOptions' description: ACI conversion options BaremetalAmdSevSnpAttributes: type: object required: - measurement - vmpl - coprocessors properties: measurement: type: string description: Guest Launch Measurement as hex string vmpl: type: string description: Virtual Machine Privilege Level $ref: '#/components/schemas/AmdSevSnpVmpl' coprocessors: type: array items: $ref: '#/components/schemas/Coprocessor' AdvancedSettings: type: object description: Advanced settings for apps and images. properties: entrypoint: type: array items: type: string description: Entrypoint for the container. encryptedDirs: type: array items: type: string description: "List of read-write files and/or directories which are encrypted using the enclave sealing key\nDefault encrypted directories - enclave-os protects the content in these files by encrypting them using the enclave sealing key. Anyone is allowed to read from or write to these files but only the enclave application can see it's contents in plain text.\n - /tmp\n - /run\n - /ftx-efs\n - /opt/fortanix/enclave-os/app-config/rw\nTips while debugging -> The default encrypted directories visible to the guest application as /tmp, /run and /ftx-efs are available in the container filesystem at /opt/fortanix/enclave-os/default-efs-dirs/.\n" certificate: $ref: '#/components/schemas/CertificateConfig' java_runtime: $ref: '#/components/schemas/JavaRuntime' description: Java runtime mode. rw_dirs: type: array items: type: string description: "List of read-write files and/or directories\nDefault read-write directories - enclave-os doesn't provide any security measures for these files and anyone is allowed to read from or write to these files.\n - /etc/hosts\n - /etc/resolv.conf\n - /etc/hostname\n" allowCmdlineArgs: type: boolean description: Allow command line arguments converter flag for an image. manifestEnv: type: array items: type: string description: Environment variables that will be passed to the manifest file when the container is converted. mutableEnv: type: array items: type: string description: 'Environment variables with supplied default values, but that may be overridden at runtime. ' DockerInfo: type: object description: Docker info of an image. required: - docker_image_name - docker_version properties: docker_image_name: type: string description: Image docker image name. docker_version: type: string description: Image docker version. docker_image_sha: type: string description: Build docker image sha. docker_image_size: type: integer format: int64 description: Docker image size in MiB (units of 2**20 bytes). exposed_ports: description: List of ports exposed by the Docker image. items: $ref: '#/components/schemas/DockerNetworkPort' type: array ConverterOptions: type: object properties: add_ccm_ca_certificates: type: boolean description: Adds CCM CA certificates into the application. allow_cmdline_args: type: boolean description: Allow command line arguments. debug: type: boolean description: Enables debug logging from EnclaveOS entrypoint: type: array items: type: string description: Override the entrypoint of the original container entrypoint_args: type: array items: type: string description: Override additional arguments to the container entrypoint env_vars: description: 'List of manifest environment variables. For ACI, these fixed values become part of the security policy. ' items: type: string type: array mutable_env_vars: description: 'List of mutable environment variable default values. For ACI, these become deployment template parameters. ' items: type: string type: array java_mode: type: string description: Type of the Java JVM used Attestation: type: string description: Specifies whether attestation is required or ignored. enum: - Ignored - Required NitroEnclaveHashAlgorithm: type: string description: Nitro enclave hash algorithm enum: - Sha384 parameters: CreateBuildRequest: name: body in: body required: true description: Request to create an image entry. schema: $ref: '#/components/schemas/CreateBuildRequest' NitroEnclavesConversionRequest: name: body in: body required: true description: Nitro enclaves conversion request. schema: $ref: '#/components/schemas/NitroEnclavesConversionRequest' BuildStatusType: name: status in: query description: Status string for the image. schema: type: string enum: - WHITELISTED - REJECTED - PENDING BuildDeploymentStatusType: name: deployed_status in: query description: Deployment Status string for the image. schema: type: string enum: - DEPLOYED - UNDEPLOYED BuildId: name: build-id in: path required: true description: UUID of an image. schema: type: string format: uuid AppStatusType: name: status in: query description: Status string for the Application compute node. schema: type: string enum: - RUNNING - STOPPED - UNKNOWN AciConversionRequest: name: body in: body required: true description: Aci conversion request. schema: $ref: '#/components/schemas/AciConversionRequest' BuildUpdateRequest: name: body in: body required: true description: Request to update an image. schema: $ref: '#/components/schemas/BuildUpdateRequest' securitySchemes: bearerToken: type: apiKey in: header name: Authentication description: A JWT bearer token to be passed once authenticated.