S3 Object Lambda 접근 지점 보안 고려 사항

S3 Object Lambda 접근 지점 보안 고려 사항 (Security considerations for S3 Object Lambda Access Points)

S3 Object Lambda는 Amazon S3에서 데이터가 나가는 순간 AWS Lambda의 규모와 유연성을 컴퓨팅 플랫폼으로 사용해 사용자 지정 변환을 수행해요. S3와 Lambda는 기본적으로 안전하게 보호되지만, 그 안전함을 유지하려면 Lambda 함수 작성자가 특별히 신경 써야 하는 부분이 있어요.

참고 2025년 11월 7일부터 S3 Object Lambda는 현재 이 서비스를 사용 중인 기존 고객과 일부 AWS 파트너 네트워크(APN) 파트너만 이용할 수 있어요. S3 Object Lambda와 비슷한 기능이 필요하다면 Amazon S3 Object Lambda 가용성 변경 문서를 확인해 주세요.

출처: 문서

본문

S3 Object Lambda는 모든 접근이 인증된 보안 주체(principal)에 의해서만 이루어지고 HTTPS를 통해서만 이루어져야 한다고 요구해요. 익명 접근은 허용되지 않아요.

보안 위험을 줄이려면 다음을 권장해요.

  • Lambda 실행 역할을 가능한 가장 작은 권한 집합으로 범위를 한정해요.
  • 가능할 때마다 Lambda 함수가 제공된 사전 서명 URL(presigned URL)을 통해 Amazon S3에 접근하도록 해요.

IAM 정책 구성

S3 접근 지점은 AWS Identity and Access Management(IAM) 리소스 정책을 지원해서, 리소스·사용자 또는 기타 조건별로 접근 지점 사용을 제어할 수 있어요. 자세한 내용은 Object Lambda 접근 지점용 IAM 정책 구성을 참고하세요.

암호화 동작

Object Lambda 접근 지점은 Amazon S3와 AWS Lambda를 모두 사용하므로 암호화 동작에 차이가 있어요. 기본 S3 암호화 동작에 대한 자세한 내용은 Amazon S3 버킷의 기본 서버 측 암호화 동작 설정을 참고하세요.

  • Object Lambda 접근 지점에서 S3 서버 측 암호화를 사용하면 객체는 Lambda로 보내기 전에 복호화돼요. 객체가 Lambda로 보내진 뒤에는 (GET 또는 HEAD 요청의 경우) 암호화되지 않은 상태로 처리돼요.
  • 암호화 키가 로깅되는 것을 막기 위해, S3는 고객 제공 키로 서버 측 암호화(SSE-C)로 암호화된 객체에 대한 GET 및 HEAD 요청을 거부해요. 그러나 Lambda 함수는 클라이언트가 제공한 키에 접근할 수 있다면 이 객체들을 여전히 검색할 수 있어요.
  • Object Lambda 접근 지점에서 S3 클라이언트 측 암호화를 사용하면, Lambda가 객체를 복호화하고 다시 암호화할 수 있도록 암호화 키에 접근할 수 있는지 확인해야 해요.

접근 지점 보안

S3 Object Lambda는 Object Lambda 접근 지점과 **지원 접근 지점(supporting access point)**이라고 부르는 표준 S3 접근 지점, 이렇게 두 개의 접근 지점을 사용해요. Object Lambda 접근 지점에 요청을 보내면 S3 Object Lambda 구성에 따라 S3가 여러분을 대신해 Lambda를 호출하거나, 요청을 지원 접근 지점으로 위임해요. 요청에 대해 Lambda가 호출되면 S3가 지원 접근 지점을 통해 여러분을 대신해 객체에 대한 사전 서명 URL을 생성해요. 함수가 호출될 때 Lambda 함수는 이 URL을 입력으로 받아요.

Lambda 함수가 S3를 직접 호출하는 대신 이 사전 서명 URL을 사용해 원본 객체를 검색하도록 설정할 수 있어요. 이 모델을 사용하면 객체에 더 나은 보안 경계를 적용할 수 있어요. S3 버킷이나 S3 접근 지점을 통한 직접 객체 접근을 제한된 IAM 역할이나 사용자 집합으로 제한할 수 있죠. 이 접근 방식은 여러분의 Lambda 함수가 **혼동된 대리자 문제(confused deputy problem)**의 대상이 되는 것도 막아 줘요. 혼동된 대리자 문제란 잘못 구성된, 호출자와 다른 권한을 가진 함수가 객체에 대한 접근을 허용하거나 거부해서는 안 될 때 허용하거나 거부할 수 있는 상황을 말해요.

Object Lambda 접근 지점 공개 접근

S3 Object Lambda는 익명 또는 공개 접근을 허용하지 않아요. Amazon S3가 모든 S3 Object Lambda 요청을 완료하려면 여러분의 자격 증명을 승인해야 하기 때문이에요. Object Lambda 접근 지점을 통해 요청을 호출할 때는 구성된 Lambda 함수에 대한 lambda:InvokeFunction 권한이 있어야 해요. 마찬가지로 Object Lambda 접근 지점을 통해 다른 API 작업을 호출할 때는 필요한 s3:* 권한이 있어야 해요.

이 권한이 없으면 Lambda 호출이나 S3 위임 요청은 HTTP 403(Forbidden) 오류로 실패해요. 모든 접근은 인증된 보안 주체에 의해 이루어져야 해요. 공개 접근이 필요하다면 Lambda@Edge를 대안으로 사용할 수 있어요. 자세한 내용은 Amazon CloudFront 개발자 안내서의 Lambda@Edge로 엣지에서 사용자 지정을 참고하세요.

Object Lambda 접근 지점 IP 주소

describe-managed-prefix-lists 서브넷은 게이트웨이 가상 사설 클라우드(VPC) 엔드포인트를 지원하고 VPC 엔드포인트의 라우팅 테이블과 관련돼요. Object Lambda 접근 지점은 게이트웨이 VPC를 지원하지 않으므로 IP 범위가 비어 있어요. 누락된 범위는 Amazon S3에 속하지만 게이트웨이 VPC 엔드포인트에서는 지원되지 않아요. describe-managed-prefix-lists에 대한 자세한 내용은 Amazon EC2 API Reference의 DescribeManagedPrefixLists와 AWS 일반 참조의 AWS IP 주소 범위를 참고하세요.

Object Lambda 접근 지점 CORS 지원

S3 Object Lambda가 브라우저의 요청을 받거나 요청에 Origin 헤더가 포함되면, S3 Object Lambda는 항상 "AllowedOrigins":"*" 헤더 필드를 추가해요. 자세한 내용은 CORS(교차 출처 리소스 공유) 사용을 참고하세요.

더 알아보기 (Learn more)