[Update] วิธีการอนุญาต IAM Role ใน Instance ที่สร้างใน Elastic Beanstalk

การอนุญาต IAM Role ใน Instance ให้สามารถเชื่อมต่อกับ S3 Bucket ได้นั้น สามารถทำได้ทั้งใน Instance ที่สร้างใน EC2 และสร้างใน Elastic Beanstalk

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

ครั้งนี้จะมาแนะนำการตั้งค่าอนุญาต IAM Role ใน Instance ที่สร้างใน Elastic Beanstalk แล้วเชื่อมต่อไปยัง S3 Bucket

สิ่งที่ต้องมี

  • สร้าง S3 Bucket ใน Amazon S3 แล้ว
    สมมติว่าผมสร้าง S3 Bucket ที่ชื่อ tinnakorn-upload เตรียมไว้แล้ว

ดูตัวอย่างที่นี่เฉพาะหัวข้อนี้: การสร้าง Buckets ใน Amazon S3

สร้าง Role ใน IAM สำหรับเชื่อมต่อไปยัง S3 Bucket

ครั้งนี้จะสร้าง Service role และ Instance profile ที่ใช้สำหรับ Elastic Beanstalk ใน IAM โดยจะเพิ่มสิทธิ์สำหรับเชื่อมต่อกับ S3 Bucket ลงใน Instance profile เพื่อให้ Instance ที่สร้างใน Elastic Beanstalk สามารถเชื่อมต่อไปยัง S3 Bucket ได้โดยแนะนำให้กำหนดชื่อและ Permissions ตาม Documentation ของ AWS และกำหนด Permissions ที่ชื่อ AmazonS3FullAccess เพิ่มเติมดังนี้

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

ขั้นตอนนี้ให้สร้าง Role ดังกล่าวโดยดูตัวอย่างที่ลิงก์ด้านล่างนี้โดยเพิ่มสิทธิ์ AmazonS3FullAccess เข้าไปใน Role สำหรับ Instance profile ด้วย และสำหรับชื่อ IAM Role สามารถตั้งชื่อได้ตามต้องการ

สร้าง Key Pairs

สร้าง Key Pair ไว้ใช้สำหรับ AWS Elastic Beanstalk

ดูตัวอย่างที่นี่: การสร้าง Key Pair

ตัวอย่างตั้งค่าการสร้าง Key Pairs ในบทความนี้

※Create Key pairs
Name: tinnakorn-eb-test (ป้อนชื่อที่ต้องการ)
Private key file format: .ppk

การสร้าง Environment ใน Elastic Beanstalk

ตัวอย่างการสร้าง Environment ของบทความนี้

Step 1: Configure environment

・Environment information
Environment name: tinnakorn-iamrole (ชื่ออะไรก็ได้)
Domain: tinnakorn-iamrole (ชื่ออะไรก็ได้)

・Platform
Platform: PHP

・Application code
เลือกวิธีอัปโหลดไฟล์ตามต้องการ

Step 2: Configure service access

・Configure service access
Service role: Use an existing service role
Existing service roles: aws-elasticbeanstalk-service-role
EC2 key pair: tinnakorn-iamrole
EC2 instance profile: aws-elasticbeanstalk-ec2-role

การตั้งค่าหลังจากนี้ให้ดูลิงก์ด้านล่างนี้เป็นตัวอย่างได้เลย หรือหากรู้วิธีการสร้าง Environment ใน Elastic Beanstalk อยู่แล้ว ข้ามไปได้เลย

เมื่อสร้าง Environment ใน Elastic Beanstalk เสร็จแล้ว ทำขั้นตอนถัดไปได้เลย

ทดสอบเข้าถึง S3 Bucket จาก Instance ที่สร้างใน Elastic Beanstalk

ก่อนอื่นให้เชื่อมต่อไปยัง Instance ที่สร้างใน Elastic Beanstalk ด้วย PuTTY

ดูตัวอย่างที่นี่เฉพาะหัวข้อนี้: การเชื่อมต่อกับ EC2 Instance ด้วย PuTTY

แล้วรันคำสั่ง AWS CLI สำหรับตรวจสอบไฟล์ใน S3 Bucket เพื่อทดสอบการเข้าถึง S3 Bucket จาก Instance ที่สร้างใน Elastic Beanstalk

aws s3 ls s3://[bucket name]

S3 Bucket ในตัวอย่างนี้มีไฟล์ tinnakorn-laravel-s3.zip นี้อยู่ จึงแสดงออกมาแบบนี้

root@ip-xx-xx-xx-xx:~

Using username "ec2-user".
Authenticating with public key "tinnakorn-iamrole"
  _____ _           _   _      ____                       _        _ _
 | ____| | __   ___| |_(_) ___| __ )  ___  __ _ _ __  ___| |_ __ _| | | __
 |  _| | |/ _ \/ __| __| |/ __|  _ \ / _ \/ _\ | '_ \/ __| __/ _\ | | |/ /
 | |___| | (_| \__ \ |_| | (__| |_) |  __/ (_| | | | \__ \ || (_| | |   <
 |_____|_|\__,_|___/\__|_|\___|____/ \___|\__,_|_| |_|___/\__\__,_|_|_|\_\

 Amazon Linux 2023 AMI

 This EC2 instance is managed by AWS Elastic Beanstalk. Changes made via SSH
 WILL BE LOST if the instance is replaced by auto-scaling. For more information
 on customizing your Elastic Beanstalk environment, see our documentation here:
 http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers-ec2.html

   ,     #_
   ~\_  ####_        Amazon Linux 2023
  ~~  \_#####\
  ~~     \###|
  ~~       \#/ ___   https://aws.amazon.com/linux/amazon-linux-2023
   ~~       V~' '->
    ~~~         /
      ~~._.   _/
         _/ _/
       _/m/'
[ec2-user@ip-xx-xx-xx-xx ~]$ aws s3 ls s3://tinnakorn-upload
2024-04-04 08:41:50      79808 tinnakorn-laravel-s3.zip
[ec2-user@ip-xx-xx-xx-xx ~]$

*หากรันคำสั่งตามนี้แล้วแสดง Error ให้ตรวจสอบที่ Permissions ที่ชื่อ AmazonS3FullAccess ใน IAM Role สำหรับ EC2 instance profile เพิ่มเติม แล้วลองรันคำสั่งอีกครั้ง

สรุป

การสาธิตนี้จะเน้นไปที่การอนุญาต IAM Role ใน Instance ที่สร้างใน Elastic Beanstalk ให้สามารถเชื่อมต่อกับ S3 Bucket ได้ และทดสอบการเข้าถึง S3 Bucket จาก Instance ที่สร้างใน Elastic Beanstalk

นอกจากนี้เราสามารถเข้าถึง Service อื่นๆของ AWS ได้โดยเปลี่ยนการตั้งค่า Permission บน IAM Role ครับ

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

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

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