[Update] วิธีการอนุญาต IAM Role ใน Instance ที่สร้างใน 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) ครับ !