สร้าง Service role และ Instance profile ที่ใช้สำหรับ Elastic Beanstalk ใน IAM

ข้อกำหนดในด้านความปลอดภัยของ AWS ที่ออกมาล่าสุดนั้น ไม่อนุญาตให้บริการของ AWS สร้าง Roles สำหรับบริการอื่น ๆ ของ AWS ขึ้นมาเอง ซึ่งในกรณีนี้คือ EC2 และด้วยเหตุนี้เอง Elastic Beanstalk จะไม่สร้าง Instance profile "aws-elasticbeanstalk-ec2-role" ที่เป็นค่าเริ่มต้นให้โดยอัตโนมัติอีกต่อไป

สวัสดีครับ POP จากบริษัท Classmethod (Thailand) ครับ

ครั้งนี้จะมาแนะนำเกี่ยวกับการสร้าง IAM Role ที่ต้องใช้กับ Elastic Beanstalk

⚠หมายเหตุ

ก่อนหน้านี้ เวลาที่บัญชี AWS มีการสร้าง Environment ขึ้นมาเป็นครั้งแรก Elastic Beanstalk จะสร้าง EC2 instance profile ที่เป็นค่าเริ่มต้นขึ้นมาโดยอัตโนมัติ ชื่อว่า aws-elasticbeanstalk-ec2-role โดยที่ Instance Profile ตัวนี้จะมีพวก Managed Policies ที่เป็นค่าเริ่มต้นอยู่ แต่ถ้าหากคุณมี Instance Profile อยู่แล้ว คุณก็สามารถนำ Instance Profile นี้มาใช้งานได้ทันทีเช่นกัน

อย่างไรก็ตาม ข้อกำหนดในด้านความปลอดภัยของ AWS ที่ออกมาล่าสุดนั้น ไม่อนุญาตให้บริการของ AWS สร้าง Roles สำหรับบริการอื่น ๆ ของ AWS ขึ้นมาเอง ซึ่งในกรณีนี้คือ EC2 และด้วยเหตุนี้เอง Elastic Beanstalk จะไม่สร้าง Instance profile aws-elasticbeanstalk-ec2-role ที่เป็นค่าเริ่มต้นให้โดยอัตโนมัติอีกต่อไป

หากต้องการสร้าง Environment ใน Elastic Beanstalk จำเป็นต้องสร้าง Service role และ Instance profile ใน IAM เตรียมไว้ก่อน

ข้อกำหนดเบื้องต้น

ครั้งนี้จะสร้าง IAM Role โดยกำหนดชื่อและ Permissions ตาม Documentation ของ AWS ดังนี้

IAM Role Name Permissions
aws-elasticbeanstalk-service-role AWSElasticBeanstalkEnhancedHealth
AWSElasticBeanstalkService
aws-elasticbeanstalk-ec2-role AWSElasticBeanstalkWebTier
AWSElasticBeanstalkWorkerTier
AWSElasticBeanstalkMulticontainerDocker

อ่านรายละเอียดเพิ่มเติมได้ที่ลิงก์ด้านล่างนี้

สร้าง Service role

เข้ามาหน้าจอ Service IAM > คลิก Roles ในหัวข้อ Access management ที่เมนูด้านซ้าย > คลิก Create role แล้วเริ่มสร้างตามขั้นตอนด้านล่างนี้

Step 1: Select trusted entity

หัวข้อ Trusted entity type
AWS service

หัวข้อ Use case
・Service or use case: Elastic Beanstalk

แล้วคลิก Next

Step 2: Add permissions

หัวข้อ Permissions policies
Step นี้ไม่ต้องทำอะไร เพราะ Policy name จะถูกเลือกให้ใช้งานสำหรับ Elastic Beanstalk โดยอัตโนมัติ ให้คลิก Next ได้เลย

Step 3: Name, review, and create

หัวข้อ Role details
Role name: aws-elasticbeanstalk-service-role (ป้อนชื่อตาม Documentation ของ AWS)

เลื่อนลงมาด้านล่าง แล้วคลิก Create role

แล้วค้นหาและคลิกเข้ามาที่ Role ตามชื่อที่สร้าง แล้วดูที่ Permissions policies จะเห็นว่ามี Policy name แสดงตามที่ AWS เตรียมไว้ให้ตอนสร้างแบบนี้

สร้าง Instance profile

เข้ามาหน้าจอ Service IAM > คลิก Roles ในหัวข้อ Access management ที่เมนูด้านซ้าย > คลิก Create role แล้วเริ่มสร้างตามขั้นตอนด้านล่างนี้

Step 1: Select trusted entity

หัวข้อ Trusted entity type
・เลือก AWS service

หัวข้อ Use case
・เลือก Service or use case: EC2

แล้วคลิก Next

Step 2: Add permissions

หัวข้อ Permissions policies
ค้นหาและติ๊ก Policy name ทั้ง 3 อันตามด้านล่างนี้
✅ AWSElasticBeanstalkWebTier
✅ AWSElasticBeanstalkWorkerTier
✅ AWSElasticBeanstalkMulticontainerDocker

แล้วคลิก Next

Step 3: Name, review, and create

หัวข้อ Role details
Role name: aws-elasticbeanstalk-ec2-role (ป้อนชื่อตาม Documentation ของ AWS)

เลื่อนลงมาที่หัวข้อ "Step 2: Add permissions" ด้านล่าง ถ้า Policy name แสดงทั้ง 3 อันตามที่ติ๊กจากขั้นตอนที่แล้ว ให้คลิก Create role ได้เลย

แล้วค้นหาและคลิกเข้ามาที่ Role ตามชื่อที่สร้าง แล้วดูที่ Permissions policies จะเห็นว่ามี Policy name แสดงตามที่เราเพิ่มไว้แบบนี้

สรุป

เนื่องจากข้อกำหนดในด้านความปลอดภัยของ AWS ที่ออกมาล่าสุดนั้น ไม่อนุญาตให้บริการของ AWS สร้าง Roles สำหรับบริการอื่น ๆ ของ AWS ขึ้นมาเอง ดังนั้นเราจึงต้องดำเนินการสร้างด้วยตนเอง และเมื่อมี Service role และ Instance profile แล้ว ก็สามารถนำไปใช้กับ Elastic Beanstalk ได้เลยครับ

ผมหวังว่าบทความนี้จะเป็นประโยชน์ให้กับผู้อ่านได้นะครับ

POP (Tinnakorn Maneewong) จากบริษัท Classmethod (Thailand) ครับ !

บทความที่เกี่ยวข้อง