feat(azure): pin TLS 1.2 and HTTPS-only on state storage account - #365
Conversation
The Pulumi-state storage account created at bootstrap left MinimumTLSVersion and EnableHTTPSTrafficOnly at Azure's API defaults (TLS 1.0, HTTPS not enforced), which fails customer security baselines evaluated by Azure Policy. Set both explicitly at create time: TLS 1.2 minimum and secure-transfer-only.
|
Claude finished @stevenolen's task in 39s —— View job Review
The change is correct and follows existing patterns. Two observations: Scope gap for existing workloads The PR description correctly notes that existing accounts aren't retrofitted — Comment verbosity The inline comments explain the why well, but they're more verbose than needed given the field names are self-documenting ( // Explicit security floor; Azure API defaults are TLS 1.0 / HTTP-allowed.
MinimumTLSVersion: to.Ptr(armstorage.MinimumTLSVersionTLS12),
EnableHTTPSTrafficOnly: to.Ptr(true),Neither is blocking. The security values themselves are correct and the placement is right. |
Lytol
left a comment
There was a problem hiding this comment.
✅ While this is obviously an improvement, and we should definitely ship it, we still require EnableHTTPSTrafficOnly: false on the other storage account (and it has to stay that way AFAIK because of NFS). Just a note/observation!
Summary
The Pulumi-state storage account created at bootstrap (
CreateStorageAccountinlib/azure/blobstorage.go) leftMinimumTLSVersionandEnableHTTPSTrafficOnlyat Azure's API defaults, which are TLS 1.0 and no HTTPS enforcement. Those defaults fail customer security baselines evaluated by Azure Policy.This sets both explicitly at create time:
MinimumTLSVersion: TLS1_2EnableHTTPSTrafficOnly: trueScope
Applies only to newly bootstrapped Azure workloads. The account is created once and guarded by
StorageAccountExists, so existing workloads' state accounts are not retrofitted by this change.Testing
go build ./azure/clean