AWS SAM and Secrets Manager integration architecture diagram showing secure secret retrieval

Hardcoding secrets in your serverless applications is like leaving your house keys under the doormat – convenient but dangerously insecure. AWS Secrets Manager integration with AWS SAM provides a robust solution for managing sensitive credentials in your serverless applications while maintaining security and compliance.

Why Secrets Manager is Essential for SAM Applications

Traditional approaches to secret management in serverless applications create significant security risks:

  • 🔑 Hardcoded credentials in source code
  • 🔓 Environment variables stored in plaintext
  • 🔄 Manual rotation processes leading to human error
  • 🚫 Lack of audit trails for secret access

Explaining to a 6-Year-Old

Imagine you have a special box where you keep all your secret treasures. Instead of hiding the key where anyone could find it, you have a magical bird that only brings the key when you say the right magic words. AWS Secrets Manager is like that magical bird – it safely delivers secrets only to authorized applications when they need them!

Secrets Manager vs. Alternatives

SolutionSecurity LevelRotation SupportSAM Integration
AWS Secrets Manager★★★★★AutomaticNative
Parameter Store★★★★☆ManualNative
Environment Variables★★☆☆☆NoneBasic
Hardcoded Values★☆☆☆☆NonePoor

Step-by-Step SAM Integration

1. Creating a Secret in AWS Console

Navigate to Secrets Manager and create a new secret:

  • Select “Other type of secret”
  • Add key-value pairs (e.g., API_KEY=my-secret-value)
  • Name your secret (e.g., prod/my-app/api-credentials)

2. Configuring SAM Template

Add secret reference to your SAM template.yml:

Resources:
  MyLambdaFunction:
    Type: AWS::Serverless::Function
    Properties:
      Environment:
        Variables:
          SECRET_ARN: !Ref MySecret
      Policies:
        - SecretsManagerGetSecretValuePolicy:
            SecretArn: !Ref MySecret
            
  MySecret:
    Type: AWS::SecretsManager::Secret
    Properties:
      Name: prod/my-app/api-credentials
      Description: "API credentials for production environment"

3. Retrieving Secrets in Lambda Function

Use AWS SDK to retrieve secrets in your Lambda handler:

const AWS = require('aws-sdk');
const secretsManager = new AWS.SecretsManager();

exports.handler = async (event) => {
  const secretData = await secretsManager.getSecretValue({
    SecretId: process.env.SECRET_ARN
  }).promise();
  
  const secrets = JSON.parse(secretData.SecretString);
  const apiKey = secrets.API_KEY;
  
  // Use the secret securely
};

Automatic Secret Rotation

Secrets Manager’s killer feature is automatic rotation:

  1. Create a Lambda rotation function
  2. Configure rotation schedule (30-90 days recommended)
  3. Define rotation template in SAM:
MyRotationSchedule:
  Type: AWS::SecretsManager::RotationSchedule
  Properties:
    SecretId: !Ref MySecret
    RotationLambdaARN: !GetAtt RotationFunction.Arn
    RotationRules:
      AutomaticallyAfterDays: 45

Security Alert: Common Mistakes

Avoid these critical errors when using Secrets Manager:

  • Granting excessive IAM permissions to Lambda functions
  • Caching secrets beyond their TTL expiration
  • Logging secret values to CloudWatch
  • Not versioning secrets during rotation

Best Practices for SAM Implementation

Environment-Specific Secrets

Use SAM parameter overrides to manage secrets per environment:

sam deploy --parameter-overrides 
  "MySecret=prod/my-app/api-credentials"

Secret Versioning

Always reference specific secret versions to prevent unexpected changes:

SECRET_ARN: arn:aws:secretsmanager:us-east-1:1234567890:secret:prod/my-app/api-credentials:VERSION_ID

Cost Optimization

Secrets Manager charges per secret and per API call. Implement caching with:

  • Lambda extension caching
  • Singleton pattern in execution context
  • Appropriate TTL settings

Advanced Integration Patterns

Cross-Account Secrets

Access secrets from different AWS accounts using resource policies:

MySecretPolicy:
  Type: AWS::SecretsManager::ResourcePolicy
  Properties:
    SecretId: !Ref MySecret
    ResourcePolicy:
      Version: "2012-10-17"
      Statement:
        - Effect: Allow
          Principal: {"AWS": "arn:aws:iam::TARGET_ACCOUNT:root"}
          Action: secretsmanager:GetSecretValue
          Resource: "*"

Database Credential Rotation

Automatically rotate database credentials with Secrets Manager’s built-in support for RDS, Redshift, and DocumentDB. Learn more in our SAM Best Practices Guide.

Troubleshooting Common Issues

  • Permission Errors: Verify IAM policies with secretsmanager:GetSecretValue
  • Version Mismatch: Check if you’re referencing the correct secret version
  • Cold Start Latency: Implement secret caching with TTL
  • Rotation Failures: Check CloudWatch logs of rotation Lambda

For debugging techniques, see our Lambda Debugging Guide.

Security Compliance Benefits

Using Secrets Manager with SAM helps meet compliance requirements:

  • 🔒 Encryption at rest with KMS
  • 📝 Detailed audit trails via CloudTrail
  • 🔄 Automated rotation for PCI DSS, HIPAA, and SOC 2
  • 🚫 Elimination of hardcoded credentials

For regulated industries, explore our Compliance Guide.

Download Full HTML Guide