Skip to main content

Create a Microsoft Azure-integrated custom cloud

Create a custom cloud for BYOC in your Aiven organization to better address your specific business needs or project requirements.

Azure supports two deployment models:

  • Standard (standard): Two separate VNets (Bastion and Workload) connected via VNet peering. Aiven routes management traffic through a bastion host proxy, and workload nodes are not accessible from the public internet.
  • Standard public (standard_public): A single Workload VNet with publicly addressed service VMs. Aiven connects to service nodes directly over the public internet.

To configure a custom cloud in your Aiven organization and prepare your Azure subscription so that Aiven can access it:

  1. In the Aiven Console or with the Aiven CLI client, you specify new cloud details to generate a Terraform infrastructure-as-code template.
  2. You download the generated template and deploy it in your Azure subscription using the Azure CLI and Terraform.
  3. You provision the custom cloud by supplying your Azure subscription ID and tenant ID to the Aiven platform, which gives Aiven the permissions to access your Azure subscription, create resources, and manage them onward.
  4. You select Aiven projects that can use your new custom cloud for creating services.
  5. You add contact details for individuals from your organization that Aiven can reach out to in case of technical issues with the new cloud.

Prerequisites

Azure permissions

To deploy the Aiven BYOC Terraform template, your Azure identity needs the following subscription permissions. Assign them before running terraform apply.

Azure subscription permissions

Assign one of the following to your Azure identity on the subscription:

  • Owner built-in role (simplest, but broad), or
  • A custom role with the minimum permissions defined below.

Show minimum custom role permissions for the BYOC deployer

{
"Actions": [
"Microsoft.Resources/subscriptions/resourceGroups/read",
"Microsoft.Resources/subscriptions/resourceGroups/write",
"Microsoft.Resources/subscriptions/resourceGroups/delete",
"Microsoft.Network/virtualNetworks/read",
"Microsoft.Network/virtualNetworks/write",
"Microsoft.Network/virtualNetworks/delete",
"Microsoft.Network/virtualNetworks/subnets/read",
"Microsoft.Network/virtualNetworks/subnets/write",
"Microsoft.Network/virtualNetworks/subnets/delete",
"Microsoft.Network/virtualNetworks/subnets/join/action",
"Microsoft.Network/virtualNetworks/peer/action",
"Microsoft.Network/virtualNetworks/virtualNetworkPeerings/read",
"Microsoft.Network/virtualNetworks/virtualNetworkPeerings/write",
"Microsoft.Network/virtualNetworks/virtualNetworkPeerings/delete",
"Microsoft.Network/networkSecurityGroups/read",
"Microsoft.Network/networkSecurityGroups/write",
"Microsoft.Network/networkSecurityGroups/delete",
"Microsoft.Network/networkSecurityGroups/join/action",
"Microsoft.Network/networkSecurityGroups/securityRules/read",
"Microsoft.Network/networkSecurityGroups/securityRules/write",
"Microsoft.Network/networkSecurityGroups/securityRules/delete",
"Microsoft.Network/natGateways/read",
"Microsoft.Network/natGateways/write",
"Microsoft.Network/natGateways/delete",
"Microsoft.Network/natGateways/join/action",
"Microsoft.Network/publicIPAddresses/read",
"Microsoft.Network/publicIPAddresses/write",
"Microsoft.Network/publicIPAddresses/delete",
"Microsoft.Network/publicIPAddresses/join/action",
"Microsoft.Storage/storageAccounts/read",
"Microsoft.Storage/storageAccounts/write",
"Microsoft.Storage/storageAccounts/delete",
"Microsoft.Storage/storageAccounts/listkeys/action",
"Microsoft.Storage/storageAccounts/blobServices/read",
"Microsoft.Storage/storageAccounts/blobServices/containers/read",
"Microsoft.Storage/storageAccounts/blobServices/containers/write",
"Microsoft.Storage/storageAccounts/blobServices/containers/delete",
"Microsoft.Authorization/roleAssignments/read",
"Microsoft.Authorization/roleAssignments/write",
"Microsoft.Authorization/roleAssignments/delete",
"Microsoft.Authorization/roleDefinitions/read",
"Microsoft.Authorization/roleDefinitions/write",
"Microsoft.Authorization/roleDefinitions/delete"
],
"AssignableScopes": [
"/subscriptions/{subscriptionId}"
],
"DataActions": [],
"Description": "Minimum permissions for running the Aiven BYOC Azure Terraform template.",
"Name": "Aiven BYOC Terraform Operator",
"NotActions": [],
"NotDataActions": []
}

Create a custom cloud

Create a custom cloud either in the Aiven Console or with the Aiven CLI.

Launch the BYOC setup

  1. Log in to the Aiven Console, and go to an organization.
  2. Click Admin in the top navigation, and click Bring your own cloud in the sidebar.
  3. In the Bring your own cloud view, select Create custom cloud.

Generate an infrastructure template

In the Create custom cloud wizard:

  1. Specify cloud details:

    • Cloud provider: Select Microsoft Azure.
    • Deployment model: Choose a model:
      • Standard: Two VNets (Bastion and Workload) connected via VNet peering. Workload nodes are not accessible from the public internet.
      • Standard public: A single Workload VNet with publicly addressed service VMs. The service endpoint has two hostnames: a private one and a public one derived from it by adding a public- prefix. The Service URI shown in the Aiven Console displays only the private hostname.
    • Cloud region: Select an Azure region, for example westeurope.
    • CIDR: Enter an IP address range for the virtual networks Aiven creates in your Azure subscription, for example 10.0.0.0/16, 172.31.0.0/16, or 192.168.0.0/20.
    • Display name: Enter a name for your custom cloud.
  2. Click Next and review the deployment settings.

  3. Click Next to generate the template.

Deploy the template

  1. On the Infrastructure template page, download the Infrastructure template and the Variables file.

    important

    Do not modify the downloaded files. Changing any parameters, names, or configurations may result in provisioning failures or unexpected behavior.

  2. Install the Aiven CCE enterprise application on your Entra tenant:

    az login --tenant "AZURE_TENANT_ID"
    az ad sp create --id b40b60e2-10c8-4917-bc74-18a87950e767

    Replace AZURE_TENANT_ID with your Azure tenant ID. To look it up, run: az account show --query tenantId -o tsv. The app ID is also available in the variables file you downloaded as aiven_cce_client_id.

    note

    Run these commands once per tenant, regardless of how many custom clouds you create on the same tenant. If the Aiven CCE enterprise application is already installed on your tenant, skip this step.

    To remove the Aiven CCE enterprise application from your tenant after you have deleted all custom clouds on it, run:

    az login --tenant "AZURE_TENANT_ID"
    az ad sp delete --id b40b60e2-10c8-4917-bc74-18a87950e767
  3. Deploy the infrastructure template using Terraform:

    terraform init
    terraform apply -var-file=FILE_NAME.tfvars

    Replace FILE_NAME.tfvars with the name of the variables file you downloaded.

  4. In the Create custom cloud wizard, enter the identifiers from the Terraform output:

    • Subscription ID: Run terraform output -raw azure_subscription_id.
    • Tenant ID: Run terraform output -raw azure_tenant_id.
  5. Click Next.

Assign to projects and add contacts

  1. Select the projects that can use your new custom cloud, then click Next.
  2. Add contact details for team members Aiven can reach out to in case of technical issues with the new cloud:
    • Email
    • Real name
    • Role (for example, Admin)
  3. Click Create custom cloud.

When your custom cloud's status is Active, it's ready to use.

Limitations

The following features are not supported for Azure custom clouds:

  • Enhanced compliance (ECE) deployment models (pci_dss, hipaa)
  • Static IPs
  • VNet peering from the Aiven Console: manage peering directly in your Azure subscription
  • PrivateLink

Related pages