Skip to main content

AI & assistant-friendly summary

This section provides structured content for AI assistants and search engines. You can cite or summarize it when referencing this page.

Summary

import PricingHeroStats from '~/components/blog/PricingHeroStats. astro'; import PricingDimensionTable from '~/components/blog/PricingDimensionTable. astro'; import BillSurpriseCallout from '~/components/blog/BillSurpriseCallout

Key Facts

  • KMS keys cost $1/month each — the easy number
  • The hidden bill is request volume at $0
  • 03 per 10K calls, multi-region replicas that each bill $1/month independently, and asymmetric operations at 5× the symmetric rate
  • An S3 bucket with 100M SSE-KMS objects and an active read pattern can generate thousands per month in KMS requests alone
  • astro'; AWS KMS has the cleanest-looking pricing page on the AWS console: $1/month per customer-managed key, $0

Entity Definitions

Lambda
Lambda is an AWS service discussed in this article.
S3
S3 is an AWS service discussed in this article.
RDS
RDS is an AWS service discussed in this article.
Aurora
Aurora is an AWS service discussed in this article.
DynamoDB
DynamoDB is an AWS service discussed in this article.
CloudWatch
CloudWatch is an AWS service discussed in this article.
IAM
IAM is an AWS service discussed in this article.
Secrets Manager
Secrets Manager is an AWS service discussed in this article.

AWS KMS Pricing: Why a $1/Month Key Can Generate a $4,000/Month Bill

Quick summary: KMS keys cost $1/month each — the easy number. The hidden bill is request volume at $0.03 per 10K calls, multi-region replicas that each bill $1/month independently, and asymmetric operations at 5× the symmetric rate. An S3 bucket with 100M SSE-KMS objects and an active read pattern can generate thousands per month in KMS requests alone.

Key Takeaways

  • KMS keys cost $1/month each — the easy number
  • The hidden bill is request volume at $0
  • 03 per 10K calls, multi-region replicas that each bill $1/month independently, and asymmetric operations at 5× the symmetric rate
  • An S3 bucket with 100M SSE-KMS objects and an active read pattern can generate thousands per month in KMS requests alone
  • astro'; AWS KMS has the cleanest-looking pricing page on the AWS console: $1/month per customer-managed key, $0
AWS KMS Pricing: Why a $1/Month Key Can Generate a $4,000/Month Bill
Table of Contents

AWS KMS has the cleanest-looking pricing page on the AWS console: $1/month per customer-managed key, $0.03 per 10K requests, free tier of 20,000 requests on AWS-managed keys. Three numbers, easy to estimate. The reason KMS bills routinely surprise teams in the multi-thousand-per-month range is that all the leverage lives in request volume — which is invisible until someone correlates it back to the high-fanout services (S3, DynamoDB, Secrets Manager, EBS, RDS) actually generating the calls.

This post is the bill story. For key strategy (single-region vs multi-region, key aliases, key rotation), our KMS encryption architecture guide covers the design side; for the post-quantum migration economics, see our post-quantum KMS post.

The Five KMS Billing Dimensions

KMS pricing breakdown — us-east-1, June 2026

Prices in us-east-1

Five dimensions. The first ($1/key/month) is the page-one number; the others are where bills go sideways.

Customer-managed key (CMK)

$50.00

AWS-managed keys (aws/...) are free

Unit price
$1 / key / month
Example workload
50 application keys

Symmetric requests

$150.00

Encrypt, Decrypt, GenerateDataKey, ReEncrypt

Unit price
$0.03 / 10K requests
Example workload
50M Decrypt calls/month

Asymmetric requests

$150.00

RSA, ECDSA — 5× symmetric rate

Unit price
$0.15 / 10K requests
Example workload
10M Sign/Verify calls/month

Multi-region key replicas

$1,000.00

Each replica is its own KMS key

Unit price
$1 / replica / region / month
Example workload
200 keys × 5 regions

Post-quantum operations

Same as asymmetric

Same pricing tier as classical asymmetric

Unit price
$0.15 / 10K requests
Example workload
ML-KEM encapsulation

Free tier: 20,000 requests/month per account against AWS-managed keys. Customer-managed keys bill from request one.

Why an S3 Bucket Can Generate a Four-Figure KMS Bill

The most common high-bill pattern: an S3 bucket with SSE-KMS enabled using a customer-managed key, holding 100M+ objects, with an active read pattern. Without S3 Bucket Keys enabled, every GetObject and PutObject generates a KMS API call. At 100M reads/month on a busy bucket, the math is direct: 100,000,000 / 10,000 × $0.03 = $300/month — just for one bucket.

The compound problem is that teams often have dozens of high-volume buckets configured this way before anyone correlates the KMS line to the S3 access pattern.

The S3 SSE-KMS Worked Example

Consider a media-asset bucket: 50 TB of stored content, 100M GET requests/month, 5M PUT requests/month, SSE-KMS with a customer-managed key. The KMS bill without Bucket Keys:

100M-object SSE-KMS bucket — KMS bill with and without Bucket Keys

Prices in us-east-1

The bucket workload is unchanged. Enabling Bucket Keys is a configuration toggle.

Bucket Keys: disabled

$315.00

KMS request line; storage and S3 requests are separate

Unit price
105M KMS requests / mo
Example workload
100M GET + 5M PUT, 1:1 KMS call ratio

Bucket Keys: enabled (99% reduction)

$3.15

Same workload; the difference is configuration

Unit price
~1.05M KMS requests / mo
Example workload
Same traffic, batched data-key reuse

CMK monthly charge

$1.00

Same in both cases

Unit price
$1 / month
Example workload
One key fronting the bucket

Saving on this single bucket: $310.85/month. Multiply across a fleet of high-volume buckets to see fleet-wide impact.

The pattern repeats across DynamoDB, EBS snapshot encryption, and Secrets Manager. Anywhere a high-fanout service is encrypting many small operations, the per-request KMS line dwarfs the key charge.

Multi-Region Key Sprawl

Multi-region keys (MRKs) are useful when an application encrypts in one region and decrypts in another — disaster recovery patterns, multi-region active-active, cross-region data replication. They are expensive when teams enable MRK replication “just in case” across regions that never actually serve traffic.

Each MRK replica is billed at $1/month per region as an independent key. A 200-key fleet replicated to 5 regions is $1,000/month in key charges alone — before any request volume. Add the request volume in each region (every region’s KMS endpoint bills independently) and the MRK pattern becomes one of the most expensive KMS configurations.

Asymmetric Operations — 5× the Symmetric Rate

KMS bills asymmetric operations at $0.15 per 10K — five times the symmetric rate. The pricing reflects underlying compute: RSA and ECDSA operations are dramatically more expensive than AES on the HSMs. The pricing also includes post-quantum operations (ML-KEM key encapsulation, ML-DSA signing) at the same tier.

The waste pattern: using asymmetric keys for use cases that don’t actually need public-key cryptography. JWT signing for tokens consumed inside AWS, internal service-to-service auth, envelope encryption of at-rest data — all of these are correctly handled with symmetric keys at 1/5th the request cost. Asymmetric keys belong only on the boundary where you genuinely interact with external counterparties or need public-key verification.

What Each AWS Service Costs You in KMS Requests

Most teams discover the KMS bill by working backwards from a Cost Explorer line they cannot explain. The mapping from AWS service to KMS request behavior:

KMS request behavior by AWS service

Prices in any

How each service generates KMS API calls when configured with SSE-KMS (or equivalent CMK encryption).

S3 — without Bucket Keys

Up to $300/bucket
Unit price
1 KMS call per object operation
Example workload
100M reads/month → 100M KMS calls

S3 — with Bucket Keys

~$3/bucket
Unit price
~99% reduction
Example workload
100M reads → ~1M KMS calls

DynamoDB — CMK encryption

$150/mo per table
Unit price
1 KMS call per request
Example workload
50M GetItem/PutItem/mo

DynamoDB — DAX caching

Significantly reduced
Unit price
Cache hits skip KMS
Example workload
High cache hit ratio

Secrets Manager

$30/mo
Unit price
1 KMS call per GetSecretValue
Example workload
10M secret retrievals/mo

EBS volume encryption

Low (init-only)
Unit price
Per-volume init + per-snapshot init
Example workload
Rare at steady state

RDS / Aurora

Low (init-only)
Unit price
Per-snapshot, per-instance launch
Example workload
Steady-state ops are cached

Lambda environment variables (encrypted)

Adds up at scale
Unit price
1 KMS call per cold start
Example workload
High cold-start rate

CloudWatch Logs (CMK)

Can be material
Unit price
Per log-group write batch
Example workload
High-volume logging

Use CloudTrail to attribute KMS requests to the originating service — the EventSource field shows whether s3.amazonaws.com, dynamodb.amazonaws.com, etc. generated the call.

Common KMS Bill Surprises

When to Use CMKs vs AWS-Managed Keys vs CloudHSM

AWS-managed keys are the default for low-sensitivity workloads; CMKs for granular control; CloudHSM only when dedicated hardware is mandated.

Use when

  • AWS-managed keys (aws/s3, aws/rds, aws/secretsmanager): low-sensitivity internal workloads where granular IAM and cross-account sharing are not needed
  • Customer-managed keys: production data, regulated workloads, cross-account sharing, granular IAM at the key-policy level, customer-required key ownership
  • Multi-region CMKs: applications that genuinely encrypt in one region and decrypt in another — match the replica set to actual access pattern
  • CloudHSM: regulatory requirements mandating FIPS 140-2 Level 3 with sole tenancy, PKCS#11 legacy applications, or workloads above ~700M KMS requests/month per region
  • Asymmetric CMKs: external-counterparty PKI use cases — JWT signing for tokens consumed outside AWS, document signing, end-to-end encryption with external parties

Avoid when

  • CMKs for low-sensitivity internal workloads where the $1/month per key compounds across hundreds of keys
  • MRKs replicated to regions with no actual traffic — pure waste
  • Asymmetric keys for internal use cases where symmetric keys would work — 5× the request cost
  • CloudHSM for workloads below 700M KMS requests/month where KMS itself is dramatically cheaper
  • SSE-KMS on S3 buckets without Bucket Keys enabled — the request volume becomes the bill

Default to AWS-managed keys; promote to CMKs only when the use case justifies it. Reverse decisions cost $1/key/month forever.

A 30-Day KMS Bill Cleanup Plan

The KMS line typically responds well to a focused cleanup. Three weeks is enough on most accounts.

Week 1 — Find the request-volume drivers. Use CloudTrail and CloudWatch metrics for KMS to identify which service generates the most KMS requests. The EventSource field on KMS CloudTrail events shows the originating service. Cross-reference against the Cost Explorer KMS line filtered by service tag.

Week 2 — Enable S3 Bucket Keys on every SSE-KMS bucket. Audit with aws s3api get-bucket-encryption --bucket <name> and look for "BucketKeyEnabled": false. Enable Bucket Keys on every bucket — the change is non-destructive and is non-controversial enough to ship across the fleet without per-bucket approval.

Week 3 — Audit MRK replicas and asymmetric usage. Find MRKs with aws kms list-keys filtered for MultiRegion=true in each region. Delete replicas in regions with no KMS data events in CloudTrail over the last 60 days. Audit asymmetric keys and downgrade to symmetric where the use case doesn’t require public-key crypto.

For workloads encrypting via S3, run the S3 storage and request math against our S3 pricing calculator — the S3 and KMS lines compound and are easier to optimize together.

What This Post Doesn’t Cover

  • CloudHSM cluster sizing and break-even modeling beyond the rough 700M-requests/month threshold — covered in a future post when the comparative math is more nuanced.
  • External Key Stores (XKS) pricing — XKS pricing tracks symmetric KMS for now; if you need XKS, the request volume math is identical.
  • Key rotation costs — automatic key rotation is free; manual key rotation involves creating a new CMK ($1/month extra until the old one is deleted) and re-encrypting data.
  • Post-quantum migration economics in depth — covered in the post-quantum KMS post.

If You Only Do One Thing This Week

Enable S3 Bucket Keys on every SSE-KMS bucket in your account. The change is non-destructive, applies only to new traffic, and on high-volume buckets it can cut the KMS line for that bucket by 99%. The single command aws s3api put-bucket-encryption --bucket <name> --server-side-encryption-configuration '{"Rules":[{"ApplyServerSideEncryptionByDefault":{"SSEAlgorithm":"aws:kms","KMSMasterKeyID":"<key-arn>"},"BucketKeyEnabled":true}]}' ships in any tooling — Terraform, CDK, CloudFormation, console. Pair with a Service Control Policy that requires Bucket Keys on new buckets and the fleet stays compliant going forward.

For the broader KMS strategy beyond the bill, the KMS encryption architecture guide covers single-region vs multi-region trade-offs and key-policy patterns for cross-account use.

PP
Palaniappan P

AWS Cloud Architect & AI Expert

AWS-certified cloud architect and AI expert with deep expertise in cloud migrations, cost optimization, and generative AI on AWS.

AWS ArchitectureCloud MigrationGenAI on AWSCost OptimizationDevOps

Recommended Reading

Explore All Articles »
8 min

Amazon ECR Pricing: When $0.10/GB Becomes the Most Expensive Storage in Your Account

ECR storage is $0.10/GB-month — twice S3 Standard. Cross-region replication doubles or triples that. Enhanced scanning bills $0.09 per image scanned, on every push. Pull-through caches for Docker Hub and ECR Public add storage plus data-transfer-in. A 200-service organization with 10 environments and 3 regions can spend more on ECR than on the EKS clusters pulling from it.