기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
정적 IP 주소와 연결된 엔드포인트를 사용하여 Amazon S3 미리 서명된 URL 생성 및 객체 다운로드 통합
Amazon Web Services의 송진, 조은혜, 이준성
요약
이 패턴은 객체 다운로드를 위해 안전한 사용자 지정 미리 서명된 URLs을 생성하여 Amazon Simple Storage Service(Amazon S3)에 대한 액세스를 간소화합니다. 솔루션은 고유한 도메인과 정적 IP 주소가 있는 단일 엔드포인트를 제공합니다. 정적 IP 주소가 있는 통합 도메인에서 API 및 Amazon S3 엔드포인트를 통합해야 하는 고객에게 맞게 조정되었습니다. 사용 사례에는 IP 및 도메인 허용 목록 방화벽 정책을 따르는 사용자가 포함되며, API 액세스를 특정 도메인 및 IP 주소로 제한합니다.
아키텍처는 Amazon API Gateway AWS Global Accelerator, AWS Lambda Application Load Balancer AWS PrivateLink및 Amazon S3를 AWS 서비스포함한 키를 사용합니다. 이 설계는 미리 서명된 URLs와 정적 IP 주소 2개가 있는 액셀러레이터에 연결된 단일 도메인에서 Amazon S3 엔드포인트를 중앙 집중화합니다. 따라서 사용자는 미리 서명된 URLs 손쉽게 요청하고 고정 IP 주소가 있는 통합 도메인 엔드포인트를 통해 Amazon S3 객체를 다운로드할 수 있습니다.
이 아키텍처는 퍼블릭, 의료 및 금융 부문과 같은 엄격한 정책 또는 규정 준수 요구 사항이 있는 고객에게 특히 유용합니다.
사전 조건 및 제한 사항
사전 조건
활성 AWS 계정
사용자 지정 도메인 이름의 퍼블릭 호스팅 영역
AWS 리전 선택한의 AWS Certificate Manager (ACM)에서 가져온 도메인
제한 사항
Amazon S3 버킷 이름은 엔드포인트의 도메인 이름과 일치해야 합니다. 이 요구 사항은 Amazon S3 엔드포인트가 단일 API 엔드포인트를 통해 제공될 수 있도록 하기 위한 것입니다.
API Gateway에 사용되는 사용자 지정 도메인 이름은 단일 API 엔드포인트의 도메인 이름과 일치해야 합니다.
일부 AWS 서비스 는 전혀 사용할 수 없습니다 AWS 리전. 리전 가용성은 AWS 리전별 서비스를
참조하세요. 특정 엔드포인트는 서비스 엔드포인트 및 할당량을 참조하고 서비스 링크를 선택합니다.
아키텍처
다음 다이어그램은이 패턴의 대상 아키텍처 및 워크플로를 보여줍니다.

다이어그램은 다음 개념과 워크플로를 보여줍니다.
사용자는 사용자 지정 도메인 이름 및 연결된 IP 주소를 사용하여 서비스되는 사용자 지정 엔드포인트를 AWS Global Accelerator사용하여 미리 서명된 URL을 생성하라는 요청을 시작합니다.
Lambda 함수는 사용자 지정 엔드포인트를 가리키는 미리 서명된 URL을 생성합니다. 미리 서명된 URL이 포함된 301 리디렉션으로 응답합니다. 미리 서명된 리디렉션 URL을 통해 사용자는 Global Accelerator를 통해 제공되는 사용자 지정 엔드포인트를 사용하여 객체를 자동으로 다운로드합니다.
미리 서명된 URL 생성 및 객체 다운로드 워크플로를 위한 전체 아키텍처의 구성 요소는 다음과 같습니다.
Global Accelerator에 의한 고정 IP 주소 프로비저닝.
사용자 지정 도메인 이름을 사용하여 Amazon Route 53 퍼블릭 호스팅 영역에 액셀러레이터의 별칭을 A 레코드로 등록합니다.
등록된 사용자 지정 도메인 이름과 일치하는 버킷 이름으로 Amazon S3 버킷 생성.
API Gateway 및 Amazon S3 서비스를 위한 VPC 엔드포인트 생성.
Global Accelerator에 연결하기 위한 내부 Application Load Balancer의 구성입니다.
ACM 인증서가 연결된 API Gateway에 대한 사용자 지정 도메인 이름 할당.
Lambda 함수와 통합된 프라이빗 API Gateway 배포.
Lambda 함수에는 AWS Identity and Access Management (IAM) 역할이 연결되어 있습니다(GetObject 권한 있음).
도구
AWS 서비스
Amazon API Gateway는 규모와 관계없이 REST, HTTP 및 WebSocket API를 생성, 게시, 유지 관리, 모니터링 및 보호하는 것을 지원합니다.
Application Load Balancer는 여러 가용 영역의 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스와 같은 여러 대상에 수신되는 애플리케이션 트래픽을 분산합니다.
AWS Certificate Manager (ACM)을 사용하면 웹 AWS 사이트와 애플리케이션을 보호하는 퍼블릭 및 프라이빗 SSL/TLS X.509 인증서와 키를 생성, 저장 및 갱신할 수 있습니다.
AWS 클라우드 개발 키트 (AWS CDK)는 코드로 AWS 클라우드 인프라를 정의하고 프로비저닝하는 데 도움이 되는 소프트웨어 개발 프레임워크입니다.
AWS Global Accelerator는 여러에서 엔드포인트를 지원하는 글로벌 서비스입니다 AWS 리전. AWS 글로벌 네트워크를 통해 트래픽을 최적의 엔드포인트로 보내는 액셀러레이터를 생성할 수 있습니다. 이렇게 하면 전 세계 사용자가 이용하는 인터넷 애플리케이션의 가용성과 성능이 향상됩니다.
AWS Identity and Access Management (IAM)는 AWS 리소스에 대한 액세스를 인증하고 사용할 권한이 있는 사용자를 제어하여 리소스에 대한 액세스를 안전하게 관리하는 데 도움이 됩니다.
AWS Lambda는 서버를 프로비저닝하거나 관리할 필요 없이 코드를 실행하는 데 도움이 되는 컴퓨팅 서비스입니다. 필요할 때만 코드를 실행하며 자동으로 확장이 가능하므로 사용한 컴퓨팅 시간만큼만 비용을 지불합니다.
AWS PrivateLink를 사용하면 가상 프라이빗 클라우드(VPCs)에서 VPC 외부의 서비스로 단방향 프라이빗 연결을 생성할 수 있습니다.
Amazon Route 53은 가용성과 확장성이 뛰어난 DNS 웹 서비스입니다.
Amazon Simple Storage Service(S3)는 원하는 양의 데이터를 저장, 보호 및 검색하는 데 도움이 되는 클라우드 기반 객체 스토리지 서비스입니다.
기타 도구
Terraform
은 HashiCorp의 코드형 인프라(IaC) 도구로, 클라우드 및 온프레미스 리소스를 생성하고 관리하는 데 도움이 됩니다.
코드 리포지토리
기본 설정에 따라 AWS CDK 또는 Terraform을 사용하여이 패턴을 배포할 수 있습니다. 에픽 섹션에는 두 배포 방법에 대한 지침이 포함되어 있습니다. 이 패턴의 코드는 다음 GitHub 리포지토리에서 사용할 수 있습니다.
모범 사례
프로덕션 환경에서 보안을 강화하려면 Amazon Cognito와 같은 권한 부여 메커니즘을 구현하여
PresignedUrl
생성 API에 대한 액세스를 제한하는 것이 중요합니다.최소 권한 원칙을 따르고 작업을 수행하는 데 필요한 최소 권한을 부여합니다. 자세한 내용은 IAM 설명서의 최소 권한 부여 및 보안 모범 사례를 참조하세요.
에픽
작업 | 설명 | 필요한 기술 |
---|---|---|
도메인 이름을 결정합니다. | 통합 Amazon S3 엔드포인트의 퍼블릭 도메인 이름을 결정합니다. 도메인 이름은 Amazon S3 버킷 이름으로도 사용됩니다. | AWS 관리자, 네트워크 관리자 |
퍼블릭 호스팅 영역을 만듭니다. | Amazon Route 53에서 퍼블릭 호스팅 영역을 생성합니다. 도메인 이름은 API Gateway에서 사용되는 도메인 이름과 일치해야 합니다. | AWS 관리자, 네트워크 관리자 |
SSL 인증서를 준비합니다. | AWS Certificate Manager (ACM)을 사용하여 웹 애플리케이션 도메인에 대한 SSL 인증서를 요청하거나 가져옵니다. | AWS 관리자, 네트워크 관리자 |
작업 | 설명 | 필요한 기술 |
---|---|---|
Terraform 개발 환경을 설정합니다. | 개발 환경을 설정하려면 다음을 수행합니다.
| AWS 관리자, 클라우드 관리자 |
|
다음을 참조하세요.
| AWS 관리자, 클라우드 관리자 |
네트워크 리소스를 프로비저닝합니다. | 네트워크 리소스를 프로비저닝하려면 다음 명령을 실행합니다.
| AWS 관리자, 클라우드 관리자 |
API Gateway, Amazon S3 및 Lambda를 프로비저닝합니다. | 네트워크 리소스를 프로비저닝하려면 다음 명령을 사용합니다.
| AWS 관리자, 클라우드 관리자 |
작업 | 설명 | 필요한 기술 |
---|---|---|
AWS CDK 개발 환경을 설정합니다. | 개발 환경을 설정하려면 다음을 수행합니다.
| AWS 관리자, 클라우드 관리자 |
| 상수 변수의 옵션을 편집하려면 다음 명령을 사용합니다.
명령에서 각 자리 표시자를 자신의 정보로 바꿉니다.
| AWS 관리자, 클라우드 관리자 |
스택을 배포합니다. | Virtual Private Cloud(VPC)용 스택과 애플리케이션용 스택의 두 스택을 배포하려면 다음 명령을 사용합니다.
| AWS 관리자, 클라우드 관리자 |
작업 | 설명 | 필요한 기술 |
---|---|---|
엔드포인트의 IP 주소를 확인합니다. | 이 패턴의 도메인에 고정 IP 주소가 있는지 확인하려면 다음 명령을 사용합니다.
| 네트워크 관리자 |
나중에 다운로드할 수 있는 테스트 파일을 업로드합니다. | Amazon S3 버킷의 | AWS 관리자, 클라우드 관리자 |
API를 호출하여 미리 서명된 URL을 생성합니다. | 미리 서명된 URL을 생성하려면 다음 형식을 사용하여 브라우저 또는 API 클라이언트(예: Postman
| 앱 소유자 |
결과를 확인합니다. | 예상되는 결과는 301(영구적으로 이동됨) 리디렉션 상태 코드를 받아야 한다는 것입니다. 이 응답에는 테스트 파일 다운로드를 자동으로 시작하는 미리 서명된 URL이 포함됩니다. | 테스트 엔지니어 |
작업 | 설명 | 필요한 기술 |
---|---|---|
API Gateway, Amazon S3 및 Lambda 리소스를 폐기합니다. | 리소스를 삭제하려면 다음 명령을 사용합니다.
| AWS 관리자, 클라우드 관리자 |
네트워크 리소스를 폐기합니다. | 네트워크 리소스를 삭제하려면 다음 명령을 사용합니다.
| AWS 관리자, 클라우드 관리자 |
작업 | 설명 | 필요한 기술 |
---|---|---|
스택을 폐기합니다. | VPC 스택과 애플리케이션 스택을 모두 삭제하려면 다음 명령을 사용합니다.
| AWS 관리자, 클라우드 관리자 |
Amazon S3 버킷을 비우고 삭제합니다. | 기본적으로 삭제되지 않은 객체 Amazon S3 버킷과 로그 Amazon S3 버킷을 비우고 삭제합니다. Amazon S3 버킷 이름은 AWS Command Line Interface (AWS CLI)를 사용하여 버킷을 삭제하려면 다음 명령을 사용합니다.
| AWS 관리자, 클라우드 관리자 |
관련 리소스
AWS 블로그