Configure Azure Data Box Jobs

The azure-native:databox:Job resource, part of the Pulumi Azure Native provider, orchestrates physical data transfer between on-premises and Azure Storage using DataBox devices. This guide focuses on three capabilities: import and export job creation, password and encryption configuration, and transfer scope filtering.

DataBox jobs reference existing Azure Storage accounts and coordinate device shipment to your specified address. The examples are intentionally small. Combine them with your own storage accounts, security policies, and operational procedures.

Import data from on-premises to Azure Storage

Organizations moving large datasets to Azure use DataBox when network transfer would take too long or cost too much.

import * as pulumi from "@pulumi/pulumi";
import * as azure_native from "@pulumi/azure-native";

const job = new azure_native.databox.Job("job", {
    details: {
        contactDetails: {
            contactName: "XXXX XXXX",
            emailList: ["xxxx@xxxx.xxx"],
            phone: "0000000000",
            phoneExtension: "",
        },
        dataImportDetails: [{
            accountDetails: {
                dataAccountType: "StorageAccount",
                storageAccountId: "/subscriptions/YourSubscriptionId/resourcegroups/YourResourceGroupName/providers/Microsoft.Storage/storageAccounts/YourStorageAccountName",
            },
        }],
        jobDetailsType: "DataBox",
        shippingAddress: {
            addressType: azure_native.databox.AddressType.Commercial,
            city: "XXXX XXXX",
            companyName: "XXXX XXXX",
            country: "XX",
            postalCode: "00000",
            stateOrProvince: "XX",
            streetAddress1: "XXXX XXXX",
            streetAddress2: "XXXX XXXX",
        },
    },
    jobName: "TestJobName1",
    location: "westus",
    resourceGroupName: "YourResourceGroupName",
    sku: {
        name: azure_native.databox.SkuName.DataBox,
    },
    transferType: azure_native.databox.TransferType.ImportToAzure,
});
import pulumi
import pulumi_azure_native as azure_native

job = azure_native.databox.Job("job",
    details={
        "contact_details": {
            "contact_name": "XXXX XXXX",
            "email_list": ["xxxx@xxxx.xxx"],
            "phone": "0000000000",
            "phone_extension": "",
        },
        "data_import_details": [{
            "account_details": {
                "data_account_type": "StorageAccount",
                "storage_account_id": "/subscriptions/YourSubscriptionId/resourcegroups/YourResourceGroupName/providers/Microsoft.Storage/storageAccounts/YourStorageAccountName",
            },
        }],
        "job_details_type": "DataBox",
        "shipping_address": {
            "address_type": azure_native.databox.AddressType.COMMERCIAL,
            "city": "XXXX XXXX",
            "company_name": "XXXX XXXX",
            "country": "XX",
            "postal_code": "00000",
            "state_or_province": "XX",
            "street_address1": "XXXX XXXX",
            "street_address2": "XXXX XXXX",
        },
    },
    job_name="TestJobName1",
    location="westus",
    resource_group_name="YourResourceGroupName",
    sku={
        "name": azure_native.databox.SkuName.DATA_BOX,
    },
    transfer_type=azure_native.databox.TransferType.IMPORT_TO_AZURE)
package main

import (
	databox "github.com/pulumi/pulumi-azure-native-sdk/databox/v3"
	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)

func main() {
	pulumi.Run(func(ctx *pulumi.Context) error {
		_, err := databox.NewJob(ctx, "job", &databox.JobArgs{
			Details: &databox.DataBoxJobDetailsArgs{
				ContactDetails: &databox.ContactDetailsArgs{
					ContactName: pulumi.String("XXXX XXXX"),
					EmailList: pulumi.StringArray{
						pulumi.String("xxxx@xxxx.xxx"),
					},
					Phone:          pulumi.String("0000000000"),
					PhoneExtension: pulumi.String(""),
				},
				DataImportDetails: databox.DataImportDetailsArray{
					&databox.DataImportDetailsArgs{
						AccountDetails: databox.StorageAccountDetails{
							DataAccountType:  "StorageAccount",
							StorageAccountId: "/subscriptions/YourSubscriptionId/resourcegroups/YourResourceGroupName/providers/Microsoft.Storage/storageAccounts/YourStorageAccountName",
						},
					},
				},
				JobDetailsType: pulumi.String("DataBox"),
				ShippingAddress: &databox.ShippingAddressArgs{
					AddressType:     pulumi.String(databox.AddressTypeCommercial),
					City:            pulumi.String("XXXX XXXX"),
					CompanyName:     pulumi.String("XXXX XXXX"),
					Country:         pulumi.String("XX"),
					PostalCode:      pulumi.String("00000"),
					StateOrProvince: pulumi.String("XX"),
					StreetAddress1:  pulumi.String("XXXX XXXX"),
					StreetAddress2:  pulumi.String("XXXX XXXX"),
				},
			},
			JobName:           pulumi.String("TestJobName1"),
			Location:          pulumi.String("westus"),
			ResourceGroupName: pulumi.String("YourResourceGroupName"),
			Sku: &databox.SkuArgs{
				Name: pulumi.String(databox.SkuNameDataBox),
			},
			TransferType: pulumi.String(databox.TransferTypeImportToAzure),
		})
		if err != nil {
			return err
		}
		return nil
	})
}
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using AzureNative = Pulumi.AzureNative;

return await Deployment.RunAsync(() => 
{
    var job = new AzureNative.DataBox.Job("job", new()
    {
        Details = new AzureNative.DataBox.Inputs.DataBoxJobDetailsArgs
        {
            ContactDetails = new AzureNative.DataBox.Inputs.ContactDetailsArgs
            {
                ContactName = "XXXX XXXX",
                EmailList = new[]
                {
                    "xxxx@xxxx.xxx",
                },
                Phone = "0000000000",
                PhoneExtension = "",
            },
            DataImportDetails = new[]
            {
                new AzureNative.DataBox.Inputs.DataImportDetailsArgs
                {
                    AccountDetails = new AzureNative.DataBox.Inputs.StorageAccountDetailsArgs
                    {
                        DataAccountType = "StorageAccount",
                        StorageAccountId = "/subscriptions/YourSubscriptionId/resourcegroups/YourResourceGroupName/providers/Microsoft.Storage/storageAccounts/YourStorageAccountName",
                    },
                },
            },
            JobDetailsType = "DataBox",
            ShippingAddress = new AzureNative.DataBox.Inputs.ShippingAddressArgs
            {
                AddressType = AzureNative.DataBox.AddressType.Commercial,
                City = "XXXX XXXX",
                CompanyName = "XXXX XXXX",
                Country = "XX",
                PostalCode = "00000",
                StateOrProvince = "XX",
                StreetAddress1 = "XXXX XXXX",
                StreetAddress2 = "XXXX XXXX",
            },
        },
        JobName = "TestJobName1",
        Location = "westus",
        ResourceGroupName = "YourResourceGroupName",
        Sku = new AzureNative.DataBox.Inputs.SkuArgs
        {
            Name = AzureNative.DataBox.SkuName.DataBox,
        },
        TransferType = AzureNative.DataBox.TransferType.ImportToAzure,
    });

});
package generated_program;

import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.azurenative.databox.Job;
import com.pulumi.azurenative.databox.JobArgs;
import com.pulumi.azurenative.databox.inputs.SkuArgs;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;

public class App {
    public static void main(String[] args) {
        Pulumi.run(App::stack);
    }

    public static void stack(Context ctx) {
        var job = new Job("job", JobArgs.builder()
            .details(DataBoxJobDetailsArgs.builder()
                .contactDetails(ContactDetailsArgs.builder()
                    .contactName("XXXX XXXX")
                    .emailList("xxxx@xxxx.xxx")
                    .phone("0000000000")
                    .phoneExtension("")
                    .build())
                .dataImportDetails(DataImportDetailsArgs.builder()
                    .accountDetails(StorageAccountDetailsArgs.builder()
                        .dataAccountType("StorageAccount")
                        .storageAccountId("/subscriptions/YourSubscriptionId/resourcegroups/YourResourceGroupName/providers/Microsoft.Storage/storageAccounts/YourStorageAccountName")
                        .build())
                    .build())
                .jobDetailsType("DataBox")
                .shippingAddress(ShippingAddressArgs.builder()
                    .addressType("Commercial")
                    .city("XXXX XXXX")
                    .companyName("XXXX XXXX")
                    .country("XX")
                    .postalCode("00000")
                    .stateOrProvince("XX")
                    .streetAddress1("XXXX XXXX")
                    .streetAddress2("XXXX XXXX")
                    .build())
                .build())
            .jobName("TestJobName1")
            .location("westus")
            .resourceGroupName("YourResourceGroupName")
            .sku(SkuArgs.builder()
                .name("DataBox")
                .build())
            .transferType("ImportToAzure")
            .build());

    }
}
resources:
  job:
    type: azure-native:databox:Job
    properties:
      details:
        contactDetails:
          contactName: XXXX XXXX
          emailList:
            - xxxx@xxxx.xxx
          phone: '0000000000'
          phoneExtension: ""
        dataImportDetails:
          - accountDetails:
              dataAccountType: StorageAccount
              storageAccountId: /subscriptions/YourSubscriptionId/resourcegroups/YourResourceGroupName/providers/Microsoft.Storage/storageAccounts/YourStorageAccountName
        jobDetailsType: DataBox
        shippingAddress:
          addressType: Commercial
          city: XXXX XXXX
          companyName: XXXX XXXX
          country: XX
          postalCode: '00000'
          stateOrProvince: XX
          streetAddress1: XXXX XXXX
          streetAddress2: XXXX XXXX
      jobName: TestJobName1
      location: westus
      resourceGroupName: YourResourceGroupName
      sku:
        name: DataBox
      transferType: ImportToAzure

The transferType property determines data direction (ImportToAzure or ExportFromAzure). The dataImportDetails array specifies destination storage accounts by resource ID. The contactDetails and shippingAddress properties coordinate device delivery and return. The sku property selects device capacity (DataBox, DataBoxDisk, DataBoxHeavy).

Set device and share passwords for data access

Teams that need to control access to the device and its storage shares can specify passwords during job creation.

import * as pulumi from "@pulumi/pulumi";
import * as azure_native from "@pulumi/azure-native";

const job = new azure_native.databox.Job("job", {
    details: {
        contactDetails: {
            contactName: "XXXX XXXX",
            emailList: ["xxxx@xxxx.xxx"],
            phone: "0000000000",
            phoneExtension: "",
        },
        dataImportDetails: [{
            accountDetails: {
                dataAccountType: "StorageAccount",
                sharePassword: "<sharePassword>",
                storageAccountId: "/subscriptions/YourSubscriptionId/resourceGroups/YourResourceGroupName/providers/Microsoft.Storage/storageAccounts/YourStorageAccountName",
            },
        }],
        devicePassword: "<devicePassword>",
        jobDetailsType: "DataBox",
        shippingAddress: {
            addressType: azure_native.databox.AddressType.Commercial,
            city: "XXXX XXXX",
            companyName: "XXXX XXXX",
            country: "XX",
            postalCode: "00000",
            stateOrProvince: "XX",
            streetAddress1: "XXXX XXXX",
            streetAddress2: "XXXX XXXX",
        },
    },
    jobName: "TestJobName1",
    location: "westus",
    resourceGroupName: "YourResourceGroupName",
    sku: {
        name: azure_native.databox.SkuName.DataBox,
    },
    transferType: azure_native.databox.TransferType.ImportToAzure,
});
import pulumi
import pulumi_azure_native as azure_native

job = azure_native.databox.Job("job",
    details={
        "contact_details": {
            "contact_name": "XXXX XXXX",
            "email_list": ["xxxx@xxxx.xxx"],
            "phone": "0000000000",
            "phone_extension": "",
        },
        "data_import_details": [{
            "account_details": {
                "data_account_type": "StorageAccount",
                "share_password": "<sharePassword>",
                "storage_account_id": "/subscriptions/YourSubscriptionId/resourceGroups/YourResourceGroupName/providers/Microsoft.Storage/storageAccounts/YourStorageAccountName",
            },
        }],
        "device_password": "<devicePassword>",
        "job_details_type": "DataBox",
        "shipping_address": {
            "address_type": azure_native.databox.AddressType.COMMERCIAL,
            "city": "XXXX XXXX",
            "company_name": "XXXX XXXX",
            "country": "XX",
            "postal_code": "00000",
            "state_or_province": "XX",
            "street_address1": "XXXX XXXX",
            "street_address2": "XXXX XXXX",
        },
    },
    job_name="TestJobName1",
    location="westus",
    resource_group_name="YourResourceGroupName",
    sku={
        "name": azure_native.databox.SkuName.DATA_BOX,
    },
    transfer_type=azure_native.databox.TransferType.IMPORT_TO_AZURE)
package main

import (
	databox "github.com/pulumi/pulumi-azure-native-sdk/databox/v3"
	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)

func main() {
	pulumi.Run(func(ctx *pulumi.Context) error {
		_, err := databox.NewJob(ctx, "job", &databox.JobArgs{
			Details: &databox.DataBoxJobDetailsArgs{
				ContactDetails: &databox.ContactDetailsArgs{
					ContactName: pulumi.String("XXXX XXXX"),
					EmailList: pulumi.StringArray{
						pulumi.String("xxxx@xxxx.xxx"),
					},
					Phone:          pulumi.String("0000000000"),
					PhoneExtension: pulumi.String(""),
				},
				DataImportDetails: databox.DataImportDetailsArray{
					&databox.DataImportDetailsArgs{
						AccountDetails: databox.StorageAccountDetails{
							DataAccountType:  "StorageAccount",
							SharePassword:    "<sharePassword>",
							StorageAccountId: "/subscriptions/YourSubscriptionId/resourceGroups/YourResourceGroupName/providers/Microsoft.Storage/storageAccounts/YourStorageAccountName",
						},
					},
				},
				DevicePassword: pulumi.String("<devicePassword>"),
				JobDetailsType: pulumi.String("DataBox"),
				ShippingAddress: &databox.ShippingAddressArgs{
					AddressType:     pulumi.String(databox.AddressTypeCommercial),
					City:            pulumi.String("XXXX XXXX"),
					CompanyName:     pulumi.String("XXXX XXXX"),
					Country:         pulumi.String("XX"),
					PostalCode:      pulumi.String("00000"),
					StateOrProvince: pulumi.String("XX"),
					StreetAddress1:  pulumi.String("XXXX XXXX"),
					StreetAddress2:  pulumi.String("XXXX XXXX"),
				},
			},
			JobName:           pulumi.String("TestJobName1"),
			Location:          pulumi.String("westus"),
			ResourceGroupName: pulumi.String("YourResourceGroupName"),
			Sku: &databox.SkuArgs{
				Name: pulumi.String(databox.SkuNameDataBox),
			},
			TransferType: pulumi.String(databox.TransferTypeImportToAzure),
		})
		if err != nil {
			return err
		}
		return nil
	})
}
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using AzureNative = Pulumi.AzureNative;

return await Deployment.RunAsync(() => 
{
    var job = new AzureNative.DataBox.Job("job", new()
    {
        Details = new AzureNative.DataBox.Inputs.DataBoxJobDetailsArgs
        {
            ContactDetails = new AzureNative.DataBox.Inputs.ContactDetailsArgs
            {
                ContactName = "XXXX XXXX",
                EmailList = new[]
                {
                    "xxxx@xxxx.xxx",
                },
                Phone = "0000000000",
                PhoneExtension = "",
            },
            DataImportDetails = new[]
            {
                new AzureNative.DataBox.Inputs.DataImportDetailsArgs
                {
                    AccountDetails = new AzureNative.DataBox.Inputs.StorageAccountDetailsArgs
                    {
                        DataAccountType = "StorageAccount",
                        SharePassword = "<sharePassword>",
                        StorageAccountId = "/subscriptions/YourSubscriptionId/resourceGroups/YourResourceGroupName/providers/Microsoft.Storage/storageAccounts/YourStorageAccountName",
                    },
                },
            },
            DevicePassword = "<devicePassword>",
            JobDetailsType = "DataBox",
            ShippingAddress = new AzureNative.DataBox.Inputs.ShippingAddressArgs
            {
                AddressType = AzureNative.DataBox.AddressType.Commercial,
                City = "XXXX XXXX",
                CompanyName = "XXXX XXXX",
                Country = "XX",
                PostalCode = "00000",
                StateOrProvince = "XX",
                StreetAddress1 = "XXXX XXXX",
                StreetAddress2 = "XXXX XXXX",
            },
        },
        JobName = "TestJobName1",
        Location = "westus",
        ResourceGroupName = "YourResourceGroupName",
        Sku = new AzureNative.DataBox.Inputs.SkuArgs
        {
            Name = AzureNative.DataBox.SkuName.DataBox,
        },
        TransferType = AzureNative.DataBox.TransferType.ImportToAzure,
    });

});
package generated_program;

import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.azurenative.databox.Job;
import com.pulumi.azurenative.databox.JobArgs;
import com.pulumi.azurenative.databox.inputs.SkuArgs;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;

public class App {
    public static void main(String[] args) {
        Pulumi.run(App::stack);
    }

    public static void stack(Context ctx) {
        var job = new Job("job", JobArgs.builder()
            .details(DataBoxJobDetailsArgs.builder()
                .contactDetails(ContactDetailsArgs.builder()
                    .contactName("XXXX XXXX")
                    .emailList("xxxx@xxxx.xxx")
                    .phone("0000000000")
                    .phoneExtension("")
                    .build())
                .dataImportDetails(DataImportDetailsArgs.builder()
                    .accountDetails(StorageAccountDetailsArgs.builder()
                        .dataAccountType("StorageAccount")
                        .sharePassword("<sharePassword>")
                        .storageAccountId("/subscriptions/YourSubscriptionId/resourceGroups/YourResourceGroupName/providers/Microsoft.Storage/storageAccounts/YourStorageAccountName")
                        .build())
                    .build())
                .devicePassword("<devicePassword>")
                .jobDetailsType("DataBox")
                .shippingAddress(ShippingAddressArgs.builder()
                    .addressType("Commercial")
                    .city("XXXX XXXX")
                    .companyName("XXXX XXXX")
                    .country("XX")
                    .postalCode("00000")
                    .stateOrProvince("XX")
                    .streetAddress1("XXXX XXXX")
                    .streetAddress2("XXXX XXXX")
                    .build())
                .build())
            .jobName("TestJobName1")
            .location("westus")
            .resourceGroupName("YourResourceGroupName")
            .sku(SkuArgs.builder()
                .name("DataBox")
                .build())
            .transferType("ImportToAzure")
            .build());

    }
}
resources:
  job:
    type: azure-native:databox:Job
    properties:
      details:
        contactDetails:
          contactName: XXXX XXXX
          emailList:
            - xxxx@xxxx.xxx
          phone: '0000000000'
          phoneExtension: ""
        dataImportDetails:
          - accountDetails:
              dataAccountType: StorageAccount
              sharePassword: <sharePassword>
              storageAccountId: /subscriptions/YourSubscriptionId/resourceGroups/YourResourceGroupName/providers/Microsoft.Storage/storageAccounts/YourStorageAccountName
        devicePassword: <devicePassword>
        jobDetailsType: DataBox
        shippingAddress:
          addressType: Commercial
          city: XXXX XXXX
          companyName: XXXX XXXX
          country: XX
          postalCode: '00000'
          stateOrProvince: XX
          streetAddress1: XXXX XXXX
          streetAddress2: XXXX XXXX
      jobName: TestJobName1
      location: westus
      resourceGroupName: YourResourceGroupName
      sku:
        name: DataBox
      transferType: ImportToAzure

The devicePassword property sets the unlock code for the physical device. The sharePassword property controls access to SMB shares on the device. Without these properties, Azure generates random passwords that you retrieve through the portal.

Enable double encryption for compliance requirements

Regulated industries often require multiple layers of encryption for data at rest.

import * as pulumi from "@pulumi/pulumi";
import * as azure_native from "@pulumi/azure-native";

const job = new azure_native.databox.Job("job", {
    details: {
        contactDetails: {
            contactName: "XXXX XXXX",
            emailList: ["xxxx@xxxx.xxx"],
            phone: "0000000000",
            phoneExtension: "",
        },
        dataImportDetails: [{
            accountDetails: {
                dataAccountType: "StorageAccount",
                storageAccountId: "/subscriptions/YourSubscriptionId/resourcegroups/YourResourceGroupName/providers/Microsoft.Storage/storageAccounts/YourStorageAccountName",
            },
        }],
        jobDetailsType: "DataBox",
        preferences: {
            encryptionPreferences: {
                doubleEncryption: azure_native.databox.DoubleEncryption.Enabled,
            },
        },
        shippingAddress: {
            addressType: azure_native.databox.AddressType.Commercial,
            city: "XXXX XXXX",
            companyName: "XXXX XXXX",
            country: "XX",
            postalCode: "00000",
            stateOrProvince: "XX",
            streetAddress1: "XXXX XXXX",
            streetAddress2: "XXXX XXXX",
        },
    },
    jobName: "TestJobName1",
    location: "westus",
    resourceGroupName: "YourResourceGroupName",
    sku: {
        name: azure_native.databox.SkuName.DataBox,
    },
    transferType: azure_native.databox.TransferType.ImportToAzure,
});
import pulumi
import pulumi_azure_native as azure_native

job = azure_native.databox.Job("job",
    details={
        "contact_details": {
            "contact_name": "XXXX XXXX",
            "email_list": ["xxxx@xxxx.xxx"],
            "phone": "0000000000",
            "phone_extension": "",
        },
        "data_import_details": [{
            "account_details": {
                "data_account_type": "StorageAccount",
                "storage_account_id": "/subscriptions/YourSubscriptionId/resourcegroups/YourResourceGroupName/providers/Microsoft.Storage/storageAccounts/YourStorageAccountName",
            },
        }],
        "job_details_type": "DataBox",
        "preferences": {
            "encryption_preferences": {
                "double_encryption": azure_native.databox.DoubleEncryption.ENABLED,
            },
        },
        "shipping_address": {
            "address_type": azure_native.databox.AddressType.COMMERCIAL,
            "city": "XXXX XXXX",
            "company_name": "XXXX XXXX",
            "country": "XX",
            "postal_code": "00000",
            "state_or_province": "XX",
            "street_address1": "XXXX XXXX",
            "street_address2": "XXXX XXXX",
        },
    },
    job_name="TestJobName1",
    location="westus",
    resource_group_name="YourResourceGroupName",
    sku={
        "name": azure_native.databox.SkuName.DATA_BOX,
    },
    transfer_type=azure_native.databox.TransferType.IMPORT_TO_AZURE)
package main

import (
	databox "github.com/pulumi/pulumi-azure-native-sdk/databox/v3"
	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)

func main() {
	pulumi.Run(func(ctx *pulumi.Context) error {
		_, err := databox.NewJob(ctx, "job", &databox.JobArgs{
			Details: &databox.DataBoxJobDetailsArgs{
				ContactDetails: &databox.ContactDetailsArgs{
					ContactName: pulumi.String("XXXX XXXX"),
					EmailList: pulumi.StringArray{
						pulumi.String("xxxx@xxxx.xxx"),
					},
					Phone:          pulumi.String("0000000000"),
					PhoneExtension: pulumi.String(""),
				},
				DataImportDetails: databox.DataImportDetailsArray{
					&databox.DataImportDetailsArgs{
						AccountDetails: databox.StorageAccountDetails{
							DataAccountType:  "StorageAccount",
							StorageAccountId: "/subscriptions/YourSubscriptionId/resourcegroups/YourResourceGroupName/providers/Microsoft.Storage/storageAccounts/YourStorageAccountName",
						},
					},
				},
				JobDetailsType: pulumi.String("DataBox"),
				Preferences: &databox.PreferencesArgs{
					EncryptionPreferences: &databox.EncryptionPreferencesArgs{
						DoubleEncryption: pulumi.String(databox.DoubleEncryptionEnabled),
					},
				},
				ShippingAddress: &databox.ShippingAddressArgs{
					AddressType:     pulumi.String(databox.AddressTypeCommercial),
					City:            pulumi.String("XXXX XXXX"),
					CompanyName:     pulumi.String("XXXX XXXX"),
					Country:         pulumi.String("XX"),
					PostalCode:      pulumi.String("00000"),
					StateOrProvince: pulumi.String("XX"),
					StreetAddress1:  pulumi.String("XXXX XXXX"),
					StreetAddress2:  pulumi.String("XXXX XXXX"),
				},
			},
			JobName:           pulumi.String("TestJobName1"),
			Location:          pulumi.String("westus"),
			ResourceGroupName: pulumi.String("YourResourceGroupName"),
			Sku: &databox.SkuArgs{
				Name: pulumi.String(databox.SkuNameDataBox),
			},
			TransferType: pulumi.String(databox.TransferTypeImportToAzure),
		})
		if err != nil {
			return err
		}
		return nil
	})
}
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using AzureNative = Pulumi.AzureNative;

return await Deployment.RunAsync(() => 
{
    var job = new AzureNative.DataBox.Job("job", new()
    {
        Details = new AzureNative.DataBox.Inputs.DataBoxJobDetailsArgs
        {
            ContactDetails = new AzureNative.DataBox.Inputs.ContactDetailsArgs
            {
                ContactName = "XXXX XXXX",
                EmailList = new[]
                {
                    "xxxx@xxxx.xxx",
                },
                Phone = "0000000000",
                PhoneExtension = "",
            },
            DataImportDetails = new[]
            {
                new AzureNative.DataBox.Inputs.DataImportDetailsArgs
                {
                    AccountDetails = new AzureNative.DataBox.Inputs.StorageAccountDetailsArgs
                    {
                        DataAccountType = "StorageAccount",
                        StorageAccountId = "/subscriptions/YourSubscriptionId/resourcegroups/YourResourceGroupName/providers/Microsoft.Storage/storageAccounts/YourStorageAccountName",
                    },
                },
            },
            JobDetailsType = "DataBox",
            Preferences = new AzureNative.DataBox.Inputs.PreferencesArgs
            {
                EncryptionPreferences = new AzureNative.DataBox.Inputs.EncryptionPreferencesArgs
                {
                    DoubleEncryption = AzureNative.DataBox.DoubleEncryption.Enabled,
                },
            },
            ShippingAddress = new AzureNative.DataBox.Inputs.ShippingAddressArgs
            {
                AddressType = AzureNative.DataBox.AddressType.Commercial,
                City = "XXXX XXXX",
                CompanyName = "XXXX XXXX",
                Country = "XX",
                PostalCode = "00000",
                StateOrProvince = "XX",
                StreetAddress1 = "XXXX XXXX",
                StreetAddress2 = "XXXX XXXX",
            },
        },
        JobName = "TestJobName1",
        Location = "westus",
        ResourceGroupName = "YourResourceGroupName",
        Sku = new AzureNative.DataBox.Inputs.SkuArgs
        {
            Name = AzureNative.DataBox.SkuName.DataBox,
        },
        TransferType = AzureNative.DataBox.TransferType.ImportToAzure,
    });

});
package generated_program;

import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.azurenative.databox.Job;
import com.pulumi.azurenative.databox.JobArgs;
import com.pulumi.azurenative.databox.inputs.SkuArgs;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;

public class App {
    public static void main(String[] args) {
        Pulumi.run(App::stack);
    }

    public static void stack(Context ctx) {
        var job = new Job("job", JobArgs.builder()
            .details(DataBoxJobDetailsArgs.builder()
                .contactDetails(ContactDetailsArgs.builder()
                    .contactName("XXXX XXXX")
                    .emailList("xxxx@xxxx.xxx")
                    .phone("0000000000")
                    .phoneExtension("")
                    .build())
                .dataImportDetails(DataImportDetailsArgs.builder()
                    .accountDetails(StorageAccountDetailsArgs.builder()
                        .dataAccountType("StorageAccount")
                        .storageAccountId("/subscriptions/YourSubscriptionId/resourcegroups/YourResourceGroupName/providers/Microsoft.Storage/storageAccounts/YourStorageAccountName")
                        .build())
                    .build())
                .jobDetailsType("DataBox")
                .preferences(PreferencesArgs.builder()
                    .encryptionPreferences(EncryptionPreferencesArgs.builder()
                        .doubleEncryption("Enabled")
                        .build())
                    .build())
                .shippingAddress(ShippingAddressArgs.builder()
                    .addressType("Commercial")
                    .city("XXXX XXXX")
                    .companyName("XXXX XXXX")
                    .country("XX")
                    .postalCode("00000")
                    .stateOrProvince("XX")
                    .streetAddress1("XXXX XXXX")
                    .streetAddress2("XXXX XXXX")
                    .build())
                .build())
            .jobName("TestJobName1")
            .location("westus")
            .resourceGroupName("YourResourceGroupName")
            .sku(SkuArgs.builder()
                .name("DataBox")
                .build())
            .transferType("ImportToAzure")
            .build());

    }
}
resources:
  job:
    type: azure-native:databox:Job
    properties:
      details:
        contactDetails:
          contactName: XXXX XXXX
          emailList:
            - xxxx@xxxx.xxx
          phone: '0000000000'
          phoneExtension: ""
        dataImportDetails:
          - accountDetails:
              dataAccountType: StorageAccount
              storageAccountId: /subscriptions/YourSubscriptionId/resourcegroups/YourResourceGroupName/providers/Microsoft.Storage/storageAccounts/YourStorageAccountName
        jobDetailsType: DataBox
        preferences:
          encryptionPreferences:
            doubleEncryption: Enabled
        shippingAddress:
          addressType: Commercial
          city: XXXX XXXX
          companyName: XXXX XXXX
          country: XX
          postalCode: '00000'
          stateOrProvince: XX
          streetAddress1: XXXX XXXX
          streetAddress2: XXXX XXXX
      jobName: TestJobName1
      location: westus
      resourceGroupName: YourResourceGroupName
      sku:
        name: DataBox
      transferType: ImportToAzure

The preferences property configures optional job behaviors. The encryptionPreferences block enables doubleEncryption, which combines hardware-based encryption on the device with software-based encryption in Azure Storage. This satisfies compliance requirements for layered data protection.

Export data from Azure Storage to on-premises

Organizations that need to move data out of Azure for archival or migration use DataBox to export blobs and files.

import * as pulumi from "@pulumi/pulumi";
import * as azure_native from "@pulumi/azure-native";

const job = new azure_native.databox.Job("job", {
    details: {
        contactDetails: {
            contactName: "XXXX XXXX",
            emailList: ["xxxx@xxxx.xxx"],
            phone: "0000000000",
            phoneExtension: "",
        },
        dataExportDetails: [{
            accountDetails: {
                dataAccountType: "StorageAccount",
                storageAccountId: "/subscriptions/YourSubscriptionId/resourceGroups/YourResourceGroupName/providers/Microsoft.Storage/storageAccounts/YourStorageAccountName",
            },
            transferConfiguration: {
                transferAllDetails: {
                    include: {
                        dataAccountType: azure_native.databox.DataAccountType.StorageAccount,
                        transferAllBlobs: true,
                        transferAllFiles: true,
                    },
                },
                transferConfigurationType: azure_native.databox.TransferConfigurationType.TransferAll,
            },
        }],
        jobDetailsType: "DataBox",
        shippingAddress: {
            addressType: azure_native.databox.AddressType.Commercial,
            city: "XXXX XXXX",
            companyName: "XXXX XXXX",
            country: "XX",
            postalCode: "00000",
            stateOrProvince: "XX",
            streetAddress1: "XXXX XXXX",
            streetAddress2: "XXXX XXXX",
        },
    },
    jobName: "TestJobName1",
    location: "westus",
    resourceGroupName: "YourResourceGroupName",
    sku: {
        name: azure_native.databox.SkuName.DataBox,
    },
    transferType: azure_native.databox.TransferType.ExportFromAzure,
});
import pulumi
import pulumi_azure_native as azure_native

job = azure_native.databox.Job("job",
    details={
        "contact_details": {
            "contact_name": "XXXX XXXX",
            "email_list": ["xxxx@xxxx.xxx"],
            "phone": "0000000000",
            "phone_extension": "",
        },
        "data_export_details": [{
            "account_details": {
                "data_account_type": "StorageAccount",
                "storage_account_id": "/subscriptions/YourSubscriptionId/resourceGroups/YourResourceGroupName/providers/Microsoft.Storage/storageAccounts/YourStorageAccountName",
            },
            "transfer_configuration": {
                "transfer_all_details": {
                    "include": {
                        "data_account_type": azure_native.databox.DataAccountType.STORAGE_ACCOUNT,
                        "transfer_all_blobs": True,
                        "transfer_all_files": True,
                    },
                },
                "transfer_configuration_type": azure_native.databox.TransferConfigurationType.TRANSFER_ALL,
            },
        }],
        "job_details_type": "DataBox",
        "shipping_address": {
            "address_type": azure_native.databox.AddressType.COMMERCIAL,
            "city": "XXXX XXXX",
            "company_name": "XXXX XXXX",
            "country": "XX",
            "postal_code": "00000",
            "state_or_province": "XX",
            "street_address1": "XXXX XXXX",
            "street_address2": "XXXX XXXX",
        },
    },
    job_name="TestJobName1",
    location="westus",
    resource_group_name="YourResourceGroupName",
    sku={
        "name": azure_native.databox.SkuName.DATA_BOX,
    },
    transfer_type=azure_native.databox.TransferType.EXPORT_FROM_AZURE)
package main

import (
	databox "github.com/pulumi/pulumi-azure-native-sdk/databox/v3"
	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)

func main() {
	pulumi.Run(func(ctx *pulumi.Context) error {
		_, err := databox.NewJob(ctx, "job", &databox.JobArgs{
			Details: &databox.DataBoxJobDetailsArgs{
				ContactDetails: &databox.ContactDetailsArgs{
					ContactName: pulumi.String("XXXX XXXX"),
					EmailList: pulumi.StringArray{
						pulumi.String("xxxx@xxxx.xxx"),
					},
					Phone:          pulumi.String("0000000000"),
					PhoneExtension: pulumi.String(""),
				},
				DataExportDetails: databox.DataExportDetailsArray{
					&databox.DataExportDetailsArgs{
						AccountDetails: databox.StorageAccountDetails{
							DataAccountType:  "StorageAccount",
							StorageAccountId: "/subscriptions/YourSubscriptionId/resourceGroups/YourResourceGroupName/providers/Microsoft.Storage/storageAccounts/YourStorageAccountName",
						},
						TransferConfiguration: &databox.TransferConfigurationArgs{
							TransferAllDetails: &databox.TransferConfigurationTransferAllDetailsArgs{
								Include: &databox.TransferAllDetailsArgs{
									DataAccountType:  pulumi.String(databox.DataAccountTypeStorageAccount),
									TransferAllBlobs: pulumi.Bool(true),
									TransferAllFiles: pulumi.Bool(true),
								},
							},
							TransferConfigurationType: pulumi.String(databox.TransferConfigurationTypeTransferAll),
						},
					},
				},
				JobDetailsType: pulumi.String("DataBox"),
				ShippingAddress: &databox.ShippingAddressArgs{
					AddressType:     pulumi.String(databox.AddressTypeCommercial),
					City:            pulumi.String("XXXX XXXX"),
					CompanyName:     pulumi.String("XXXX XXXX"),
					Country:         pulumi.String("XX"),
					PostalCode:      pulumi.String("00000"),
					StateOrProvince: pulumi.String("XX"),
					StreetAddress1:  pulumi.String("XXXX XXXX"),
					StreetAddress2:  pulumi.String("XXXX XXXX"),
				},
			},
			JobName:           pulumi.String("TestJobName1"),
			Location:          pulumi.String("westus"),
			ResourceGroupName: pulumi.String("YourResourceGroupName"),
			Sku: &databox.SkuArgs{
				Name: pulumi.String(databox.SkuNameDataBox),
			},
			TransferType: pulumi.String(databox.TransferTypeExportFromAzure),
		})
		if err != nil {
			return err
		}
		return nil
	})
}
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using AzureNative = Pulumi.AzureNative;

return await Deployment.RunAsync(() => 
{
    var job = new AzureNative.DataBox.Job("job", new()
    {
        Details = new AzureNative.DataBox.Inputs.DataBoxJobDetailsArgs
        {
            ContactDetails = new AzureNative.DataBox.Inputs.ContactDetailsArgs
            {
                ContactName = "XXXX XXXX",
                EmailList = new[]
                {
                    "xxxx@xxxx.xxx",
                },
                Phone = "0000000000",
                PhoneExtension = "",
            },
            DataExportDetails = new[]
            {
                new AzureNative.DataBox.Inputs.DataExportDetailsArgs
                {
                    AccountDetails = new AzureNative.DataBox.Inputs.StorageAccountDetailsArgs
                    {
                        DataAccountType = "StorageAccount",
                        StorageAccountId = "/subscriptions/YourSubscriptionId/resourceGroups/YourResourceGroupName/providers/Microsoft.Storage/storageAccounts/YourStorageAccountName",
                    },
                    TransferConfiguration = new AzureNative.DataBox.Inputs.TransferConfigurationArgs
                    {
                        TransferAllDetails = new AzureNative.DataBox.Inputs.TransferConfigurationTransferAllDetailsArgs
                        {
                            Include = new AzureNative.DataBox.Inputs.TransferAllDetailsArgs
                            {
                                DataAccountType = AzureNative.DataBox.DataAccountType.StorageAccount,
                                TransferAllBlobs = true,
                                TransferAllFiles = true,
                            },
                        },
                        TransferConfigurationType = AzureNative.DataBox.TransferConfigurationType.TransferAll,
                    },
                },
            },
            JobDetailsType = "DataBox",
            ShippingAddress = new AzureNative.DataBox.Inputs.ShippingAddressArgs
            {
                AddressType = AzureNative.DataBox.AddressType.Commercial,
                City = "XXXX XXXX",
                CompanyName = "XXXX XXXX",
                Country = "XX",
                PostalCode = "00000",
                StateOrProvince = "XX",
                StreetAddress1 = "XXXX XXXX",
                StreetAddress2 = "XXXX XXXX",
            },
        },
        JobName = "TestJobName1",
        Location = "westus",
        ResourceGroupName = "YourResourceGroupName",
        Sku = new AzureNative.DataBox.Inputs.SkuArgs
        {
            Name = AzureNative.DataBox.SkuName.DataBox,
        },
        TransferType = AzureNative.DataBox.TransferType.ExportFromAzure,
    });

});
package generated_program;

import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.azurenative.databox.Job;
import com.pulumi.azurenative.databox.JobArgs;
import com.pulumi.azurenative.databox.inputs.SkuArgs;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;

public class App {
    public static void main(String[] args) {
        Pulumi.run(App::stack);
    }

    public static void stack(Context ctx) {
        var job = new Job("job", JobArgs.builder()
            .details(DataBoxJobDetailsArgs.builder()
                .contactDetails(ContactDetailsArgs.builder()
                    .contactName("XXXX XXXX")
                    .emailList("xxxx@xxxx.xxx")
                    .phone("0000000000")
                    .phoneExtension("")
                    .build())
                .dataExportDetails(DataExportDetailsArgs.builder()
                    .accountDetails(StorageAccountDetailsArgs.builder()
                        .dataAccountType("StorageAccount")
                        .storageAccountId("/subscriptions/YourSubscriptionId/resourceGroups/YourResourceGroupName/providers/Microsoft.Storage/storageAccounts/YourStorageAccountName")
                        .build())
                    .transferConfiguration(TransferConfigurationArgs.builder()
                        .transferAllDetails(TransferConfigurationTransferAllDetailsArgs.builder()
                            .include(TransferAllDetailsArgs.builder()
                                .dataAccountType("StorageAccount")
                                .transferAllBlobs(true)
                                .transferAllFiles(true)
                                .build())
                            .build())
                        .transferConfigurationType("TransferAll")
                        .build())
                    .build())
                .jobDetailsType("DataBox")
                .shippingAddress(ShippingAddressArgs.builder()
                    .addressType("Commercial")
                    .city("XXXX XXXX")
                    .companyName("XXXX XXXX")
                    .country("XX")
                    .postalCode("00000")
                    .stateOrProvince("XX")
                    .streetAddress1("XXXX XXXX")
                    .streetAddress2("XXXX XXXX")
                    .build())
                .build())
            .jobName("TestJobName1")
            .location("westus")
            .resourceGroupName("YourResourceGroupName")
            .sku(SkuArgs.builder()
                .name("DataBox")
                .build())
            .transferType("ExportFromAzure")
            .build());

    }
}
resources:
  job:
    type: azure-native:databox:Job
    properties:
      details:
        contactDetails:
          contactName: XXXX XXXX
          emailList:
            - xxxx@xxxx.xxx
          phone: '0000000000'
          phoneExtension: ""
        dataExportDetails:
          - accountDetails:
              dataAccountType: StorageAccount
              storageAccountId: /subscriptions/YourSubscriptionId/resourceGroups/YourResourceGroupName/providers/Microsoft.Storage/storageAccounts/YourStorageAccountName
            transferConfiguration:
              transferAllDetails:
                include:
                  dataAccountType: StorageAccount
                  transferAllBlobs: true
                  transferAllFiles: true
              transferConfigurationType: TransferAll
        jobDetailsType: DataBox
        shippingAddress:
          addressType: Commercial
          city: XXXX XXXX
          companyName: XXXX XXXX
          country: XX
          postalCode: '00000'
          stateOrProvince: XX
          streetAddress1: XXXX XXXX
          streetAddress2: XXXX XXXX
      jobName: TestJobName1
      location: westus
      resourceGroupName: YourResourceGroupName
      sku:
        name: DataBox
      transferType: ExportFromAzure

The dataExportDetails array specifies source storage accounts and transfer scope. The transferConfiguration property controls what data moves: transferAllBlobs and transferAllFiles copy everything, while other options (not shown) allow filtering by container, blob prefix, or file path.

Beyond these examples

These snippets focus on specific job-level features: import and export workflows, password management and encryption preferences, and transfer configuration for selective data movement. They’re intentionally minimal rather than full data migration solutions.

The examples reference pre-existing infrastructure such as Azure Storage accounts (by resource ID) and resource groups and subscriptions. They focus on configuring the job rather than provisioning storage or managing the full device lifecycle.

To keep things focused, common job patterns are omitted, including:

  • Job monitoring and status tracking
  • Device return logistics and tracking
  • Data validation and verification options
  • Multiple storage account destinations
  • Managed identity configuration
  • Tags for cost allocation and organization

These omissions are intentional: the goal is to illustrate how each job feature is wired, not provide drop-in migration modules. See the DataBox Job resource reference for all available configuration options.

Let's configure Azure Data Box Jobs

Get started with Pulumi Cloud, then follow our quick setup guide to deploy this infrastructure.

Try Pulumi Cloud for FREE

Frequently Asked Questions

Job Configuration & Transfer Types
What's the difference between import and export jobs?
Import jobs (ImportToAzure) copy data from the physical device to Azure Storage. Export jobs (ExportFromAzure) copy data from Azure Storage to the physical device.
How do I configure an import job?
Set transferType to ImportToAzure and use details.dataImportDetails with accountDetails.storageAccountId pointing to your target storage account.
How do I configure an export job?
Set transferType to ExportFromAzure and use details.dataExportDetails with accountDetails and transferConfiguration to specify what data to export.
How do I specify what data to export?
Use transferConfiguration with transferConfigurationType set to TransferAll and configure transferAllDetails.include to specify transferAllBlobs and transferAllFiles.
Security & Encryption
Can I set a custom device password?
Yes, use details.devicePassword for the device and accountDetails.sharePassword for the storage share.
How do I enable double encryption?
Set details.preferences.encryptionPreferences.doubleEncryption to Enabled.
Resource Management
What properties can't be changed after creation?
location, jobName, and resourceGroupName are immutable and cannot be modified after the job is created.
How do I use a different API version?
Generate a local SDK package using the command pulumi package add azure-native databox [ApiVersion].

Using a different cloud?

Explore storage guides for other cloud providers: