How to config Lambda permission

วิธีระบุ permission ให้กับ lambda function เพื่อใช้ในการเรียกใช้ service อื่นๆภายใน AWS ซึ่งตาม best practice ของ AWS เราจะใช้ role เป็นตัวกำหนดว่า lambda function ตัวนี้มี permission ที่จะไปเรียกใช้งาน service อะไรได้บ้าง ซึ่งจะเป็นวิธีที่ปลอดภัยและง่ายที่สุดในการทำงาน จะเป็นยังไงนั้นไปดูกันเลย

Prepare Role

ในตัวอย่างนี้เราจะยกตัวอย่าง case ที่ lambda จะต้องไป get object จาก s3 โดยผมจะเตรียม Role ที่มี permission s3:GetObject ไว้ที่ชื่อว่า lambdaGetS3ObjectRole

Role configuration

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 เพื่อบันทึกการตั้งค่า

Test Configuration

เราจะมาทดสอบ Funtion ของเราด้วย code ตัวอย่างนี้


import boto3
import json
s3_client = boto3.client('s3')

def get_object(bucket_name, object_key):
    try:
        response = s3_client.get_object(Bucket=bucket_name, Key=object_key)
        object_data = response['Body'].read()
        return object_data
    except Exception as e:
        print(f"Error: {e}")


def lambda_handler(event, context):
    bucket_name = 'vultureprime-demo' 
    object_key = 'requirement.txt'   
    object_data = get_object(bucket_name, object_key)
    print(object_data)

code นี้จะทำการ get object ที่ชื่อว่า requirement.txt ที่อยู่ใน bucket “vultureprime-demo” แล้วแสดงผลลัพธ์ออกมาผ่าน ตัวแปร object_data ที่จะ print ลงใน log

ผลที่ได้จะมีหน้าตาแบบนี้

แต่ถ้าหากว่า lambda function ไม่มี role permission ที่สามารถเข้าถึง s3 ที่เราต้องการได้ เราจะได้ Log AccessDenied แจ้งกลับมา

Summary

Role and Permission เป็นอะไรที่จำเป็นและช่วยให้เราทำงานได้ง่ายขึ้นมาๆใน AWS  เพราะเป็นสิ่งที่ทำให้ service ของเราสามารถ comunicate กันได้อย่างปลอดถัย และ configutaion ได้ง่ายมากๆ


Aa

© 2023, All Rights Reserved, VulturePrime co., ltd.