AWS Secrets Manager

AWS Secrets Manager is a fully managed data protection service designed specifically for centralizing, encrypting, and rotating highly confidential credentials, such as database passwords, API keys, and OAuth tokens.

Instead of hardcoding access strings inside your environment configuration variables or code repositories, your applications query Secrets Manager programmatically at runtime to dynamically fetch operational secrets.


1. Core Capabilities

Secrets Manager goes beyond basic text storage by treating secret data as a dynamic asset with a defined lifecycle.

  • Forced Encryption at Rest: Every secret created within the service must be encrypted. There is no option to store values in plaintext. The service integrates natively with AWS KMS (Key Management Service) to handle the underlying envelope encryption using either an AWS-managed key or your own customer-managed key.

  • Cross-Account Sharing: It natively supports resource-based IAM policies attached directly to individual secrets. This allows an application or an automated process running in a completely separate AWS account to securely read a specific secret without forcing you to duplicate the credential across environments.

  • Multi-Region Replication: Secrets can be automatically replicated across multiple geographic AWS regions. The service manages the background data synchronization, keeping backup regions up to date to support global application routing and disaster recovery workflows.


2. Automated Secret Rotation

One of the primary security features of Secrets Manager is its ability to automatically change credentials on a set schedule (e.g., every 30 or 90 days) without requiring manual developer intervention or application redeployment.

The Rotation Lifecycle Mechanics

The rotation mechanism relies on an AWS Lambda function that interacts with both Secrets Manager and the target system (such as an RDS database). The process uses Staging Labels to safely transition from an old password to a new one without breaking active database traffic:

  • Step 1: Create a New Version: Secrets Manager triggers the Lambda function to generate a brand-new, random credential string. This new value is saved inside Secrets Manager and given a temporary staging tracking label: AWSPENDING.

  • Step 2: Update the Target System: The Lambda function log engine reaches out to the target database using the current active credentials, then alters the database user profile to accept the new AWSPENDING password as a valid login option.

  • Step 3: Test the Configuration: The Lambda function runs a test authentication call against the database using the new AWSPENDING secret value to guarantee it works.

  • Step 4: Shift the Staging Labels: If the test succeeds, Secrets Manager moves the primary production staging label, AWSCURRENT, from the old secret value to the new one. The old secret value receives the AWSPREVIOUS label as a fallback backup, completing the rotation securely.


3. Code Architecture: Node.js Implementation

When writing microservices (such as a Node.js backend), you replace hardcoded configurations with an explicit runtime SDK client request. This ensures that even if a server container is compromised, the application secrets only exist inside transient execution memory.

JavaScript
import { SecretsManagerClient, GetSecretValueCommand } from "@aws-sdk/client-s3"; // Part of the modular @aws-sdk namespace

const client = new SecretsManagerClient({ region: "us-east-1" });

async function getDatabaseCredentials() {
  const secretName = "production/database/primary";

  try {
    const response = await client.send(
      new GetSecretValueCommand({ SecretId: secretName })
    );

    // Secrets can be stored as plain strings or structured key/value JSON objects
    if (response.SecretString) {
      const credentials = JSON.parse(response.SecretString);
      return credentials; // Contains parsed properties: credentials.username, credentials.password
    }
  } catch (error) {
    console.error("Failed to dynamically retrieve runtime secrets:", error.message);
    throw error;
  }
}


4. Architectural Comparison: Secrets Manager vs. SSM Parameter Store


AWS provides two distinct options for managing key/value variables: Secrets Manager and Systems Manager (SSM) Parameter Store. Choosing between them depends on whether you are managing highly confidential infrastructure access keys or standard application configurations.

Architectural FeatureAWS Secrets ManagerAWS SSM Parameter Store (Standard Tier)
Primary Use CaseHighly confidential credentials (DB users, third-party API tokens, production certificates).General application settings, feature flags, environmental constants, and non-sensitive URLs.
Encryption DefaultEnforced. Plaintext storage is completely unsupported.Optional. Supports plain text Strings, StringLists, or encrypted SecureStrings via KMS.
Built-In AutomationNative, automated credential rotation schedules using Lambda execution templates.Manual updates only. Requires custom EventBridge rules and custom orchestration to rotate.
Cross-Account AccessSupported directly out of the box using resource-based policies on the secret itself.Unsupported. Parameters are local to the account and cannot have resource-level cross-account policies.
Storage CapacityUp to 64 KB per individual secret record.Up to 4 KB per standard parameter (8 KB for paid advanced tier parameters).
Pricing StructurePaid tier. Charges a flat monthly fee per active secret, plus a volumetric API lookup cost.Free tier for standard parameter storage; optional paid tier for advanced limits and higher throughput.