S3 객체 Lambda 액세스 포인트에 대한 보안 고려 사항 - Amazon Simple Storage Service

S3 객체 Lambda 액세스 포인트에 대한 보안 고려 사항

Amazon S3 객체 Lambda를 사용하면 AWS Lambda의 규모와 유연성을 컴퓨팅 플랫폼으로 사용하여 Amazon S3에서 나오는 데이터에 대해 사용자 지정 변환을 수행할 수 있습니다. S3와 Lambda는 기본적으로 보안을 유지하지만 이 보안을 유지하기 위해 Lambda 함수 작성자가 특별히 고려해야 할 것이 있습니다. S3 객체 Lambda를 사용하려면 모든 액세스가 인증된 보안 주체(익명 액세스 불가) 및 HTTPS를 통해 이루어져야 합니다.

보안 위험을 완화하기 위해 다음 작업을 수행하는 것이 좋습니다.

  • Lambda 실행 역할의 범위를 가능한 가장 작은 권한 집합으로 한정합니다.

  • 가능하면 Lambda 함수가 제공된 미리 서명된 URL을 통해 Amazon S3에 액세스하도록 합니다.

IAM 정책 구성

S3 액세스 포인트는 리소스, 사용자 또는 기타 조건별로 액세스 포인트 사용을 제어할 수 있는 AWS Identity and Access Management(IAM) 리소스 정책을 지원합니다. 자세한 내용은 객체 Lambda 액세스 포인트에 대한 IAM 정책 구성 단원을 참조하십시오.

암호화 동작

객체 Lambda 액세스 포인트에는 Amazon S3와 AWS Lambda가 모두 사용되기 때문에 암호화 동작에 차이가 있습니다. 기본 S3 암호화 동작에 대한 자세한 내용은 Amazon S3 버킷에 대한 기본 서버 측 암호화 동작 설정 섹션을 참조하십시오.

  • 객체 Lambda 액세스 포인트와 함께 S3 서버 측 암호화를 사용하는 경우 객체는 Lambda로 전송되기 전에 해독됩니다. Lambda로 전송된 객체는 암호화되지 않은 상태로 처리됩니다(GET 또는 HEAD 요청의 경우).

  • 암호화 키의 로깅을 방지하기 위해 S3는 고객이 제공한 키(SSE-C)를 사용하여 서버 측 암호화를 통해 암호화된 객체에 대한 GETHEAD 요청을 거부합니다. 그러나 Lambda 함수에서 클라이언트가 제공한 키에 액세스할 수 있는 경우에는 여전히 이러한 객체를 검색할 수 있습니다.

  • 객체 Lambda 액세스 포인트와 함께 S3 클라이언트측 암호화를 사용하는 경우 Lambda가 객체를 해독하고 다시 암호화할 수 있도록 암호화 키에 액세스할 수 있는지 확인해야 합니다.

액세스 포인트

S3 객체 Lambda는 객체 Lambda 액세스 포인트와 지원 액세스 포인트라고도 하는 표준 S3 액세스 포인트라는 두 가지 액세스 포인트를 사용합니다. 객체 Lambda 액세스 포인트에 요청을 수행할 때 S3는 S3 객체 Lambda 구성에 따라 사용자를 대신하여 Lambda를 호출하거나 지원 액세스 포인트에 요청을 위임합니다. 요청에 대해 Lambda가 호출되면 S3는 지원 액세스 지점을 통해 사용자를 대신하여 객체에 대해 미리 서명된 URL을 생성합니다. Lambda 함수가 호출될 때 이 URL을 입력으로 수신합니다.

S3를 직접 호출하는 대신 이 미리 서명된 URL을 사용하여 원본 객체를 검색하도록 Lambda 함수를 설정할 수 있습니다. 이 모델을 사용하면 객체에 더 나은 보안 경계를 적용할 수 있습니다. S3 버킷 또는 S3 액세스 포인트를 통해 제한된 IAM 역할 또는 사용자 집합으로 직접 객체 액세스를 제한할 수 있습니다. 이 방법은 또한 호출자와 다른 사용 권한을 가진 잘못 구성된 함수가 의도치 않게 객체에 대한 액세스를 허용 또는 거부할 수 있는 혼동된 대리인 문제의 영향을 받지 않도록 Lambda 함수를 보호합니다.

객체 Lambda 액세스 포인트 퍼블릭 액세스

Amazon S3가 S3 객체 Lambda 요청을 완료하기 위해 사용자의 자격 증명을 인증해야 하기 때문에 S3 객체 Lambda는 익명 또는 퍼블릭 액세스를 허용하지 않습니다. 객체 Lambda 액세스 포인트를 통해 요청을 호출하는 경우, 구성된 Lambda 함수에 대한 lambda:InvokeFunction 권한이 필요합니다 마찬가지로 객체 Lambda 액세스 포인트를 통해 다른 API 작업을 호출할 때 필요한 s3:* 권한이 있어야 합니다.

이러한 권한이 없으면 Lambda를 호출하거나 S3에 위임하라는 요청이 HTTP 403(금지) 오류로 실패합니다. 모든 액세스는 인증된 보안 주체에 의해 이루어져야 합니다. 퍼블릭 액세스가 필요한 경우 Lambda@Edge를 대안으로 사용할 수 있습니다. 자세한 내용은 Amazon CloudFront 개발자 안내서에서 Lambda@Edge를 사용하여 엣지에서 사용자 지정을 참조하십시오.

객체 Lambda 액세스 포인트 IP 주소

describe-managed-prefix-lists 서브넷은 게이트웨이 Virtual Private Cloud(VPC) 엔드포인트를 지원하며, VPC 엔드포인트의 라우팅 테이블과 관련됩니다. 객체 Lambda 액세스 포인트는 게이트웨이 VPC를 지원하지 않으므로 IP 범위가 누락되었습니다. 누락된 범위는 Amazon S3에 속하지만 게이트웨이 VPC 엔드포인트에서는 지원되지 않습니다. describe-managed-prefix-lists에 대한 자세한 내용은 Amazon EC2 API 참조의 DescribeManagedPrefixListsAWS 일반 참조의 AWS IP 주소 범위를 참조하십시오.

객체 Lambda 액세스 포인트 CORS 지원

브라우저로부터 요청을 받거나 요청에 Origin 헤더가 포함된 경우 S3 Object Lambda는 항상 “AllowedOrigins":"*" 헤더 필드를 추가합니다.

자세한 내용은 교차 오리진 리소스 공유(CORS) 사용 단원을 참조하십시오.