Scan a deployment¶
untrust scan runs every check for one platform against one deployment and prints a
report. Choose the platform with --platform (default nitro).
Try it without credentials¶
--demo runs the checks against a built-in, deliberately vulnerable simulated deployment.
Nothing is contacted.
untrust scan --demo
untrust scan --platform sev-snp --demo
untrust scan --platform azure-cvm --demo
untrust scan --platform gpu-cc --demo
A demo report starts with a SIMULATED SCAN banner, is marked "simulated": true in JSON,
and ends with a summary line such as:
Recorded results: 0 PASS, 33 FAIL, 0 SKIP, 0 ERROR. Skipped checks and errors remain unassessed.
AWS Nitro Enclaves¶
untrust scan --platform nitro \
--region <region> \
--target-bucket <state-bucket> \
--kms-key-id <kms-key-id-or-alias> \
--instance-id <parent-instance-id> \
--output report.json
Give at least one target. Checks whose input you did not give report SKIP. If the
enclave loads its state from somewhere other than S3, name that store instead of, or as
well as, the bucket: --dynamodb-table, --secret-arn, --parameter-path, --efs-id or
--db-instance.
Optional inputs turn on attestation checks:
--pcr-baseline baseline.jsonpins the expected PCR0/1/2 values;--nitro-attestation-doc attestation-doc.binwith--nitro-nonce <hex>verifies a captured attestation document and its freshness;--nitro-approved-signers <pcr8>names the EIF signing certificates you approve.
Permissions¶
The scanning identity needs read access to what it inspects, plus write and run-command access for the active checks: the bootstrap write probe and the host checks. The exact actions, the checks that use each one and an example IAM policy are in Required permissions, generated from the scanner's code. Scope the S3 actions to the state bucket and the SSM command to the parent instance.
The host and enclave checks run fixed, read-only shell and nitro-cli commands on the
parent instance through SSM, so the SSM agent must be running there. For a step-by-step
setup, see the AWS Nitro Enclaves guide.
GCP Confidential Space¶
untrust scan --platform sev-snp \
--gcp-project <project> \
--wip-provider projects/<project>/locations/global/workloadIdentityPools/<pool>/providers/<provider> \
--gcp-kms-key projects/<project>/locations/global/keyRings/<ring>/cryptoKeys/<key> \
--gcs-bucket <bootstrap-bucket> \
--gcp-instance <vm> --gcp-zone <zone> \
--output report.json
Any single target is enough. Add --attestation-token token.jwt (a token captured in the
workload) with --expected-audience and --expected-nonce to check its claims and replay
binding.
Read-only roles that cover the scan and its inventory: Compute Viewer, Security Reviewer,
Recommender Viewer and Logs Viewer. For a least-privilege custom role, see
Required permissions. The bootstrap-bucket injection probe (GCS-BOOT-02)
also writes and removes probe objects; --read-only skips it.
Azure confidential VMs¶
untrust scan --platform azure-cvm \
--azure-subscription <subscription-id> \
--azure-resource-group <resource-group> \
--azure-vm <vm> \
--azure-key-vault <vault> --azure-key <key> \
--azure-attestation-provider <maa-provider> \
--azure-attestation-token maa.jwt \
--output report.json
The scanner needs Reader on the resource group, Key Vault Reader on the key, and Attestation Reader. The Activity Log and the confidential-VM list it reads for inventory are covered by Reader on the subscription. For a custom role with only the actions the checks use, see Required permissions.
NVIDIA GPU Confidential Computing¶
GPU CC checks read files you capture on the confidential VM:
untrust scan --platform gpu-cc \
--gpu-attestation-report report.json \
--gpu-verifier-policy verifier-policy.json \
--gpu-cc-mode on \
--gpu-kbs-policy kbs-policy.json \
--gpu-launch-config launch.json \
--output gpu-report.json
--gpu-model-bucket adds an injection probe against the object store that holds model
weights; --read-only skips it.
Read-only scans¶
untrust scan ... --read-only
--read-only runs passive cloud-API checks only. On every platform it skips the active
checks: the probes that write and then remove canary objects in a bucket, and the checks
that run commands on the host. Each skipped check is recorded as SKIP, so the report
still shows that it was not assessed. Use it where write events or on-host commands would
trigger your security monitoring.
| Platform | Skipped with --read-only |
|---|---|
| AWS Nitro Enclaves | The bootstrap write probe BOOTSTRAP-01, and every check that runs commands on the parent instance through SSM: CORE-01, DNS-01, ENCLAVE-01, ENCLAVE-02, ENCLAVE-03, ENCLAVE-04, ENCLAVE-05, ENCLAVE-07, ENV-01, EXEC-01, HOST-01, HOST-02, LOG-01, NAT-01, PORT-01, PROXY-01, RESTART-01, SSH-01, SWAP-01, VSOCK-01 |
| GCP Confidential Space | The bootstrap-bucket probe GCS-BOOT-02 |
| NVIDIA GPU CC | The model-store probe GPUCC-MODEL-01 |
| Azure confidential VMs | None: every Azure check is passive |
The support matrix has the same list, generated from the scanner.
Inventory¶
For nitro, sev-snp and azure-cvm, the scan also collects a read-only inventory into
the report: the instance, its security groups, firewall or NSG rules, role or
service-account last use, who can reach the bucket, key or vault, and other confidential
instances in the account that no scan covers. It never changes a finding. Turn it off with
--no-inventory. If a permission is missing, the report lists the denied call and the
console shows that field as not collected.
Next¶
- Read the output and exit codes.
- Upload the report to the console.
- See every option in the CLI reference.