뭉크테크
Lambda Service가 S3에 접근시 표준 모범 사례 본문
주제
- 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)이 없기 때문
'AWS Security' 카테고리의 다른 글
클라우드 환경에서의 사고 대응(Incident Response, IR) 절차 (0) | 2025.09.22 |
---|