CanaryBit Tower
Orchestrate Trusted Execution Environments (TEE)
CanaryBit Tower is a Confidential Computing resources orchestration service. It helps end-users to deploy secure processing environments and provides control over configuration drifts.
It creates all the required infrastructure resources and one or more TEE (see Confidential Computing). Tower orchestrates TEEs either on the resources of a Cloud Service Provider of your choice, or On-Prem. It destroys all the resources once the execution is completed or compromised. Each TEE is single-use and immutable once created.
CanaryBit Tower consists of multiple Terraform / OpenTofu module configurations. The Tower module is a collection of resources to provision Confidential VMs resources only.
What is a module?
To learn more about the module concepts and how to use it refer to the official Terraform or OpenTofu documentation.
Requirements
- A CanaryBit account;
- A CanaryBit Inspector licence;
- Access to the target infrastructure provider;
- Terraform or OpenTofu installed;
- CLI access to your cloud platform (e.g Azure CLI, AWS CLI, etc...).
Download
Below a list of configuration for both Public Clouds and Bare-metal / Private setups supported by CanaryBit Tower.
Public Clouds
The below configurations are free to use under the Apache-2.0 licence.
Bare-metal / Private setups
A Premium License is required for the following configurations: Buy Premium
-
VMware
Infrastructure as Code (IaC) configuration for VMware Confidential VMs
-
Proxmox
Infrastructure as Code (IaC) configuration for Proxmox Confidential VMs
-
Openshift
Infrastructure as Code (IaC) configuration for Openshift Confidential VMs/Nodes
-
Libvirt/QEMU
Infrastructure as Code (IaC) configuration for Baremetal Confidential VMs
Configure
Edit the CanaryBit Tower module configuration.
Note
Always refer to the provided example files for up-to-date, supported configuration.
Example: AWS
...
// ========================
// Confidential VM (CVM)
// ========================
module "confidential-vm" {
// ************** DO NOT REMOVE THESE LINES ****************** //
source = "canarybit/tower/canarybit//modules/aws"
cb_username = var.cb_username
cb_password = var.cb_password
// ************** CUSTOM CONFIG BELOW THIS LINE ************** //
// Confidential VM
count = 2
cvm_name = "my-cvm-${count.index}"
...
}
...
For more information about the expected arguments, please refer to each module Inputs tab (e.g. AWS: Inputs)
Remote Attestation
To enable Remote Attestation, simply add the remote_attestation code-block in the module providing the required variables.
In this scenario, CanaryBit Tower will use a specific cloud-init file (attested.yml) ensuring the security characteristics of each Confidential VM are verified at booting time or at a custom cadence.
Never trust, always verify!
Environment verification with CanaryBit Inspector service is recommended to certify the security capabilities of the execution environments, mitigate risks and ensure privacy.
Whenever a Confidential VM is created and not attested, the end-user is still trusting the hypervisor and infrastructure provider. In this scenario, the need of Confidential VMs becomes worthless.
You are at risk!
The security characteristics of this environment are NOT VERIFIED! In this scenario, you are still trusting the hypervisor/infrastructure provider.
Add custom policies
It's possible to add a custom policies (e.g. mypolicy.rego) at different levels in the technology stack (hardware, hypervisor, OS and more).
Custom policies will be enforced on top of the verifier defaults policies, and together assess both the security level and correctness of each TEE.
To create a custom policy, simply create a file with a custom Rego policy expression.
Example
A custom policy to enforce a specific OS kernel version, hypervisor, and region for the deployed TEE.
package mypolicy
default allow := false
allow if {
input.claims.attestations.canarybit.kernel_version == "6.17.0-14-generic"
input.claims.metadata.hypervisor.cpuid_hypervisor == "HyperV"
input.claims.metadata.instance.region = "northeurope"
}
Deploy & Attest
Automatically deploy Confidential VMs (cVM) applying your configuration for the selected target infrastructure.
Source your credentials
To deploy the configuration on the selected target infrastructure you first need to source both CanaryBit and the target infrastructure required credentials.
-
Source your CanaryBit credentials:
cb.rcexport CB_USERNAME=*** export CB_PASSWORD=***Tip
The Terraform/OpenTofu module expects your CanaryBit username (
cb_username) and password (cb_password) as input. We recommend to use Terraform environment variables (TF_VAR_*):$ export TF_VAR_cb_username=$CB_USERNAME; export TF_VAR_cb_password=$CB_PASSWORD -
Source your target infrastructure credentials (e.g. AWS)
aws.rcexport AWS_ACCESS_KEY_ID=*** export AWS_SECRET_ACCESS_KEY=*** export AWS_REGION=***
Info
CanaryBit Tower configuration will automatically authenticate towards both CanaryBit and the target infrastructure Identity Providers (IdP) during the provisioning (apply) step.
Apply
In your terminal, apply the configuration via:
terraform init
terraform apply
tofu init
tofu apply
During the deployment CanaryBit Tower:
- authenticates the user towards CanaryBit;
- authenticates the user towards your infrastructure provider;
- creates the Confidential VMs and required virtual resources, e.g. networks, security groups, etc...;
- injects the
cloud-init(with or without Remote Attestation enabled) in each deployed Confidential VMs; - returns the details of the provisioned resources.
Download the report
The final report and additional insights are available for download on the CanaryBit Inspector Dashboard.