วิธีระบุ permission ให้กับ lambda function เพื่อใช้ในการเรียกใช้ service อื่นๆภายใน AWS ซึ่งตาม best practice ของ AWS เราจะใช้ role เป็นตัวกำหนดว่า lambda function ตัวนี้มี permission ที่จะไปเรียกใช้งาน service อะไรได้บ้าง ซึ่งจะเป็นวิธีที่ปลอดภัยและง่ายที่สุดในการทำงาน จะเป็นยังไงนั้นไปดูกันเลย
ในตัวอย่างนี้เราจะยกตัวอย่าง case ที่ lambda จะต้องไป get object จาก s3 โดยผมจะเตรียม Role ที่มี permission s3:GetObject ไว้ที่ชื่อว่า lambdaGetS3ObjectRole
Step 1 : เปิดเข้าไปยัง Lambda ตัวที่ต้องการจากนั้นเลือกไปที่ Configuration > Permissions
โดย default เมื่อเราสร้าง lambda ขึ้นมาใหม่ จะมี default role ถูกสร้างขึ้นมาด้วย ที่จะมีเพียง permission ทั่วไปที่พอต่อการทำงานเบื้องต้นของ lambda function เช่น การเขียน log ไปที่ CloudWatch
Step 2 : เลือกที่ Edit เพื่อเข้าหน้า Basic Setting
Step 3 : ในหน้า Basic Setting ตรง Existing role ให้เลือก Role ใหม่ที่เราต้องการใช้งาน ซึ่งผมจะขอเลือกเป็น Role ชื่อว่า lambdaGetS3ObjectRole ที่ได้เตรียมไว้แล้ว
Step 4 : กด Save เพื่อบันทึกการตั้งค่า
เราจะมาทดสอบ Funtion ของเราด้วย code ตัวอย่างนี้
code นี้จะทำการ get object ที่ชื่อว่า requirement.txt ที่อยู่ใน bucket “vultureprime-demo” แล้วแสดงผลลัพธ์ออกมาผ่าน ตัวแปร object_data ที่จะ print ลงใน log
ผลที่ได้จะมีหน้าตาแบบนี้
แต่ถ้าหากว่า lambda function ไม่มี role permission ที่สามารถเข้าถึง s3 ที่เราต้องการได้ เราจะได้ Log AccessDenied แจ้งกลับมา
Role and Permission เป็นอะไรที่จำเป็นและช่วยให้เราทำงานได้ง่ายขึ้นมาๆใน AWS เพราะเป็นสิ่งที่ทำให้ service ของเราสามารถ comunicate กันได้อย่างปลอดถัย และ configutaion ได้ง่ายมากๆ