본문 바로가기

About 'IT'/클라우드

[AWS] S3와 IAM 쉽게 이해하기 - 파일 저장과 권한 관리의 핵심

들어가며

최근 팀 프로젝트를 시작하면서 웹 애플리케이션 배포 과정을 공부하던 중 AWS의 핵심 서비스인 S3와 IAM에 대해 알게 되었습니다.

아직 저에겐 익숙치 않은 기술이지만 클라우드 컴퓨팅은 개발 환경에서 필수적인 요소이므로 이번 포스팅에서는 AWS S3와 IAM의 기본 개념과 구조를 이해하고자 포스팅을 작성합니다.

 

 

 

S3(Simple Storage Service)

S3는 데이터를 저장할 수 있는 클라우드 스토리지 서비스입니다. 파일, 이미지, 동영상 등의 데이터를 저장할 수 있는 ‘버킷(bucket)’이라는 공간을 제공하며, 각 파일은 고유의 URL을 통해 접근할 수 있습니다.

 

S3가 많이 사용되는 이유

  • 정적 웹사이트 호스팅
    S3는 정적 웹사이트(HTML, CSS, JavaScript 등)를 저렴한 비용으로 호스팅할 수 있는 플랫폼입니다. React, Vue.js, Angular 같은 SPA(단일 페이지 애플리케이션) 프레임워크로 작성된 프로젝트를 S3에 배포하고,

    CloudFront와 같은 CDN(Content Delivery Network)과 결합하여 빠른 속도로 콘텐츠를 제공할 수 있습니다.
    CloudFront는 AWS의 글로벌 CDN 서비스로, 전 세계에 분산된 엣지 로케이션을 통해 사용자에게 가까운 위치에서 콘텐츠를 제공함으로써 지연 시간을 줄이고, 웹사이트의 로딩 속도를 향상시킵니다. CloudFront를 사용하면 S3에 저장된 정적 파일을 빠르게 전달하고, 더 나아가 웹 애플리케이션의 성능을 최적화할 수 있습니다.


*CDN(콘텐츠 전송 네트워크, Content Delivery Network)

사용자에게 가까운 서버를 통해 웹 콘텐츠(이미지, 비디오, HTML 파일 등)를 빠르고 효율적으로 전달하기 위한 분산 네트워크입니다.

 

이해를 위한 예시
넷플릭스는 전 세계적으로 수백만 명의 사용자가 영화를 스트리밍할 수 있도록, 여러 국가에 분산된 서버(엣지 로케이션)를 운영합니다. 사용자가 한국에서 넷플릭스를 통해 영화를 시청할 때, 그 영화의 데이터는 한국에 위치한 서버에서 제공됩니다.
이렇게 하면 데이터가 사용자에게 더 빠르게 전달되어 버퍼링 없이 매끄럽게 영화를 감상할 수 있습니다. 반대로, 만약 그 서버가 미국에 위치해 있다면, 데이터가 사용자에게 도착하는 데 시간이 더 걸려 스트리밍이 느려질 수 있습니다.
CDN은 넷플릭스처럼 여러 나라에 분산된 서버(엣지 로케이션)를 두어, 사용자와 가장 가까운 위치에서 콘텐츠를 전송함으로써 빠르고 안정적인 스트리밍 환경을 제공합니다.

 

 

  • 이미지, 동영상, 파일 저장소
    웹 애플리케이션 또는 모바일 앱에서 유저가 업로드하는 이미지, 동영상, 문서 파일 등을 저장하기 위해 S3를 자주 사용합니다. 전자상거래 웹사이트에서 상품 이미지나 사용자 프로필 이미지를 S3에 저장합니다.


  • 백업 및 로그 저장
    애플리케이션 로그, 데이터베이스 백업, 기타 시스템 데이터를 저장하기 위해 S3를 사용할 수 있습니다. 이는 데이터의 내구성 및 확장성이 뛰어나기 때문에 배포 및 운영 과정에서 데이터를 안전하게 보관할 수 있는 방법입니다.

 

 

 

IAM(Identity and Access Management)

IAM은 AWS에서 S3 버킷과 같은 리소스에 접근할 수 있는 사용자/그룹/역할에 대해 권한을 설정하고 관리하는 서비스입니다.

즉, 누가 어떤 리소스에 접근할 수 있을지 권한을 부여하거나 제한하는 역할을 합니다.

IAM은 AWS 리소스에 대한 접근 제어를 관리하는 핵심 서비스이기 때문에, 배포 단계에서 반드시 필요합니다. 

IAM이 많이 사용되는 이유

  • S3에 대한 권한 관리
    프로젝트 배포 시, 개발자나 애플리케이션이 S3 버킷에 접근할 수 있도록 해야 합니다. IAM을 통해 개발자나 애플리케이션이 필요한 리소스에만 접근하도록 세밀하게 권한을 설정할 수 있습니다.


  • CI/CD 파이프라인 설정
    프로젝트 배포 자동화를 위한 CI/CD 파이프라인에서, S3 또는 다른 AWS 서비스에 접근하기 위한 권한을 설정할 때 IAM 역할(Role)과 정책(Policy)이 필요합니다. GitLab CI, Jenkins, AWS CodePipeline 등을 사용하여 S3에 파일을 자동 배포할 때 IAM 역할을 부여합니다.


  • 서버리스 애플리케이션에서의 사용
    서버리스 프레임워크인 AWS Lambda는 서버를 관리하지 않고도 코드를 실행할 수 있는 서비스입니다.
    즉 사용자는 코드만 작성하면 AWS가 자동으로 서버를 설정하고 운영합니다.
    AWS Lambda이벤트 기반으로 작동하여, S3와 같은 AWS 서비스에서 발생하는 이벤트(예: 파일 업로드, 삭제 등)에 반응하여 자동으로 특정 작업을 수행할 수 있습니다.

    사용자가 S3 버킷에 이미지를 업로드하면, AWS Lambda가 이 이벤트를 감지하여 자동으로 이미지를 처리하거나 변환하는 작업을 수행할 수 있습니다.이 과정에서 IAM 역할을 통해 Lambda 함수가 S3에 접근하거나 S3에서 발생하는 이벤트에 반응할 수 있도록 권한을 설정하게 됩니다.

  • 보안 관리
    프로젝트의 배포 및 운영 중 특정 사용자 또는 서비스가 AWS 리소스에 접근할 수 있도록 보안 정책을 IAM으로 설정합니다.

    개발 환경에서만 S3에 접근 가능하도록 설정하거나, 특정 팀만 데이터에 접근할 수 있게 하는 등의 세부적인 권한 제어가 가능합니다.

IAM Role(역할)

  • 사용자 또는 서비스에 부여 가능: IAM 역할은 특정한 사람에게만이 아니라, AWS의 특정 서비스나 외부 애플리케이션에도 부여될 수 있습니다. 예를 들어, EC2 인스턴스에서 S3 버킷에 접근하도록 하는 역할을 만들 수 있습니다.

  • 임시 권한 부여: IAM 역할은 사용자가 로그인을 하거나 인증을 할 때 임시 자격 증명을 부여받아 그 기간 동안 특정한 AWS 리소스에 접근할 수 있게 합니다.

  • 정책에 의해 관리됨: IAM 역할은 하나 이상의 권한 정책을 통해 관리되며, 이 정책은 사용자가 어떤 작업을 할 수 있는지를 결정합니다. 예를 들어, EC2 인스턴스가 S3 버킷에 읽기 또는 쓰기 권한을 갖도록 하는 정책을 포함할 수 있습니다.

 

IAM Policy(정책)

IAM(Identity and Access Management) 정책(Policy)은 AWS에서 사용자, 그룹, 역할 등에 권한을 부여하거나 제한하기 위해 사용하는 규칙 집합입니다. 정책을 통해 어떤 사용자가 어떤 AWS 리소스에 어떤 액션(작업)을 수행할 수 있는지를 제어할 수 있습니다.

 

IAM 정책의 종류

관리형 정책(Managed Policy)

  • AWS 관리형 정책: AWS에서 미리 정의해놓은 정책으로, 사용자가 직접 정책을 작성하지 않고 사용할 수 있습니다.
    예: AmazonS3ReadOnlyAccess, AdministratorAccess.

  • 사용자 정의 관리형 정책: 사용자가 직접 JSON 형식으로 작성한 정책을 생성하여 특정 역할이나 사용자에게 부여할 수 있습니다.

  • 인라인 정책(Inline Policy): 특정 IAM 사용자, 그룹 또는 역할에 직접 연결된 정책입니다. 관리형 정책과 달리 재사용되지 않으며, 특정 엔터티에만 적용됩니다.

 

IAM 정책의 주요 구성 요소

  • 버전(Version): 정책의 JSON 구문 버전을 정의합니다. 주로 "2012-10-17"을 사용합니다.

  • 효과(Effect): Allow 또는 Deny로 설정되며, 액세스를 허용할지, 차단할지를 결정합니다.

  • 작업(Action): 정책이 허용하거나 차단할 특정 AWS 서비스의 작업을 정의합니다. 예를 들어, S3의 s3:GetObject나 s3:PutObject 등의 작업이 있습니다.

  • 리소스(Resource): 작업을 수행할 특정 AWS 리소스를 정의합니다. 예를 들어, S3 버킷, DynamoDB 테이블 등의 ARN(Amazon Resource Name)을 지정합니다.

  • 조건(Condition): 액세스 권한을 부여할 조건을 추가적으로 정의할 수 있습니다. 예를 들어, 특정 IP 주소에서만 접근이 가능하게 하거나 특정 시간이 되었을 때만 접근할 수 있게 제한할 수 있습니다.

 

 

 

 


S3와 IAM의 관계

IAM을 사용해 S3 버킷과 파일에 대한 접근 권한을 제어합니다. 사용자가 S3에 파일을 업로드하거나 다운로드할 수 있는 권한을 가지려면 IAM에서 그 권한을 설정해야합니다.

 

웹 애플리케이션에서 사용자가 프로필 이미지를 업로드하는 기능을 구현했다고 가정해 봅니다.

해당 이미지를 안전하게 저장하기 위해 AWS S3를 사용하고자 하고, 이미지를 올리거나 가져오는 작업이 특정 사용자에게만 허용 되도록 IAM을 통해 권한을 제어해야 합니다.

 

요약

S3와 IAM은 프로젝트 배포 시 자주 사용되는 AWS 서비스입니다.
S3는 정적 파일, 이미지, 백업 및 로그 저장소로 대량의 데이터를 안전하게 저장하고 관리할 수 있는 서비스입니다.
IAM은 이러한 리소스에 대한 권한 관리와 보안을 담당하며 IAM을 활용하면 데이터의 보안과 접근 권한을 세밀하게 조정할 수 있습니다.

프로젝트 규모와 관계없이 AWS 환경에서 배포할 때 이 두 가지 서비스를 함께 사용하는 것이 일반적입니다. 

 

 

글을 마치며

이번 포스팅을 통해 AWS의 S3와 IAM 개념을 깊이 있게 학습하고, 이와 관련된 여러 용어들에 대해서도 이해할 수 있었습니다.

다음 포스팅에서는 S3, IAM 세팅하는 방법에 대해 작성 하도록 하겠습니다.

'About 'IT' > 클라우드' 카테고리의 다른 글

클라우드 컴퓨팅 유형  (0) 2020.12.22
클라우드 서비스 모델  (0) 2020.12.21
Microsoft Azure가 뭐야?  (0) 2020.12.21