hashicorp / hashicorp/packer-plugin-azure

Error publishing an encrypted (SSE+CMK) image into an Azure Compute Gallery (fka. SIG) with TrustedLaunch enabled

Open
#418 3 comments 4 reactions 0 assignees View on GitHub
stage/waiting-on-upstream upstream-bug
Dominant language
Go
Stars
63
Forks
103
PR merge metrics
No merged PRs in 30d

Description

#### Overview of the Issue

Seemingly, this isn't the first time the error/bug has been reported. Almost a year ago, in issue #304, @oliverlabs shared an image that encapsulates and illustrates it perfectly, as follows:

![image](https://github.com/hashicorp/packer-plugin-azure/assets/31854930/11eef92f-e65d-49a0-afca-6894fb2b8a23)

Specifically, my Temp Packer VM represents the 2nd scenario. i.e. CMK using a Disk Encryption Set with Trusted Launch Security Type.

#### Reproduction Steps

Use of `disk_encryption_set_id` and `security_type = "TrustedLaunch"` together, as demonstrated in the below build file:

### Plugin and Packer version

Packer version: `1.10.3`
Plugin version: `2.1.4`

### Simplified Packer Buildfile
```
source "azure-arm" "windows-vm" {
client_id = var.client_id
client_secret = var.client_secret
subscription_id = var.subscription_id
tenant_id = var.tenant_id

build_resource_group_name = "packerbuildenvironment"
disk_encryption_set_id = var.des_resource_id
boot_diag_storage_account = var.boot_diag_sa

os_type = "Windows"
vm_size = var.vm_size

communicator = "winrm"
winrm_username = "packer"
winrm_timeout = "10m"
winrm_use_ssl = true
winrm_insecure = true
winrm_no_proxy = true
winrm_use_ntlm = true

# Security Type: Trusted Launch
secure_boot_enabled = true
vtpm_enabled = true
security_type = "TrustedLaunch"

virtual_network_resource_group_name = var.vnet_resource_group
virtual_network_name = var.vnet_name
virtual_network_subnet_name = var.vnet_subnet_name
managed_image_storage_account_type = "Premium_LRS"

shared_image_gallery {
subscription = var.subscription_id
resource_group = var.sig_resource_group
gallery_name = var.sig_gallery_name
image_name = var.sig_base_image_definition
}

shared_image_gallery_destination {
subscription = var.subscription_id
resource_group = var.sig_resource_group
gallery_name = var.sig_gallery_name
image_name = var.sig_image_definition
image_version = var.sig_image_version
specialized = true
}

user_assigned_managed_identities = [var.uami_resource_id]
}
```
### Operating system and Environment details

RHEL X64
ADOP SHA

### Log Fragments and crash.log files
```
==> azure-arm.windows-apps-vm: Publishing to Shared Image Gallery ...
==> azure-arm.windows-apps-vm: -> Source ID used for SIG publish : '/subscriptions/{subscriptionId}/resourceGroups/packerbuildenvironment/providers/Microsoft.Compute/virtualMachines/pkrvm78tjysw78q'
==> azure-arm.windows-apps-vm: -> SIG publish resource group : '{resourceGroup}'
==> azure-arm.windows-apps-vm: -> SIG gallery name : '{sigGalleryName}'
==> azure-arm.windows-apps-vm: -> SIG image name : '{sigImageName}'
==> azure-arm.windows-apps-vm: -> SIG image version : '1.0.0'
==> azure-arm.windows-apps-vm: -> SIG target regions : '[{location}]'
==> azure-arm.windows-apps-vm: -> Region 1 DES Id : '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}/providers/Microsoft.Compute/diskEncryptionSets/{diskEncryptionSet}'
==> azure-arm.windows-apps-vm: -> SIG storage account type : ''
==> azure-arm.windows-apps-vm: -> SIG image version endoflife date : ''
==> azure-arm.windows-apps-vm: -> SIG image version exclude from latest : 'false'

==> azure-arm.windows-apps-vm: Call stack:
==> azure-arm.windows-apps-vm: at Microsoft.Windows.Azure.GCM.Contract.Assert(Boolean condition, String userMessage) in X:\bt\1257000\repo\src\Shared\Lib\Common\Contracts.cs:line 82
==> azure-arm.windows-apps-vm: at Microsoft.WindowsAzure.PlatformImageRepository.ArtifactService.GoalSeeking.ReplicationBlockBase`3.ValidateDiskRPEncryptionResult(Encryption dmEncryption, Encryption resultEncryption) in X:\bt\1253263\repo\src\CRP-PIR\ArtifactService\GoalSeeking\Blocks\ReplicationBlockBase.cs:line 357
==> azure-arm.windows-apps-vm: at Microsoft.WindowsAzure.PlatformImageRepository.ArtifactService.GoalSeeking.AllocateSnapshotsBlock.ProcessSingleAllocateSnapshotResult(ReplicatedArtifact replicatedArtifact, VMImageSnapshotResult snapshotResult, Int32 maximumSourceDiskSizeInGb) in X:\bt\1253263\repo\src\CRP-PIR\ArtifactService\GoalSeeking\Blocks\AllocateSnapshotsBlock.cs:line 722
==> azure-arm.windows-apps-vm: at Microsoft.WindowsAzure.PlatformImageRepository.ArtifactService.GoalSeeking.AllocateSnapshotsBlock.ProcessAllocateSnapshotResults(ReplicatedArtifact replicatedArtifact, VMImageAllocateSnapshotResults allocateSnapshotsResult, Int32 maximumSourceDiskSizeInGb) in X:\bt\1253263\repo\src\CRP-PIR\ArtifactService\GoalSeeking\Blocks\AllocateSnapshotsBlock.cs:line 639
==> azure-arm.windows-apps-vm: at Microsoft.WindowsAzure.PlatformImageRepository.ArtifactService.GoalSeeking.AllocateSnapshotsBlock.d__18.MoveNext() in X:\bt\1253263\repo\src\CRP-PIR\ArtifactService\GoalSeeking\Blocks\AllocateSnapshotsBlock.cs:line 618
==> azure-arm.windows-apps-vm: at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
==> azure-arm.windows-apps-vm: at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
==> azure-arm.windows-apps-vm: at System.Runtime.CompilerServices.AsyncMethodBuilderCore.MoveNextRunner.Run()
==> azure-arm.windows-apps-vm: at System.Threading.Tasks.AwaitTaskContinuation.RunOrScheduleAction(Action action, Boolean allowInlining, Task& currentTask)
==> azure-arm.windows-apps-vm: at System.Threading.Tasks.Task.FinishContinuations()

==> azure-arm.windows-apps-vm: ERROR: -> InternalOperationError : Replication failed in this region due to 'Contract.Assert failed: Data model DiskEncryptionSetId '' does not match DiskRP returned DiskEncryptionSetId '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}/providers/Microsoft.Compute/diskEncryptionSets/{diskEncryptionSet}'

==> azure-arm.windows-apps-vm: Status: "InternalOperationError"
==> azure-arm.windows-apps-vm: Code: ""
==> azure-arm.windows-apps-vm: Message: "Replication failed in this region due to 'Contract.Assert failed: Data model DiskEncryptionSetId '' does not match DiskRP returned DiskEncryptionSetId '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}/providers/Microsoft.Compute/diskEncryptionSets/{diskEncryptionSet}' … "
==> azure-arm.windows-apps-vm: Activity Id: ""
```

Contributor guide

Open the contributing guide

Research direction

Start by reproducing the Azure Compute Gallery publish path with the supplied build configuration, using both disk_encryption_set_id and TrustedLaunch. Trace the Shared Image Gallery publication entry point and compare the reported DiskEncryptionSetId values; done means the encrypted TrustedLaunch image publishes successfully without the replication error.

Written by the indexing model from the issue text.

Assessment

Tech stack
azure, go
Domain
cloud
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.