Add visual-attestation-demo-v2 (ACI, no SKR) and azure-voting-app (AKS SEV-SNP)#29
Merged
Merged
Conversation
feat(vm-samples): Intel TDX support, Confidential OS disk encryption docs, JWT decode fix
Get-AzComputeResourceSku and Get-AzVMUsage have been observed to report NotAvailableForSubscription / 0 quota in subscription/region combinations where ARM actually accepts the deployment (e.g. Standard_DC2as_v6 in koreacentral). Add a switch to skip the entire SKU+quota pre-flight block and let ARM validate at deploy time. README updated with explanation and example.
Self-contained ACI sample that ports the AKS confidential-node visual attestation web UI to Azure Container Instances Confidential Containers. Attestation runs via the in-group `mcr.microsoft.com/aci/skr:2.10` sidecar (POST /attest/maa) instead of the AKS-side cvm-attestation-tools, since the ACI CC UVM does not expose a vTPM to the workload container. MAA returns a single-layer `sevsnpvm` token (no nested `x-ms-isolation-tee`) with `x-ms-compliance-status=azure-compliant-uvm`. Includes: - Slim Flask image (no tpm2-tools, no privileged host mounts) built via `az acr build`. - Two-container Confidential ARM template (cc-attest + skr sidecar) with CCE policy generated by `az confcom acipolicygen`; Standard ARM template for the educational failure path. - Deploy-VisualAttestationV2.ps1 with -Build / -Deploy / -Compare / -Cleanup phases for side-by-side Confidential vs Standard demos. - README with architecture, troubleshooting, and live screenshots of both SKUs after pressing Attest.
app.py and templates/index.html now branch on the ACI_SKU env var: - Confidential containers keep the existing 'AMD SEV-SNP hardware' header. - Standard containers render an 'ACI Standard Containers - Runtime Attestation' header that explicitly notes there is no TEE and no SKR sidecar, so the page no longer claims SEV-SNP hardware on the failure- path demo. The Confidential ARM template sets ACI_SKU=Confidential as a new env var (included in CCE policy regen). Screenshots in images/ are recaptured from the side-by-side -Compare deploy.
Single Flask container now fetches its own SEV-SNP report via the upstream get-snp-report tool (baked into the image), reads the THIM cert chain and UVM endorsements from UVM_SECURITY_CONTEXT_DIR, and POSTs to MAA /attest/SevSnpVm. The SKR sidecar container and its mount are removed from the confidential ARM template, CCE policy regenerated. App renders the MAA-issued sevsnpvm claims plus a hardware-evidence card with the raw SNP report summary. README and template updated; deployed and verified end-to-end on ACI Confidential (azure-compliant-uvm) and ACI Standard (expected /dev/sev-guest absent failure).
CC page shows the new Runtime Attestation header, MAA verdict azure-compliant-uvm, and x-ms-sevsnpvm-* claims. Standard page shows the expected /dev/sev-guest absence failure.
Adds the upstream Azure voting app plus an attestation overlay (Flask + AMD SEV-SNP MAA call) and a Deploy-VotingAppCC.ps1 helper that deploys the voting app, patches the front-end to a confidential nodepool, and layers the attestation pod.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR bundles two new Azure Confidential Computing samples plus README updates surfacing them.
1. ACI sample:
aci-samples/visual-attestation-demo-v2/(no SKR sidecar)Simplified ACI port of the AKS visual attestation sample. The Flask app calls Microsoft Azure Attestation directly from inside a single container via the upstream
get-snp-reporttool baked into the image with a multi-stage Dockerfile.{nonce, client}runtime data →REPORT_DATA = SHA-256(runtime) || 0x32→get-snp-reportagainst/dev/sev-guest→ POST report + THIM cert chain + UVM endorsements tohttps://<maa>/attest/SevSnpVm→ render the decoded MAA JWT withx-ms-sevsnpvm-*claims highlighted.Deploy-VisualAttestationV2.ps1orchestrator with-Build,-Deploy,-Compare,-Cleanupmodes.-Compareregenerates the CCE policy viaaz confcom acipolicygen./dev/sev-guestabsence, which is the educational contrast.Verified end-to-end: ACR image
acrlifmcdwj.azurecr.io/cc-attest:1.0(digestsha256:22cadc35...). Confidential ACI returned MAA JWT withx-ms-attestation-type=sevsnpvm,x-ms-compliance-status=azure-compliant-uvm. CCE policy hash3a2f83f0ca4f364ff9697655cf354e5c4da735179fced7b3fd75f7a329043b68. Standard ACI failed deterministically withNeither /dev/sev-guest nor /dev/sev is present.2. AKS sample:
aks-samples/azure-voting-app/Builds a randomly-named AKS cluster with the smallest possible AMD SEV-SNP confidential node pool (2x
Standard_DC2as_v5) and deploys the public Azure Voting App on it, pinned to the CC pool vianodeSelector: workload=confidential.Deploy-VotingAppCC.ps1follows the same conventions asvm-samples/BuildRandomCVM.ps1: random 5-letter suffix, full RG tagging, CC SKU + AMD CVM vCPU quota preflight, optional-smoketestauto-cleanup.Standard_D2as_v6system pool +ccpool(2xStandard_DC2as_v5), Azure CNI, managed identity, Standard tier,--auto-upgrade-channel stable+--node-os-upgrade-channel NodeImage.attestation/(Flask app +get-snp-report+manifest.yaml) layers a hardware-rooted attestation page on top of the voting app for live SEV-SNP verification on the CC nodes.azure-voting-app-redisrepo usingpython:3.9-slim(the previously-published MCR front-end image was removed) ΓÇö keeps the sample self-contained with no ACR /--attach-acrrequirement.3. README updates
README.mdandaci-samples/README.mdupdated to surfacevisual-attestation-demo-v2in the "What's New (June 2026)" table and the ACI samples list.See:
aci-samples/visual-attestation-demo-v2/README.mdfor the direct-MAA flow and side-by-side screenshots.aks-samples/azure-voting-app/README.mdfor the AKS deployment, quota requirements, and parameter reference.