top of page

Secrets Manager vs. Parameter Store: Which One Should You Really Use?

  • Writer: Ran Isenberg
    Ran Isenberg
  • 10 minutes ago
  • 4 min read
Secrets Manager vs. Parameter Store: Which One Should You Really Use?
Secrets Manager vs. Parameter Store: Which One Should You Really Use?

Whenever I review a low-level design from one of my engineers and a secret is required—an API key, database credential, or any sensitive value—someone inevitably asks: Should we use AWS Secrets Manager or SSM Parameter Store (SecureString) to store it?

The answer isn’t always straightforward.

In this blog post, I’ll explain the key differences and pros and cons of the two services and share my recommendation on when to use them based on my real-world experience.

Table of Contents

Services Introduction

Let's see how AWS describes these two services:


SSM Parameter Store

Parameter Store, a tool in AWS Systems Manager, provides secure, hierarchical storage for configuration data management and secrets management - AWS

SSM Parameter Store lets you store configuration data and secrets as key-value pairs. Each parameter has a hierarchical key path (e.g., /service/env/db-password) that helps organize and scope access using IAM. The value can be a simple string, a SecureString (encrypted with KMS), or even structured data like JSON, especially when using the Advanced tier for features like versioning, larger values, and policies. Advanced parameters come with benefits such as increased quota (100,000 from 10,000) and increased size (8KB from 4KB) but at an added cost (read more about limitations and quotas here).

Secrets Manager

AWS Secrets Manager helps you manage, retrieve, and rotate database credentials, application credentials, OAuth tokens, API keys, and other secrets throughout their lifecycles - AWS

As the name suggests, AWS Secrets Manager is purpose-built to manage the full lifecycle of secrets. It offers two types of secret rotations: managed and unmanaged. The Managed secret rotation supports several AWS Database credentials, while with the non-managed secret rotation, you can write a Lambda function that implements the logic rotation. Other features include cross-region replication, versioning, and IaC support. Secrets can be as large as 64KB (I'm not sure why you'd need it, but it's an option!), much more than SSM's 4KB or 8 KB.

While it comes at a higher cost, you're paying for a more feature-rich managed solution.

But do you need all those extra features?


Am I Seeing Double?

The descriptions above are very similar in terms of secret management. However, SSM mentions configuration data management, which has a broader scope and is unrelated to secrets. It also enters the realm of dynamic configuration where AppConfig reigns supreme.

I covered AppConfig, dynamic configurations, and feature flags in my best practices series: AWS Lambda Cookbook - Part 6 - Configuration & Feature Flags Best Practices.

The Showdown

Let's compare the two services from a wide variety of aspects.

Feature

SSM Parameter Store

Secrets Manager

Storage Cost

Standard: Free


Advanced: $0.05/param/month

$0.40 per secret per month. A replica secret is considered a distinct secret and will also be billed at $0.40 per replica per month. For secrets that are stored for less than a month, the price is prorated (based on the number of hours.)

API Cost

Standard: Free


Advanced:

$0.05 per 10K API calls

$0.05 per 10,000 API calls.

Secret Rotation

No built-in rotation


Custom via Lambda/EventBridge

Built-in

Native RDS/Aurora support

Encryption

Uses default KMS/CMK

Uses default KMS/CMK

IAM Access Control

Yes

Yes

Versioning

Standard: Only latest version


Advanced: Up to 100 versions

Cross-Account Sharing

Role delegation

Role delegation or resource based policies

IaC Support

Yes for regular, but not for SecureString (not safe, stored in CF template)

Full support.

Tag Support

Yes

Yes

Managed DB secrets integration

No

SDKs

Cross region replication

no native support, need to implement yourself

Maximum size

Standard: 4 KB Advanced: 8 KB

64KB

Max Parameters / Secrets

Standard: 10,000 Advanced: 100,000

500,000 secrets per account per region

Side note: performance is insignificant, as your secrets don't change rapidly. You should fetch and store the values in your in-memory cache to reduce API calls and boost performance.

Let's translate this table into a recommendation.

Summary - Decision Time

In the end, context matters, and it depends on what your needs and constraints are.

I've created the following cheat sheet to help you make a decision:


Use SSM Parameter Store:

  • For non-sensitive configs or free/low-cost parameter storage. It is ideal for cross-account or cross-stack sharing information such as IDs, ARNs, service domains via CDK or CloudFormation. This is my most common usage for SSM parameter store keys.

  • You need to store secrets without requiring rotation or secure IaC support. Just note: defining SecureString values inline in IaC (like CDK or CFN) will expose them.

  • You want to avoid the extra cost of Secrets Manager, and you can live without built-in rotation or replication.


Use Secrets Manager:

  • For credentials, tokens, and API keys needing one or more of the following: rotation, versioning, and cross-region support.

  • To get automatically managed secret rotation for Amazon RDS, Amazon Aurora, Amazon Redshift, or Amazon DocumentDB.

  • You can write your rotation mechanism for other use cases. Just implement the four steps of rotation as described here. This method can even replace third-party access keys.

  • Best suited for secure IaC usage - for example, AWS CDK or CloudFormation.

  • A managed secret lifecycle is worth the cost, especially in regulated and enterprise environments.


As you can see from the recommendation above, it's not always straightforward. Context matters and your constraints make a difference. Use the AWS pricing calculator - it's your friend; plan ahead!

bottom of page