blog.rust.gay

Secrets Manager vs Parameter Store: Choosing the Right AWS Service for Secrets and Config

AWS gives you more than one place to store sensitive values, and the names can make the choice look simpler than it is. AWS Secrets Manager and AWS Systems Manager Parameter Store both store named data, both integrate with AWS IAM, and both can encrypt values with AWS KMS. The difference is intent: Secrets Manager is built for secret lifecycle management, while Parameter Store is a general configuration store that can also hold encrypted strings.

Picking the wrong service usually does not fail on day one. It fails later, when you need credential rotation, cross-Region disaster recovery, a clear audit trail for secret access, or a cost model that still makes sense after the parameter count grows. This post compares the two services using AWS documentation as the primary source and calls out where teams often combine them.

What each service is for

Secrets Manager's documentation describes it as a service for managing, retrieving, and rotating database credentials, application credentials, OAuth tokens, API keys, and other secrets throughout their lifecycles. That lifecycle focus is the key distinction. Secrets Manager is not just a key-value store; it is designed around secret creation, access control, rotation, replication, and monitoring.

Parameter Store is part of AWS Systems Manager. AWS describes it as centralized, hierarchical storage for configuration data. Parameters can be plain String values, StringList values, or encrypted SecureString values. The Parameter Store guide is explicit about the boundary: SecureString can encrypt configuration values with KMS, but for secrets such as database credentials, API keys, or tokens, AWS recommends Secrets Manager because it provides purpose-built controls including automatic rotation and cross-Region replication.

A practical rule follows from that guidance:

Need Better default Why
Static app config, feature toggles stored as config, AMI IDs, endpoint URLs Parameter Store Hierarchical names, versioning, and standard parameters for many config cases.
Database passwords, API keys, OAuth tokens, third-party credentials Secrets Manager Rotation, replica secrets, and secret-focused lifecycle features.
Encrypted config that is not a rotating credential Parameter Store SecureString KMS encryption without paying for full secret lifecycle features you may not need.
One application interface for both config and secrets Both, integrated Parameter Store can reference a Secrets Manager secret.

Security model and access control

Both services rely on IAM for authorization and KMS for encryption. Secrets Manager encrypts secrets at rest using KMS keys that you own and control, and it transmits decrypted secret values over TLS when an application retrieves them. Its features page also highlights fine-grained IAM policies, resource-based policies, VPC endpoints to keep traffic inside the AWS network, and client-side caching libraries to improve availability and reduce latency during retrieval.

Parameter Store supports encryption only when you choose the SecureString type. That detail matters because teams sometimes say "Parameter Store is encrypted" as a blanket statement. It is encrypted when configured as SecureString with KMS; plain String and StringList parameters are configuration data, not secret storage. Parameter Store also integrates with IAM, so you can scope access by parameter path, such as allowing an application role to read /myapp/prod/* but not /myapp/dev/*.

For compliance and operations, the audit story is also different in emphasis. Secrets Manager documentation calls out integration with AWS CloudTrail, Amazon CloudWatch, Amazon EventBridge, AWS Config rules, and notification paths for rotation and unused-secret monitoring. Parameter Store supports versioning, change events, and IAM-based governance, but it is not presented as the primary service for secret rotation evidence and secret-specific lifecycle controls.

Rotation, replication, and lifecycle

Rotation is the clearest technical divider. Secrets Manager can rotate secrets on a schedule or on demand through the console, AWS SDK, or AWS CLI. AWS documents native rotation support for databases hosted on Amazon RDS and Amazon DocumentDB, clusters hosted on Amazon Redshift, and selected third-party SaaS providers. For other services, Secrets Manager can be extended with Lambda rotation functions. Managed rotation options also exist for supported integrations, which can reduce the need to run custom rotation code.

Parameter Store does not provide automatic credential rotation. If you store a database password as a SecureString, you own the process for changing the password at the target system, updating every consumer, and verifying that old credentials are no longer in use. That can be acceptable for low-change values, but it is operational debt for real credentials.

Cross-Region behavior is another difference. Secrets Manager can replicate secrets to multiple AWS Regions and keep regional read replicas in sync with the primary secret. This is useful for multi-Region applications and disaster recovery designs where applications in another Region need local access to the same logical secret. Parameter Store does not offer the same built-in secret replication model; cross-Region configuration patterns usually require separate parameters, automation, or application-level design.

Lifecycle features also show up in smaller places. Secrets Manager tracks secret versions as part of rotation and retrieval flows, supports staging labels, and has explicit pricing and operational behavior around deletion and monitoring. Parameter Store keeps up to 100 versions per parameter, which is useful for reconstructing prior configuration values, but version history is not the same as secret rotation.

Tiers, limits, and pricing shape

The cost models are easy to miscompare because they charge for different units.

For Secrets Manager, AWS's pricing page describes charges based on the number of secrets stored and API calls made. The page also states that pricing is usage-based with no upfront costs or long-term contracts. It lists per-secret-per-month and per-10,000-API-call pricing dimensions and provides examples for production applications and ephemeral secrets. Because cloud pricing can change by Region and over time, treat those numbers as verified against the pricing page at the time you design the system, then confirm current rates before budgeting.

For Parameter Store, the service has standard and advanced tiers. AWS Systems Manager documentation states that standard parameters are the default and are suited to most configuration data. Standard tier supports up to 10,000 parameters per AWS account and Region, with a maximum value size of 4 KB. Advanced tier supports up to 100,000 parameters per account and Region, 8 KB values, parameter policies, sharing across AWS accounts, and additional data types. Advanced parameters are not downgradeable.

The Systems Manager pricing page shows that standard parameters have no additional storage charge, while advanced parameters are billed per advanced parameter per month on a prorated hourly basis. API interaction pricing depends on parameter type and throughput mode: advanced parameters incur per-interaction charges, and standard parameters can also incur interaction charges when higher throughput is enabled. This means a "cheap" Parameter Store design can become less cheap if it stores many advanced parameters or makes high-volume API calls.

The decision is rarely "Secrets Manager is expensive" or "Parameter Store is free." A better question is: are you paying for secret lifecycle capabilities you actually need? If you need rotation, replicas, and secret-specific integrations, Secrets Manager's price is buying operational control. If you need plain configuration at scale, Parameter Store's standard tier is often the right fit.

A useful integration pattern

The services do not have to compete inside the same application. AWS documents a pattern where Parameter Store references a secret stored in Secrets Manager. This is useful when application code or deployment tooling already reads configuration from Parameter Store paths, but a specific value should keep the lifecycle benefits of Secrets Manager.

In that integration, Parameter Store acts as an access path or naming bridge, while Secrets Manager remains the system of record for the sensitive value. When you reference a Secrets Manager secret from Parameter Store, the parameter name must use the reserved path prefix /aws/reference/secretsmanager/ (for example, /aws/reference/secretsmanager/myapp/db/password). The Systems Manager documentation also points readers to the "Referencing AWS Secrets Manager secrets from Parameter Store parameters" guidance for the full setup.

This pattern is not a reason to store the same credential twice. Duplicating a password as both a Secrets Manager secret and a separate Parameter Store SecureString creates two sources of truth. If rotation updates one but not the other, you get an outage with good intentions. Use the reference model, or choose one authoritative store and make the ownership explicit.

How to choose

Use Secrets Manager when the value is a credential or token with a lifecycle: it must be rotated, audited as a secret, shared safely across Regions, or managed through native integrations. It is the safer default for database passwords, application secrets, and third-party API credentials.

Use Parameter Store when the value is configuration: environment identifiers, service endpoints, AMI IDs, non-secret tuning values, or encrypted configuration that does not need automatic rotation. Standard parameters are a good fit for many application settings; advanced parameters are for cases that need larger values, policies, or sharing.

If you are unsure, ask two questions. First, would a leaked value let someone authenticate as a system or user? Second, does the value need scheduled rotation without application redeploys? A "yes" to either question usually points to Secrets Manager. A "no" to both, especially when the data is operational configuration, usually points to Parameter Store.

Conclusion

Secrets Manager and Parameter Store overlap just enough to cause architecture debates, but AWS's own guidance separates them cleanly. Secrets Manager is for secrets and their lifecycle. Parameter Store is for configuration data, with SecureString available when encryption is needed but full secret management is not.

The best designs make ownership obvious. Store rotating credentials in Secrets Manager, store configuration in Parameter Store, and use Parameter Store references to Secrets Manager when a unified parameter path helps the application. That keeps secret rotation, auditability, and cost decisions aligned with the kind of data you are actually storing.

Sources


← back to posts