VPC 엔드포인트를 통해 Amazon S3 버킷에 대한 프라이빗 액세스 설정 - AWS 권장 가이드

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

VPC 엔드포인트를 통해 Amazon S3 버킷에 대한 프라이빗 액세스 설정

작성자: Martin Maritsch(AWS), Gabriel Rodriguez Garcia(AWS), Shukhrat Khodjaev(AWS), Nicolas Jacob Baer(AWS), Mohan Gowda Purushothama(AWS) 및 Joaquin Rinaudo(AWS)

요약

Amazon Simple Storage Service(Amazon S3)에서 미리 서명된 URLs를 사용하면 원하는 크기의 파일을 대상 사용자와 공유할 수 있습니다. 기본적으로 미리 서명된 Amazon S3URLs는 만료 기간 내에 인터넷에서 액세스할 수 있으므로 사용이 편리합니다. 그러나 기업 환경에서는 프라이빗 네트워크로만 제한URLs되도록 미리 서명된 Amazon S3에 대한 액세스가 필요한 경우가 많습니다.

이 패턴은 인터넷 순회 없이 URLs 프라이빗 네트워크에서 미리 서명된를 사용하여 S3 객체와 안전하게 상호 작용하기 위한 서버리스 솔루션을 제공합니다. 아키텍처에서 사용자는 내부 도메인 이름을 통해 Application Load Balancer에 액세스합니다. 트래픽은 S3 버킷의 Amazon API Gateway 및 가상 프라이빗 클라우드(VPC) 엔드포인트를 통해 내부적으로 라우팅됩니다. 이 AWS Lambda 함수는 프라이빗 VPC 엔드포인트를 통한 파일 다운로드를 URLs 위해 미리 서명된를 생성하므로 민감한 데이터의 보안 및 개인 정보 보호를 강화하는 데 도움이 됩니다.

사전 조건 및 제한 사항

사전 조건 

  • 회사 네트워크에 연결된(예:를 통해 AWS Direct Connect)에 배포 AWS 계정 된 서브넷이 VPC 포함된 .

제한 사항

버전

  • Python 버전 3.11 이상

  • Terraform 버전 1.6 이상

아키텍처

대상 기술 스택

대상 기술 스택에는 다음 AWS 서비스가 사용됩니다.

  • Amazon S3는 파일을 안전하게 업로드, 다운로드 및 저장하는 데 사용되는 코어 스토리지 서비스입니다.

  • Amazon API Gateway는 S3 버킷과 상호 작용하기 위한 리소스와 엔드포인트를 노출합니다. 이 서비스는 데이터 다운로드 또는 업로드를 URLs 위해 미리 서명된를 생성하는 역할을 합니다.

  • AWS Lambda는 Amazon S3에서 파일을 다운로드하기 URLs 위해 미리 서명된를 생성합니다. Lambda 함수는 API Gateway에서 호출합니다.

  • AmazonVPC은에 리소스를 배포VPC하여 네트워크 격리를 제공합니다. 에는 트래픽 흐름을 제어하는 서브넷 및 라우팅 테이블이 VPC 포함되어 있습니다.

  • Application Load Balancer는 들어오는 트래픽을 API Gateway 또는 S3 버킷의 VPC 엔드포인트로 라우팅합니다. 이를 통해 회사 네트워크의 사용자가 내부적으로 리소스에 액세스할 수 있습니다.

  • VPC Amazon S3용 엔드포인트를 사용하면 퍼블릭 인터넷을 통과하지 않고도 VPC 및 Amazon S3의 리소스 간에 직접 프라이빗 통신을 수행할 수 있습니다.

  • AWS Identity and Access Management (IAM) AWS 리소스에 대한 액세스를 제어합니다. 권한은 API 및 기타 서비스와의 안전한 상호 작용을 보장하기 위해 설정됩니다.

대상 아키텍처 

VPC 엔드포잉을 통해 S3 버킷에 대한 프라이빗 액세스 설정

다이어그램은 다음을 보여 줍니다.

  1. 회사 네트워크의 사용자는 내부 도메인 이름을 통해 Application Load Balancer에 액세스할 수 있습니다. 회사 네트워크와의 인트라넷 서브넷 사이에 연결이 있다고 가정합니다 AWS 계정 (예: AWS Direct Connect 연결을 통해).

  2. Application Load Balancer는 수신 트래픽을 API Gateway로 라우팅하여 Amazon S3 또는 S3 버킷의 VPC 엔드포인트에 데이터를 URLs 다운로드하거나 업로드하기 위해 미리 서명된를 생성합니다. 두 시나리오 모두에서 요청은 내부적으로 라우팅되므로 인터넷을 통과할 필요가 없습니다.

  3. API Gateway는 리소스와 엔드포인트를 노출하여 S3 버킷과 상호 작용합니다. 이 예제에서는 S3 버킷에서 파일을 다운로드할 엔드포인트를 제공하지만 업로드 기능도 제공하도록 확장할 수 있습니다.

  4. Lambda 함수는 퍼블릭 Amazon S3 도메인 대신 Application Load Balancer의 도메인 이름을 사용하여 Amazon S3에서 파일을 다운로드URL하도록 미리 서명된를 생성합니다.

  5. 사용자는 미리 서명된를 수신URL하고 이를 사용하여 Application Load Balancer를 사용하여 Amazon S3에서 파일을 다운로드합니다. 로드 밸런서에는를 위한 것이 아닌 트래픽을 S3 버킷의 VPC 엔드포인트API로 전송하기 위한 기본 경로가 포함되어 있습니다.

  6. VPC 엔드포인트는 사용자 지정 도메인 이름이 URL 있는 미리 서명된를 S3 버킷으로 라우팅합니다. S3 버킷의 이름은 도메인과 동일해야 합니다.

자동화 및 규모 조정

이 패턴은 Terraform을 사용하여 코드 리포지토리의 인프라를에 배포합니다 AWS 계정.

도구

도구

  • Python은 범용 컴퓨터 프로그래밍 언어입니다.

  • Terraform은 클라우드 및 온프레미스 리소스를 생성하고 관리하는 데 도움이 HashiCorp 되는의 코드형 인프라(IaC) 도구입니다.

  • AWS Command Line Interface (AWS CLI)는 명령줄 셸의 명령을 통해 AWS 서비스와 상호 작용하는 데 도움이 되는 오픈 소스 도구입니다.

코드 리포지토리

이 패턴의 코드는 https://github.com/aws-samples/private-s3-vpce의 GitHub 리포지토리에서 사용할 수 있습니다.

모범 사례

이 패턴의 샘플 아키텍처는 IAM 권한을 사용하여에 대한 액세스를 제어합니다API. 유효한 IAM 자격 증명이 있는 사람은 누구나를 호출할 수 있습니다API. 사용 사례에 더 복잡한 권한 부여 모델이 필요한 경우 다른 액세스 제어 메커니즘을 사용할 수 있습니다.

에픽

작업설명필요한 기술

AWS 자격 증명을 가져옵니다.

자격 AWS 증명과 계정에 대한 액세스를 검토합니다. 지침은 AWS CLI 설명서의 구성 및 자격 증명 파일 설정을 참조하세요.

AWS DevOps, 일반 AWS

리포지토리를 복제합니다.

이 패턴과 함께 제공된 GitHub 리포지토리를 복제합니다.

git clone https://github.com/aws-samples/private-s3-vpce
AWS DevOps, 일반 AWS

변수를 구성합니다.

  1. 컴퓨터의 GitHub 리포지토리에서 terraform 폴더를 엽니다.

    cd terraform
  2. example.tfvars 파일을 열고 필요에 따라 파라미터를 사용자 지정합니다.

AWS DevOps, 일반 AWS

솔루션을 배포합니다.

  1. terraform 폴더에서 Terraform을 실행하고 사용자 지정한 변수를 전달합니다.

    terraform apply -var-file="example.tfvars"
  2. 아키텍처 다이어그램에 표시된 리소스가 성공적으로 배포되었는지 확인합니다.

AWS DevOps, 일반 AWS
작업설명필요한 기술

테스트 파일을 생성합니다.

Amazon S3에 파일을 업로드하여 파일 다운로드에 대한 테스트 시나리오를 생성합니다. Amazon S3 콘솔 또는 다음 AWS CLI 명령을 사용할 수 있습니다.

aws s3 cp /path/to/testfile s3://your-bucket-name/testfile
AWS DevOps, 일반 AWS

미리 서명된 URL 기능을 테스트합니다.

  1. Application Load Balancer에 요청을 보내 awscurl을 사용하여 테스트 파일에 URL 대해 미리 서명된를 생성합니다.

    awscurl https://your-domain-name/api/get_url?key=testfile

    이 단계에서는 자격 증명에서 유효한 서명을 생성하며,이 서명은 API Gateway에서 검증합니다.

  2. 이전 단계에서 받은 응답의 링크를 구문 분석하고 미리 서명된를 열어 파일을 URL 다운로드합니다.

AWS DevOps, 일반 AWS

정리

리소스가 더 이상 필요하지 않은 경우 제거해야 합니다.

terraform destroy
AWS DevOps, 일반 AWS

문제 해결

문제Solution

숫자 기호(#) 브레이크 URL 파라미터와 같은 특수 문자가 포함된 S3 객체 키 이름은 오류가 발생합니다.

URL 파라미터를 올바르게 인코딩하고 S3 객체 키 이름이 Amazon S3 지침을 따르는지 확인합니다.

관련 리소스

Amazon S3:

Amazon API Gateway:

Application Load Balancer: