Why This Comparison Exists (And Why Most Are Useless)
The aws acm vs azure key vault vs google certificate manager decision comes down to three factors: lifecycle automation, integration boundaries, and what breaks at 3am — not feature checkboxes. With 47-day certificate lifetimes phasing in by March 2029 under CA/Browser Forum SC-081v3, the choice you make in 2026 will trigger roughly 8x more renewal events per year. Pick wrong and you're rebuilding inside 18 months.
Most cloud certificate management comparisons online fall into two buckets:
- Vendor-sponsored fluff with no production scars
- 2019-era takes written before SC-081v3 was locked in
- Feature checklists that miss operational reality
What those comparisons don't tell you:
- ACM's CloudFront regional pin (us-east-1 only) still exists
- Key Vault transactions get expensive when rotating 500 certs every six weeks
- GCP Certificate Manager handles 47-day lifetimes well — only if your stack is 100% Google
In my experience running all three in production at mid-market scale — roughly 600 certs across AWS in four regions, 280 across Azure subscriptions, and a 90-cert estate in GCP — this piece covers what actually breaks, what each provider charges at rotation frequency, and the gap none of them fill.
AWS Certificate Manager: Free, Fine, and Frustrating at the Edges
ACM is the right answer for AWS-only shops. Public certs are free from Amazon Trust Services, auto-rotation works, and the integrations with ALB, CloudFront, and API Gateway are tight. The frustrating edges show up the moment you need a cert outside an AWS service: ACM won't let you export private keys for public certs, and ACM Private CA starts at $400 per month per CA before any cert is issued.
What ACM does well:
- Free public certs from Amazon Trust Services
- Auto-rotation and re-binding for ALB, NLB, CloudFront, API Gateway, App Runner
- DNS validation via Route 53 in one click
- Cross-region replication for ACM Private CA (added late 2024)
The CloudFront regional pin footgun: CloudFront only consumes certs from us-east-1, regardless of where your origin lives. If you've got a Frankfurt-only deployment and need a CloudFront distribution, you provision the cert in Virginia anyway. Half the engineers I've onboarded miss this and waste a morning chasing InvalidViewerCertificate errors.
ACM pricing math from production bills:
| Item | Cost |
|---|---|
| Public certs (600+ across 4 regions) | $0 |
| ACM Private CA (per CA) | $400/month |
| Private cert issuance (under 1,000/month) | $0.75 each |
| Private cert issuance (above 1,000/month) | $0.35 each |
| Annual cost: 1 private CA, no certs | $4,800 |
Mid-market companies needing internal PKI for service mesh or Kubernetes routinely get blindsided on the first AWS bill.
The portability limit: ACM-issued public certs can't leave AWS. You can't grab the private key for a bare-metal box, a Cloudflare origin, or a non-AWS load balancer. Companies running Cloudflare in front of AWS origins end up issuing certs twice — once in ACM for internal use, once via Let's Encrypt or DigiCert for the externally exposed endpoint. The broader pattern is covered in auditing certificates across many AWS accounts, where ACM's per-region, per-account boundaries start to hurt.
Azure Key Vault Certificates: Powerful, Confusing, Expensive
Key Vault treats certificates as first-class secrets with HSM backing and granular RBAC. Genuinely useful for security-conscious teams. The confusion comes from auto-rotation only working with specific issuer integrations (DigiCert, GlobalSign). The expense comes from per-transaction billing that compounds at rotation scale.
Strengths of Key Vault certificates:
- HSM-backed keys at premium tier ($1 per key per month minimum)
- Granular RBAC via Azure AD, with data-plane vs management-plane separation
- BYOK and BYOC support for compliance-heavy environments
- Native integration with App Service, Front Door, Application Gateway, API Management
The transaction billing surprise:
| Operation type | Price |
|---|---|
| Standard operations | $0.03 per 10,000 |
| HSM operations | $1 per 10,000 |
| 500-cert estate, 47-day rotation | ~3,900 issuance ops/year |
| Standard tier monthly cost (typical) | under $200 |
| Premium HSM-backed monthly cost (same access) | $1,500+ |
Layer in the certificate read operations from every App Service slot, Front Door endpoint, and Application Gateway listener pulling fresh certs on rotation, and you're looking at hundreds of thousands of operations per cert per year.
The App Service binding gotcha costs hours every renewal cycle. After monitoring this pattern across 280 Azure certs, I've seen renewal succeed in Key Vault, the new cert sit there for 36 hours, and App Service still serve the old one. Key Vault issues the new cert, but App Service custom domain bindings don't auto-pick-up the new version unless you use Key Vault reference syntax exactly right and have the right managed identity permissions. This is the classic renewal-deployment gap: cert renews fine, just doesn't reach the actual endpoint.
Google Certificate Manager: Newest, Cleanest, Smallest Surface
Google Certificate Manager has the cleanest design of the three. The map-based architecture scales to thousands of domains per load balancer without a separate cert object per hostname. It's also the smallest surface — works only with specific GCP services (HTTPS LBs, Cloud Run, App Engine), with no native private CA peering to on-prem and limited DNS validation provider support. Right answer if you're 100% GCP, wrong answer otherwise.
What Certificate Manager does right:
- Certificate maps decouple cert lifecycle from load balancer config
- Both Google-managed and self-managed cert types supported
- Wildcard issuance via DNS-01 with Google-managed certs (added 2024)
- Native Cloud Run domain mapping with auto-issuance
The map-based model is genuinely good. Instead of binding individual certs to load balancer frontends, you build a cert map (think: routing table for TLS), associate it once, and add or remove cert map entries as domains come and go. Renewal events don't touch the LB config at all. For 47-day rotation, this is the correct architectural shape.
Where it falls short for mid-market:
- No way to issue certs for non-GCP destinations
- No support for external DNS providers in DNS-01 challenges for Google-managed certs
- Cloud HSM integration exists but is separate billing
- Certificate Authority Service runs about $200/month per CA pool, similar to ACM Private CA pricing
Across the 90-cert GCP estate I've run, Certificate Manager handled 47-day lifetimes gracefully because the cert map decouples renewal from binding. But "your entire stack lives in GCP" is rare in mid-market. Most customers I've worked with run GCP for ML workloads and AWS or Azure for everything else, which means Certificate Manager solves part of the problem at best.
The Multi-Cloud Reality: Where All Three Fall Apart
Roughly three-quarters of mid-market companies run multi-cloud or hybrid infrastructure by 2026, which means none of these tools alone is enough. The specific failure modes: certs that need to span clouds, inconsistent renewal windows, no unified visibility, three different IAM models for the same security primitive. Teams end up writing a wrapper on top of each provider's wrapper.
Common failure patterns I've debugged:
- Cloudflare in front of multi-cloud origins: provision the public cert via ACM for AWS termination, separately via Key Vault for Azure, and a third time on the Cloudflare edge. Three rotation schedules, three monitoring blind spots.
- Internal CA crossing cloud boundaries: a wildcard issued by an internal CA in ACM Private CA needs to land on a GCP Cloud Run service. There is no clean integration path. You export the chain, store it as a self-managed cert in Certificate Manager, and now you've got two sources of truth.
- IAM divergence: ACM uses IAM policies, Key Vault uses Azure RBAC plus access policies (RBAC-only since the 2024 migration), Certificate Manager uses GCP IAM with project-level scope by default. The same on-call engineer needs three mental models to debug a permission failure at 3am.
Nobody has a real cross-cloud cert API. AWS won't tell you when an Azure cert is expiring. Azure won't tell you when an ACM cert bound to an App Service backend is about to roll. The result is what I call certificate sprawl: the same logical cert exists in three places, the renewal happens in one, and the other two silently serve stale versions until something breaks.
CertPulse exists to fill this multi-cloud TLS gap — CertPulse discovers and monitors certificates across clouds without trying to be the issuance authority. There's a longer post on what actually breaks in certificate monitoring at scale for the full failure taxonomy.
47-Day Certificates Change the Math
When CA/Browser Forum SC-081v3 fully lands by March 2029, certs will renew roughly 8x more often than today's 398-day baseline. ACM is already auto-rotating and mostly fine. Key Vault transaction costs scale linearly with renewal frequency, hitting real budget. Certificate Manager handles it gracefully but only inside GCP. The actual cost shift is less about issuance and more about validation and propagation.
Per-provider breakdown for the 47-day reality:
| Provider | Rotation cost impact | Operational impact |
|---|---|---|
| ACM | Minimal (rotations free) | CloudFront propagation: 5-15 min globally; ~1-2 hours edge propagation per cert per year at 8 renewals |
| Key Vault (standard) | ~8x transaction costs; 500-cert estate moves from ~$30/month to ~$240/month | Tolerable but real money |
| Key Vault (premium HSM) | Hits significantly harder | Premium-tier scaling is the budget risk |
| Certificate Manager | No per-rotation cost | Cert map architecture absorbs the increase cleanly |
The propagation problem nobody talks about: shorter lifetimes mean more renewals, which means more chances for the renewal-deployment gap to bite. A renewal that succeeds at the cert manager but doesn't propagate to the edge is invisible until the old cert hits its 47-day wall and something serves expired. At 398 days you had time to notice. At 47 days you have a week of buffer if you're lucky.
The full 47-day timeline phases in over 2026-2029, so this isn't an immediate emergency. But the architectural decisions you make this year compound. If your monitoring isn't ready for 47-day certificate lifetime, your alerts need to fire days earlier and your validation needs to confirm the cert actually deployed, not just renewed.
AWS ACM vs Azure Key Vault vs Certificate Manager: What I'd Actually Pick
For single-cloud deployments, use the native option without overthinking. ACM for AWS, Key Vault for Azure, Certificate Manager for GCP. For multi-cloud or hybrid, none alone is enough; you need a layer above for visibility and alerting. The criteria that actually matter are visibility, alerting lead time, and automation reach — not feature parity.
Recommendation matrix:
| Deployment shape | Recommendation |
|---|---|
| Single-cloud AWS | ACM. Accept the CloudFront us-east-1 pin and Private CA price tag if you need internal PKI |
| Single-cloud Azure | Key Vault certificates. Budget for transactions, automate the App Service binding step explicitly |
| Single-cloud GCP | Certificate Manager, no contest. Design is closest to 47-day shape |
| Multi-cloud (AWS/Azure/GCP combo) | Native per-cloud for issuance, layer monitoring on top |
| Hybrid (cloud + on-prem) | Per-cloud native for cloud certs, your own PKI or HashiCorp Vault for on-prem, monitoring across both |
| Edge-fronted (Cloudflare/Fastly + cloud origins) | Two cert sources minimum, monitor both |
The aws acm vs azure key vault decision rarely happens in isolation. It's usually "we're already on AWS, what do we use" or the same for Azure. The interesting decision is what sits above all of them. Build vs buy comes down to engineering time and cloud account count. The build approach is documented in a walkthrough of cross-account certificate audit. The manual approach scales until it doesn't — for most teams, around 200 certs or 5+ accounts.
Honest bias disclosure: CertPulse operates in the multi-cloud monitoring layer, so I'm not neutral on whether the gap is real. It is, whether or not you use CertPulse. The layer above the cloud-native managers is something you'll either build or buy. The math depends on accumulated certificate sprawl and available engineering bandwidth.
FAQ
Is AWS ACM cheaper than Azure Key Vault?
For public certificates, yes. ACM public certs are free with no transaction billing. Key Vault charges per cryptographic operation, which compounds with rotation frequency. For private CA, both are roughly equivalent — ACM Private CA at $400/month per CA, Azure's Certificate Authority equivalents priced similarly. The cost differential gets sharper as 47-day lifetimes increase rotation frequency by roughly 8x.
Can you use ACM certificates outside AWS?
No, not for public certificates. ACM doesn't allow private key export for publicly-trusted certs. ACM Private CA can issue exportable certs, but you're paying $400/month per CA for the privilege. If you need a cert that lives on a Cloudflare edge or non-AWS load balancer, issue it via Let's Encrypt, DigiCert, or another standalone CA.
Does Google Certificate Manager support DNS-01 with non-Google DNS?
Limited support. Google-managed certs require Google DNS or a CAA record pointing to Google's CAs for managed validation. Self-managed certs work with any issuer, but then you handle renewal yourself. This is one reason Certificate Manager is the wrong answer for multi-cloud TLS — the validation path assumes you're inside the GCP boundary.
How do 47-day certificates change costs across providers?
ACM stays roughly free since rotations are free; propagation is the soft cost. Key Vault transaction billing scales linearly — expect ~8x current rotation costs by 2029. Certificate Manager scales gracefully because the cert map architecture absorbs frequent rotations without re-binding. The bigger cost shift is operational: more frequent validation and propagation checks, which is where monitoring tools justify themselves.
Should I use a single cert manager across multiple clouds?
No, and the option doesn't really exist. Each cloud's manager only meaningfully integrates with its own services. The pragmatic pattern is per-cloud native issuance with a unified monitoring layer above. That layer can be self-built (cron job plus scripts pulling from each provider's API) or a tool like CertPulse. The choice depends on team bandwidth and how many clouds you're spanning.
This is why we built CertPulse
CertPulse connects to your AWS, Azure, and GCP accounts, enumerates every certificate, monitors your external endpoints, and watches Certificate Transparency logs. One dashboard for every cert. Alerts when auto-renewal fails. Alerts when certs approach expiry. Alerts when someone issues a cert for your domain that you didn't request.
If you're looking for complete certificate visibility without maintaining scripts, we can get you there in about 5 minutes.