기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
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 포함된 .
제한 사항
S3 버킷의 이름은 도메인과 동일해야 하므로 Amazon S3 버킷 이름 지정 규칙을 확인하는 것이 좋습니다.
이 샘플 아키텍처에는 배포된 인프라에 대한 모니터링 기능이 포함되지 않습니다. 사용 사례에 모니터링이 필요한 경우 AWS 모니터링 서비스를 추가하는 것이 좋습니다.
이 샘플 아키텍처에는 입력 검증이 포함되지 않습니다. 사용 사례에 입력 검증 및 보안 수준 증가가 필요한 경우를 사용하여를 보호하는 AWS WAF 것이 API좋습니다.
이 샘플 아키텍처에는 Application Load Balancer를 사용한 액세스 로깅이 포함되지 않습니다. 사용 사례에 액세스 로깅이 필요한 경우 로드 밸런서 액세스 로그를 활성화하는 것이 좋습니다.
버전
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 및 기타 서비스와의 안전한 상호 작용을 보장하기 위해 설정됩니다.
대상 아키텍처
다이어그램은 다음을 보여 줍니다.
회사 네트워크의 사용자는 내부 도메인 이름을 통해 Application Load Balancer에 액세스할 수 있습니다. 회사 네트워크와의 인트라넷 서브넷 사이에 연결이 있다고 가정합니다 AWS 계정 (예: AWS Direct Connect 연결을 통해).
Application Load Balancer는 수신 트래픽을 API Gateway로 라우팅하여 Amazon S3 또는 S3 버킷의 VPC 엔드포인트에 데이터를 URLs 다운로드하거나 업로드하기 위해 미리 서명된를 생성합니다. 두 시나리오 모두에서 요청은 내부적으로 라우팅되므로 인터넷을 통과할 필요가 없습니다.
API Gateway는 리소스와 엔드포인트를 노출하여 S3 버킷과 상호 작용합니다. 이 예제에서는 S3 버킷에서 파일을 다운로드할 엔드포인트를 제공하지만 업로드 기능도 제공하도록 확장할 수 있습니다.
Lambda 함수는 퍼블릭 Amazon S3 도메인 대신 Application Load Balancer의 도메인 이름을 사용하여 Amazon S3에서 파일을 다운로드URL하도록 미리 서명된를 생성합니다.
사용자는 미리 서명된를 수신URL하고 이를 사용하여 Application Load Balancer를 사용하여 Amazon S3에서 파일을 다운로드합니다. 로드 밸런서에는를 위한 것이 아닌 트래픽을 S3 버킷의 VPC 엔드포인트API로 전송하기 위한 기본 경로가 포함되어 있습니다.
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
모범 사례
이 패턴의 샘플 아키텍처는 IAM 권한을 사용하여에 대한 액세스를 제어합니다API. 유효한 IAM 자격 증명이 있는 사람은 누구나를 호출할 수 있습니다API. 사용 사례에 더 복잡한 권한 부여 모델이 필요한 경우 다른 액세스 제어 메커니즘을 사용할 수 있습니다.
에픽
작업 | 설명 | 필요한 기술 |
---|---|---|
AWS 자격 증명을 가져옵니다. | 자격 AWS 증명과 계정에 대한 액세스를 검토합니다. 지침은 AWS CLI 설명서의 구성 및 자격 증명 파일 설정을 참조하세요. | AWS DevOps, 일반 AWS |
리포지토리를 복제합니다. | 이 패턴과 함께 제공된 GitHub 리포지토리를 복제합니다.
| AWS DevOps, 일반 AWS |
변수를 구성합니다. |
| AWS DevOps, 일반 AWS |
솔루션을 배포합니다. |
| AWS DevOps, 일반 AWS |
작업 | 설명 | 필요한 기술 |
---|---|---|
테스트 파일을 생성합니다. | Amazon S3에 파일을 업로드하여 파일 다운로드에 대한 테스트 시나리오를 생성합니다. Amazon S3 콘솔
| AWS DevOps, 일반 AWS |
미리 서명된 URL 기능을 테스트합니다. |
| AWS DevOps, 일반 AWS |
정리 | 리소스가 더 이상 필요하지 않은 경우 제거해야 합니다.
| AWS DevOps, 일반 AWS |
문제 해결
문제 | Solution |
---|---|
숫자 기호(#) 브레이크 URL 파라미터와 같은 특수 문자가 포함된 S3 객체 키 이름은 오류가 발생합니다. | URL 파라미터를 올바르게 인코딩하고 S3 객체 키 이름이 Amazon S3 지침을 따르는지 확인합니다. |
관련 리소스
Amazon S3:
Amazon API Gateway:
Application Load Balancer: