Notice
Recent Posts
Recent Comments
Link
«   2025/10   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

뭉크테크

Lambda Service가 S3에 접근시 표준 모범 사례 본문

AWS Security

Lambda Service가 S3에 접근시 표준 모범 사례

뭉크테크 2025. 9. 22. 03:58

주제

  • AWS 서비스(이 경우 Lambda)가 다른 AWS 서비스(S3)에 접근할 때는 IAM 역할(Role)을 사용하는 것이 표준적인 모범 사례

 

구조도

 

대상 버킷

 

Lambda 함수

  • 함수 생성시 python 언어로 택할 것. 다른 언어 선택시 다시 람다 생성해야함
    • 런타임은 단순히 언어만 선택하는 것이 아니라, 해당 언어를 실행하기 위한 운영체제, 라이브러리, 코드 실행 방식(핸들러) 등 모든 실행 환경이 함께 결정되는 것
    • 처음에 Nodejs 엔진으로 생성해버려서 다시 생성했음..

 

 

Lambda 함수 테스트 코드

import json
import boto3

# S3 클라이언트 생성
s3 = boto3.client('s3')

def lambda_handler(event, context):
    # S3에 저장할 파일 내용과 이름 정의
    file_content = "Hello from Lambda! This file was created successfully."
    bucket_name = "YOUR_BUCKET_NAME"  # 🚨 여러분의 버킷 이름으로 꼭 바꿔주세요!
    file_name = "test-file.txt"

    try:
        # S3 버킷에 파일 업로드 (PutObject)
        s3.put_object(
            Bucket=bucket_name,
            Key=file_name,
            Body=file_content
        )

        # 성공 메시지 반환
        return {
            'statusCode': 200,
            'body': json.dumps(f"Successfully created {file_name} in {bucket_name}")
        }

    except Exception as e:
        # 실패 시 에러 메시지 반환
        print(e)
        return {
            'statusCode': 500,
            'body': json.dumps(f"Error creating file: {str(e)}")
        }

 

 

S3 Access IAM Role for Lambda

  • Lambda가 S3에 파일을 넣을(PutObject) 권한만 가진 맞춤형 정책을 직접 만들어 봄

 

 

Lambda와 IAM 정책 연결

  • 정책을 생성만 한다고 해서 끝이 아님. 
  • 해당 정책의 권한을 위 Lambda 함수의 역할에 해당 정책을 연결해야함.

 

 

 

  • 위에서 생성한 정책(LambdaS3WritePolicy) 연결

 

 

  • Deploy 후 Test 결과, 응답값 200 확인
  • 정책 연결이 잘 되었는지 위와 같은 결과 확인.

  • 실제 mybucket-monktech0922 라는 버킷에 들어가 test-file.txt가 있는지 확인한 결과, 잘 올라와져 있음
  • 다운로드하고 확인한 결과, 위에서 성공했을 때 출력된 결과와 동일한 텍스트가 나옴

  • 정책을 위와 같이 일부러 타겟 리소스를 일부러 틀리게 수정한 결과

  • 위에서 권한 수정(대상 경로 변경)을 하자마자 접근 거부 결과가 나옴
  • 즉, Lambda 함수가 사용하고 있는 IAM 역할에 S3 버킷에 파일을 쓸 수 있는 권한(s3:PutObject)이 없기 때문