BLOG

AWS를 사용한 안전한 VOD 플랫폼 솔루션
작성일: 2020-07-02

영상은 이제 정보 공유와 학습을 위한 주요 수단이 되었습니다. 따라서 많은 고객은 e-러닝과 영상을 활용하기 위한 혁신적인 솔루션에 투자하고 있습니다. 영상 컨텐츠는 고객의 IP이며 안전하게 보호되고 전달되어야 합니다. 온라인 동영상은 기업부터 교육 기관, 정부 기관에 이르기까지 모든 업계에서 점점 더 활용하고 있는 강력한 기술이 되었습니다.

많은 기업과 조직이 안전한 스트리밍 솔루션을 필요로 합니다. 이 중에서도 특히 의료 기관, 대학교, 기업, OTT, 미디어 사업, 지적 프라이버시, 변호사, 정부 기관과 관련된 조직은 더더욱 보안이 절대적으로 필요합니다.

 

오늘날 점점 더 많은 기업이 컨텐츠를 호스팅하고 공유하기 위해 비디오 스트리밍 플랫폼을 사용하고 있습니다. 라이브 스트리밍과 주문형 비디오(VOD)는 산업 종류에 상관없이 기업이 수익을 높이고, 효과적으로 커뮤니케이션하며, 청중을 만드는데 사용할 수 있는 아주 강력한 도구입니다.

 

AWS는 Amazon S3 및 Amazon CloudFront를 사용하여 동영상을 간단하게 스트리밍할 수 있는 방법을 제공합니다. 다른 출력 형식으로 동영상을 변환하기 위해 서버를 스핀업하지 않으려는 경우, 다행히 AWS에서 서버리스 옵션을 제공합니다.

 

이의 일환으로 오늘은 AWS 서비스를 통해 완전히 자동화되고 안전한 주문형 비디오 솔루션을 구축하는 방법을 알려드리려 합니다.

 

 

아키텍쳐 개요

 

 

해당 서버리스 VOD 워크플로우 솔루션은 Amazon Cognito,  AWS AppSync, Amazon S3,  AWS Lambda,  Amazon DynamoDB,  AWS Secrets Manager,  AWS Elemental MediaConvert,  Amazon CloudFront,  AWS Amplify,  AWS CloudFormation를 비롯한 여러 AWS 서비스를 사용하여 구축되었습니다.

 

이 솔루션에서 Cognito는 GraphQL API에 대한 액세스를 보호하는 Cognito User Pools를 통해 웹 애플리케이션의 사용자를 인증합니다. API는 Cognito User Pool에 있는 그룹을 기반으로 세분화된 액세스를 가집니다. 또한 Cognito는 S3에 컨텐츠를 업로드하기 위한 액세스를 위해 제한된 권한을 가진 임시 AWS 자격 증명을 생성합니다.

 

GraphQL API를 사용하는 AppSync는 클라이언트 앱이 서버에서 데이터를 가져오고 변경하고 구독할 수 있도록 합니다. 본 우리 솔루션에서는 GraphQL API를 이용하여 CRUD(Create/Read/Update/Delete) 작업을 영상에 수행하며, 영상을 S3 버킷에 저장합니다.

 

두 개의 S3 버킷이 이 워크플로우에 사용됩니다. 하나는 원시 비디오를 저장하는 데, 다른 하나는 출력 형식과 비트 전송률이 다른 비디오를 저장하는 데 사용됩니다.

 

여러 Lambda 기능은 MediaConvert 작업 트리거, DynamoDB에 메타데이터 저장, 서명된 URL 토큰 생성, MediaConvert 작업이 완료되면 알림 전송 등의 다양한 용도로 사용됩니다.

 

MediaConvert는 2Mbps, 1Mpb, 600Kbps, 400Kbps의 경우 업로드된 동영상을 HLS 형식으로 자동 변환합니다. 비디오 콘텐츠는 네트워크 대역폭 연결이 다양한 여러 장치에서 재생할 수 있는 적응형 비트 전송률 스트림으로 암호화됩니다.

 

Secrets Manager는 CloudFront URL 서명에 사용되는 CloudFront 개인 키를 안전하게 저장하며, CloudFront는 CDN Edge 위치를 통해 콘텐츠를 런타임에 애플리케이션을 통해 인증된 사용자에게 안전하게 제공합니다.

 

 

추가적인 셋업 정보

  • 서명된 쿠키/URL: CloudFront가 각 URL에 대해 만료 시간, 허용된 IP 주소, FileName을 구성할 수 있도록 허용합니다. 기본적으로 CDN에서 배포한 콘텐츠에는 읽기 권한이 할당되지 않습니다. 앱에서 생성된 올바른 서명 쿠키를 사용하여 요청할 때만 컨텐츠를 다운로드하고 액세스할 수 있습니다.

 

  • S3 CORS 구성은 다음과 같습니다. S3/CDN을 통해 콘텐츠에 액세스할 수 있는 웹 사이트를 구성합니다. 이 블로그 게시물을 통해 S3 CORS 구성에 대해 자세히 알아봅니다.
  • 확장 및 CloudFormation을 통해 솔루션 백엔드에 포함된 리소스 및 서비스를 신속하게 구현할 수 있습니다.

 

 

Workflow 단계별 설명

  1. 관리자는 Cognito에서 인증한 응용프로그램에 로그인하고 동영상을 업로드합니다.
  2. AppSync는 GraphQL API를 사용하여 비디오를 S3 입력 버킷에 업로드합니다.
  3. 입력 버킷에 비디오가 삭제되는 즉시 람다 기능이 트리거됩니다. 이 기능은 MediaConvert 작업을 시작하여 비디오를 다른 형식으로 변환합니다.
  4. 변환된 비디오의 메타데이터를 DynamoDB에 저장하기 위해 추가 람다 함수가 트리거됩니다.
  5. 변환된 비디오는 출력 버킷에 저장됩니다.
  6. CloudFront는 등록된 최종 사용자에게 동영상을 스트리밍합니다.
  7. CloudFront 서명 URL은 인증된 사용자가 비디오를 요청할 때 생성됩니다. 최종 스트림은 Apple HLS 적응 비트 전송률 스트림으로 작동합니다.

 

 

솔루션의 장점

  • CloudFront CDN을 사용하여 비디오 제공 솔루션을 확장합니다.
  • S3 및 CloudFront 서명 URL을 사용하여 무단 액세스를 방지하고 고객의 애플리케이션 외부에서 재생할 수 없도록 비디오 컨텐츠를 보호합니다.
  • MediaConvert를 사용하여 비디오 콘텐츠를 자동 변환합니다.
  • 모든 네트워크 조건에서 버퍼링 지연 없이 재생할 수 있도록 적응형 비트 전송률 스트리밍을 사용하여 여러 장치를 지원합니다.
  • Secrets Manager에서 비밀 키를 안전하게 저장하고 검색합니다.
  • Amplify 및 CloudFormation을 사용하여 솔루션을 신속하게 구축하고 배치합니다.

 

 

자체환경 솔루션 배포

AWS 환경에서 해당 솔루션을 구축하려면 상세 가이드를 다운로드해 주십시오. 테스트를 마쳤으면 추가 비용이 발생하지 않도록 솔루션의 일부로 배포한 서비스를 꺼주시기 바랍니다.

 

실습 가이드는 다음과 같이 구성됩니다.

  1. AWS 증폭을 사용하여 전개하는 단계별 지침
  2. CloudFormation 템플릿
  3. 람다 함수
  4. MediaConvert 작업 템플릿

코드 개발을 도와 문제를 해결해 주신 AWS의 솔루션 아키텍트, Sam Patzer에게 특별한 감사를 드립니다. 오늘 공유드린 코드는 Github에서 공용 사용할 수 있도록 Sam Patzer이 올려놓은 작업물을 바탕으로 작성하였습니다.

 

 

결론

본 게시물에서는 개발자와 설계자가 GraphQL API, 람다 기능, Cognito, AWS Elemental Media Services 및 기타 AWS 서비스를 사용하여 안전한 종단간 비디오 자동화 프로세스를 완료하는 방법에 대해 다루어 보았습니다. 최종 사용자에게 규모에 맞게 비디오를 스트리밍하고, 지연 시간이 짧은 콘텐츠를 제공하며, 가장 중요한 것은 예기치 않은 다운로드로부터 비디오를 보호할 수 있다는 점입니다. 또한 해당 솔루션은 개발 단계를 수동으로 구축하는 복잡성을 제거합니다. 이제 사용자는 본인의 환경에서 솔루션을 구축하고 최종 사용자에게 시연할 수 있는 모든 준비를 갖출 수 있습니다.

 

 

추가 참고 자료

원문URL: https://aws.amazon.com/ko/blogs/media/creating-a-secure-video-on-demand-vod-platform-using-aws/

** 메가존 클라우드 TechBlog는 AWS BLOG 영문 게재 글 중에서 한국 사용자들에게 유용한 정보 및 콘텐츠를 우선적으로 번역하여 내부 엔지니어 검수를 받아서, 정기적으로 게재하고 있습니다. 추가로 번역 및 게재를 희망하는 글에 대해서 관리자에게 메일 또는 SNS 페이지에 댓글을 남겨주시면, 우선적으로 번역해서 전달해드리도록 하겠습니다.