Lesson 3Short-lived credentials

GitHub Actions and OIDC

GitHub Actions สามารถ deploy ไป AWS ได้โดยไม่ต้องเก็บ long-lived AWS Access Key ใน repository secrets เมื่อใช้ OpenID Connect และ IAM Role trust policy ที่จำกัดดี

Workflow, jobs และ environments

GitHub Actions workflow คือ YAML ที่กำหนด triggers, jobs และ steps Jobs สามารถผูกกับ environments เช่น dev, staging, production เพื่อเพิ่ม approval, secrets และ protection rules ตาม environment

OIDC กับ AWS

OIDC ให้ workflow ขอ short-lived token แล้ว assume IAM Role ใน AWS ผ่าน trust relationship ข้อดีคือไม่ต้องเก็บ access key แบบถาวร และสามารถจำกัดว่า repo/branch/environment ใด assume role ได้

permissions:
  id-token: write
  contents: read

jobs:
  deploy:
    runs-on: ubuntu-latest
    environment: production
    steps:
      - uses: actions/checkout@v4
      - uses: aws-actions/configure-aws-credentials@v4
        with:
          role-to-assume: arn:aws:iam::111122223333:role/github-deploy-prod
          aws-region: ap-southeast-1
      - run: aws sts get-caller-identity

Trust policy conditions

IAM Role ที่ trust GitHub OIDC provider ควรตรวจ audience และ subject claim เช่น organization, repository, branch หรือ environment ถ้าไม่จำกัด sub ให้ดี repo ที่ไม่ควรเข้าถึง AWS อาจขอ assume role ได้

"Condition": {
  "StringEquals": {
    "token.actions.githubusercontent.com:aud": "sts.amazonaws.com"
  },
  "StringLike": {
    "token.actions.githubusercontent.com:sub": "repo:ORG/REPO:environment:production"
  }
}

Best practices

  • ใช้ OIDC แทน long-lived access keys
  • แยก IAM Role ต่อ environment และจำกัด permissions ตามงาน
  • ใช้ protected branches และ required reviews สำหรับ production
  • ตั้ง concurrency เพื่อกัน deploy production ซ้อนกัน
  • อย่า print secrets หรือ Terraform plan ที่มี sensitive values ลง logs

Common mistakes

  • Trust policy เปิดกว้างทั้ง organization โดยไม่จำกัด repo/branch/environment
  • ใช้ role เดียวสำหรับ dev และ prod ทำให้ blast radius ใหญ่
  • ให้ workflow ใช้ pull_request จาก fork deploy หรืออ่าน secrets โดยไม่ตั้ง guardrails

Review questions

  1. OIDC ช่วยลดความเสี่ยงจาก access key อย่างไร?
  2. ทำไม trust policy ต้องตรวจ sub claim?
  3. ควรแยก IAM Role ต่อ environment เพราะอะไร?