การใช้ Parameter Store และ Secrets Manager อย่างปลอดภัย

Sharing is caring!

บทนำ

ในยุคของ Cloud-native Application การเก็บค่า Configuration และ Secrets เช่น รหัสผ่าน, Token, API Key ไว้อย่างปลอดภัยคือสิ่งสำคัญที่สุด เพราะข้อมูลเหล่านี้คือ “กุญแจสำคัญ” ของระบบ หากจัดการผิดวิธีอาจเปิดช่องให้ผู้ไม่หวังดีเข้าถึงระบบของคุณได้โดยง่าย

บน AWS มีบริการหลัก 2 ตัวที่ใช้จัดการข้อมูลลักษณะนี้ คือ Parameter Store และ Secrets Manager ทั้งสองบริการสามารถเก็บข้อมูลได้ปลอดภัย พร้อมรองรับการเข้ารหัสด้วย AWS KMS และสามารถเข้าถึงผ่าน API หรือ SDK ได้โดยตรง

Parameter Store คืออะไร?

AWS Systems Manager Parameter Store เป็นบริการที่ช่วยเก็บค่า Configuration และ Parameter เช่น Database Endpoint, Environment Variable, API URL เป็นต้น ข้อมูลสามารถกำหนดได้ทั้งแบบ Plaintext และ Encrypted

  • ✅ เก็บได้ทั้ง Key-Value และ Hierarchical Structure
  • ✅ สามารถใช้ร่วมกับ IAM เพื่อจำกัดสิทธิ์การเข้าถึง
  • ✅ รองรับการเข้ารหัสด้วย AWS KMS
  • ✅ เข้าถึงได้ผ่าน AWS CLI, SDK หรือ Lambda

ตัวอย่างการสร้าง Parameter ผ่าน AWS CLI

aws ssm put-parameter \
  --name "/prod/database/password" \
  --value "myStrongPassword123!" \
  --type "SecureString" \
  --key-id "alias/aws/ssm"
    

ค่านี้จะถูกเข้ารหัสโดยอัตโนมัติด้วย AWS KMS และสามารถดึงไปใช้ได้เฉพาะ IAM Role ที่ได้รับอนุญาต

aws ssm get-parameter \
  --name "/prod/database/password" \
  --with-decryption
    

Secrets Manager คืออะไร?

AWS Secrets Manager เป็นบริการที่ใช้จัดการ Secrets เช่น Credential ของ Database, OAuth Token, หรือ API Key พร้อมฟีเจอร์เพิ่มเติมที่เหนือกว่า Parameter Store

  • 🔒 รองรับการหมุนเวียนรหัส (Automatic Rotation)
  • 🔑 เข้ารหัสทุก Secret ด้วย KMS Key
  • 📦 มี API สำหรับเข้าถึงได้จาก Lambda, ECS, EKS, EC2
  • 📊 สามารถ Audit การเข้าถึงผ่าน CloudTrail

ตัวอย่างการสร้าง Secret ด้วย CLI

aws secretsmanager create-secret \
  --name "prod/db-credentials" \
  --description "Database credentials for production" \
  --secret-string '{"username":"admin","password":"MySecretPass"}'
    

และสามารถดึงค่ามาใช้งานได้ดังนี้:

aws secretsmanager get-secret-value \
  --secret-id "prod/db-credentials"
    

การใช้งาน Parameter Store กับ Lambda

สามารถเรียกค่าจาก Parameter Store ภายใน Lambda ได้โดยใช้ SDK เช่นตัวอย่าง Node.js ด้านล่าง:

import AWS from 'aws-sdk';
const ssm = new AWS.SSM();

export const handler = async () => {
  const result = await ssm.getParameter({
    Name: '/prod/database/password',
    WithDecryption: true
  }).promise();

  const password = result.Parameter.Value;
  console.log("Database Password Loaded");
};
    

การใช้งาน Secrets Manager กับ ECS

ใน ECS สามารถ Inject Secret เข้า Environment Variable ได้โดยตรงใน Task Definition:

{
  "secrets": [
    {
      "name": "DB_PASSWORD",
      "valueFrom": "arn:aws:secretsmanager:ap-southeast-1:123456789012:secret:prod/db-credentials-AbCdE"
    }
  ]
}
    

เมื่อ Container เริ่มทำงาน ค่า Secret จะถูกโหลดเข้า Environment Variable โดยอัตโนมัติ และเข้ารหัสตลอดการส่งผ่าน

การหมุนเวียนรหัส (Secret Rotation)

Secrets Manager สามารถหมุนเวียนรหัสแบบอัตโนมัติได้ โดยใช้ AWS Lambda ตัวอย่างเช่นรหัสผ่าน Database ที่จะอัปเดตทุก 30 วันโดยอัตโนมัติ

aws secretsmanager rotate-secret \
  --secret-id "prod/db-credentials" \
  --rotation-lambda-arn "arn:aws:lambda:ap-southeast-1:123456789012:function:rotateDBSecret" \
  --rotation-rules AutomaticallyAfterDays=30
    

การใช้ KMS เพื่อเพิ่มความปลอดภัย

ทั้ง Parameter Store และ Secrets Manager ใช้ AWS KMS ในการเข้ารหัสข้อมูล โดยเราสามารถกำหนด Key เฉพาะสำหรับแอปของเราได้

aws kms create-key --description "Key for Secrets Encryption"
    

และใช้ใน Secrets Manager ได้ทันที:

aws secretsmanager create-secret \
  --name "prod/api-token" \
  --kms-key-id "arn:aws:kms:ap-southeast-1:123456789012:key/abcd-1234-efgh"
    

Best Practices สำหรับการใช้งานอย่างปลอดภัย

  • ✅ จำกัดสิทธิ์ด้วย IAM Policy ให้เข้าถึงเฉพาะ Secret ที่จำเป็น
  • ✅ เปิดการเข้ารหัสด้วย KMS Key เสมอ
  • ✅ ใช้ Secret Rotation สำหรับข้อมูลสำคัญ เช่น DB Password
  • ✅ ห้ามเก็บ Secret ในโค้ดหรือ Git Repository
  • ✅ ติดตามการเข้าถึงผ่าน CloudTrail เพื่อ Audit

สรุป

การจัดการ Secrets อย่างปลอดภัยเป็นหัวใจสำคัญของการพัฒนาแอปบน AWS โดยการใช้ Parameter Store สำหรับ Config และ Secrets Manager สำหรับ Credentials คุณจะได้ระบบที่มีความปลอดภัยสูง, ควบคุมการเข้าถึงได้ละเอียด และสามารถหมุนเวียนรหัสได้อัตโนมัติ

เริ่มต้นวันนี้ด้วยการ Audit ระบบของคุณ แล้วโยก Secrets ทั้งหมดไปเก็บใน AWS อย่างถูกต้อง เพื่อให้ระบบปลอดภัยและพร้อม Scale ได้ในอนาคต 🚀

📘 บทความโดย King Pool

ภาพประกอบ: Parameter Store, Secrets Manager, KMS Encryption, Secret Rotation

อ่านต่อ: การทำ Observability: CloudWatch, X-Ray, Distributed Tracing

Leave a Reply

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *