Lesson 3Access

Roles and AWS STS

IAM Role คือ Identity ที่ไม่มี password หรือ access key ถาวร ผู้ใช้, service หรือ workload ที่ได้รับอนุญาตจะ assume role แล้วรับ temporary credentials จาก AWS STS เพื่อเรียก AWS API

Role model Trust ก่อน permission Trust Policy บอกว่าใคร assume ได้, Permission Policy บอกว่า session ทำอะไรได้
Credential model STS ออก temporary credentials Session มีอายุจำกัดและมี session token จึงเหมาะกว่า key ถาวรสำหรับ workload
Common use EC2, cross-account, federation, OIDC Role เป็น default pattern สำหรับ AWS service, CI/CD และ human federation

ทำไม Role สำคัญ

Role ลดความจำเป็นในการแจก long-term Access Key ให้ workload เช่น EC2, Lambda, ECS หรือ CI/CD เมื่อ workload ใช้ Role ระบบจะได้รับ temporary credentials ที่มีอายุจำกัดและหมุนเวียนให้โดย AWS หรือ federation flow

Trust Policy และ Permission Policy

Role มี policy สองด้านที่ต้องเข้าใจ:

  • Trust Policy: ระบุว่า Principal ใดสามารถ assume role นี้ได้
  • Permission Policy: ระบุว่าเมื่อ assume role แล้ว session นี้ทำ Action อะไรกับ Resource ใดได้บ้าง
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": { "Service": "ec2.amazonaws.com" },
      "Action": "sts:AssumeRole"
    }
  ]
}

AWS STS และ temporary credentials

AWS Security Token Service หรือ AWS STS ออก temporary security credentials ให้กับ role session หรือ federated session Credentials เหล่านี้มีอายุจำกัดและประกอบด้วย Access Key ID, Secret Access Key และ Session Token

สำหรับ EC2, การให้ Instance เข้าถึง S3 ควรใช้ IAM Role ผ่าน Instance Profile ไม่ควรใส่ Access Key ไว้ใน User Data, environment variable ถาวร หรือ source code

Common role patterns

PatternUse caseข้อควรระวัง
EC2 RoleApplication บน EC2 อ่าน S3 หรือเขียน CloudWatch LogsPermission ควรเจาะจง bucket/log group
Cross-account Roleให้ Account A เข้า Resource หรือ operation ใน Account BTrust Policy ต้องระบุ Principal ถูกต้อง
Federated Roleผู้ใช้ Login ผ่าน Identity Provider หรือ IAM Identity CenterPermission Set และ session duration ต้องเหมาะสม
OIDC RoleCI/CD เช่น GitHub Actions deploy โดยไม่เก็บ Access KeyCondition ต้องจำกัด repo/branch/environment

Best practices

  • ใช้ Role สำหรับ workload บน AWS แทน IAM User Access Key
  • จำกัด Trust Policy ให้แคบที่สุด เช่น service, account, OIDC subject หรือ external ID
  • แยก Role ตามหน้าที่ ไม่ใช้ Role เดียวสำหรับทุก workload
  • ตรวจ CloudTrail เพื่อดูว่า Role ถูก assume โดยใครและทำ Action ใด

Review questions

Before next lesson
  1. แยก Trust Policy กับ Permission Policy ได้
  2. อธิบาย flow AssumeRole → STS → temporary credentials ได้
  3. รู้ว่า EC2 ควรใช้ role ผ่าน instance profile แทนการฝัง access key
  1. Trust Policy ตอบคำถามอะไร?
  2. Temporary credentials ดีกว่า long-term Access Key อย่างไร?
  3. Instance Profile เกี่ยวข้องกับ EC2 Role อย่างไร?