Amazon Simple Storage Service (S3)

kauze98·2025년 4월 29일

AWS 실습

목록 보기
5/16

1. 개요

이번 실습에서는 AWS Management Console을 사용하여 Amazon S3의 기본적인 기능을 직접 다루어봅니다.

Amazon Simple Storage Service(Amazon S3)는 업계 최고 수준의 확장성, 데이터 가용성, 보안, 성능을 제공하는 객체 스토리지 서비스입니다.

이를 통해 기업과 개인은 규모나 업종에 관계없이

  • 웹사이트 호스팅

  • 모바일 애플리케이션 저장소

  • 데이터 백업 및 복구

  • 장기 아카이브

  • 엔터프라이즈 애플리케이션 데이터 저장

  • IoT 디바이스 데이터 관리

  • 빅데이터 분석 등 다양한 사용 사례에서 대용량 데이터를 안전하게 저장하고 보호할 수 있습니다.

Amazon S3는 99.999999999% (11 9's) 내구성을 제공하도록 설계되었으며,
세계 수백만 개의 애플리케이션을 위한 데이터 저장 기반으로 활용되고 있습니다.

또한, S3는 사용이 간편한 관리 기능을 제공하여
조직별 요구 사항이나 규정 준수 기준에 맞춰 데이터를 체계적으로 관리하고,
정교한 액세스 제어를 설정할 수 있도록 지원합니다.

이번 실습을 통해 Amazon S3의 기본적인 저장소 구성, 데이터 업로드, 액세스 권한 관리 방법을 직접 익혀보겠습니다.

 


2. 버킷 만들기 및 버킷에 객체 업로드

Amazon S3의 기본 기능과 보안 설정을 실습하기 위해, EC2 인스턴스의 보고서 데이터를 저장할 새로운 S3 버킷을 생성합니다.

Amazon S3는 모든 데이터를 버킷이라는 컨테이너 안에 저장하기 때문에, S3를 활용하려면 가장 먼저 버킷을 생성해야 합니다.

  • AWS Management Console의 S3 서비스로 이동합니다.

  • Create bucket을 클릭하여 버킷 생성을 시작합니다.

  • 버킷 이름은 규칙에 맞게 설정합니다:

  • 이름 예시: reportbucket123456
    (※ 소문자, 숫자, 하이픈만 사용 가능 / 고유해야 함)

  • General configuration 섹션:
    - 버킷 이름: reportbucket(NUMBER) 형식 지정

  • Object Ownership 섹션:
    - ACLs enabled 설정
    - Object writer 권한 부여

  • Region 설정은 기본값 그대로 둡니다.
    - (리전을 직접 지정하면 지연 시간 최적화, 규정 준수 등 장점이 있으나, 이번 실습에서는 기본값 사용)

모든 설정을 완료한 후, Create bucket을 클릭하여 버킷을 생성합니다.

 

Amazon S3에서는 텍스트 파일, 이미지, 동영상, zip 파일 등 다양한 형태의 파일을 "객체(object)" 로 저장할 수 있습니다.

객체를 업로드할 때, 사용자 지정 메타데이터(metadata) 를 추가할 수 있으며, 객체별로 별도의 액세스 권한 설정도 가능합니다.

이번 과제에서는 생성한 reportbucket 버킷에
new-report.png 이미지 파일을 업로드하여 S3의 기본 업로드 기능을 확인했습니다.

업로드가 성공하면 "Upload succeeded" 메시지가 표시되고,
파일이 버킷 내에서 관리할 수 있게 됩니다.

 


3. 객체를 공개로 만들기


Amazon S3는 기본적으로 모든 객체가 비공개 상태입니다.

이번 과제에서는 new-report.png 객체를 S3 버킷(reportbucket)에 업로드한 뒤,

기본적으로 Access Denied(접근 거부) 가 발생하는 것을 직접 확인했습니다.

이를 통해 Amazon S3가 보안을 최우선으로 고려하여 기본적으로 외부 접근을 차단한다는 사실을 검증했습니다.

버킷 레벨 퍼블릭 액세스 차단(BPA) 설정을 해제했습니다.

Block all public access 옵션을 껐습니다.

이후 new-report.png 객체를 ACL(Access Control List)을 통해 퍼블릭으로 전환했습니다.

이 설정을 통해 누구나 이 객체(URL)를 통해 접근할 수 있도록 허용했습니다

 


4. EC2 인스턴스에서 연결 테스트

Amazon EC2 인스턴스(Bastion Host) 에 접속하여, S3 버킷(reportbucket) 에 대한 연결 상태와 권한을 직접 확인했습니다.

EC2 인스턴스에는 이미 IAM 역할이 부여되어 있어, 인증 정보를 별도로 입력하지 않고도 AWS CLI를 통해 S3 버킷과 통신할 수 있습니다.

aws s3 ls 명령어를 통해 모든 S3 버킷 목록을 성공적으로 확인했고, 생성한 reportbucket도 목록에 나타나는 것을 확인했습니다.

aws s3 ls s3://reportbucket(NUMBER) 명령어를 통해 reportbucket 안에 있는 new-report.png 파일을 정상적으로 조회했습니다.

EC2 인스턴스 홈 디렉토리(/home/ssm-user)로 이동하여 명령어를 실행했습니다.

reports 디렉토리에 테스트용 파일들이 존재하는 것도 확인했습니다.

aws s3 cp report-test1.txt s3://reportbucket(NUMBER) 명령어로 파일을 업로드 시도했으나, upload failed 오류가 발생했습니다.

업로드 실패 원인 -> 현재 EC2 인스턴스에 부여된 IAM 역할에는 S3 버킷에 대한 읽기(Read) 권한만 있고, 쓰기(PutObject) 권한은 없기 때문

 


5. 버킷 정책 생성

이번 과제에서는 EC2 인스턴스가 S3 버킷에 파일을 읽고 쓸 수 있도록
S3 버킷 정책(Bucket Policy) 을 새로 작성하고 적용했습니다.

 

버킷 정책이란?
S3 버킷 전체(또는 특정 디렉터리)에 적용되는 권한 집합입니다.
버킷 정책을 통해 IAM 역할이나 특정 사용자/모두(*) 에게 세부적인 액세스 권한을 부여할 수 있습니다.

정책 작성 흐름:

  • EC2 인스턴스에 부여된 IAM 역할(EC2InstanceProfileRole)을 기준으로,

  • S3 버킷(reportbucket)의 모든 객체에 대해
    - 읽기(GetObject)
    - 쓰기(PutObject)
    권한을 부여하는 정책을 생성했습니다.

  • 버킷 ARN(예: arn:aws:s3:::reportbucket987987/*)을 활용해
    버킷 전체 객체를 대상으로 정책을 적용했습니다.

  • 적용 결과:
    - EC2 인스턴스에서 S3 버킷으로 파일 업로드(put) 성공
    - EC2 인스턴스에서 S3 버킷에서 파일 다운로드(get) 성공

{
  "Id": "Policy1745893268661",
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Stmt1745893267285",
      "Action": [
        "s3:GetObject",
        "s3:PutObject"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::reportbucket7946135/*",
      "Principal": {
        "AWS": [
          "arn:aws:iam::492975102820:role/EC2InstanceProfileRole"
        ]
      }
    }
  ]
}

EC2 인스턴스 외에도, 브라우저(모든 사용자)에서 S3 객체를 읽을 수 있도록
모두(*) 에 대해 s3:GetObject 권한을 부여하는 추가 스테이트먼트를 정책에 삽입했습니다.

이로 인해, 브라우저에서 sample-file.txt 파일을 새로고침했을 때
정상적으로 파일 내용이 표시되는 것을 확인했습니다.
정책 코드에 아래 코드를 추가하여

{
  "Sid": "PublicReadAccess",
  "Effect": "Allow",
  "Principal": "*",
  "Action": "s3:GetObject",
  "Resource": "arn:aws:s3:::reportbucket7946135/*"
}
{
  "Id": "Policy1745893268661",
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Stmt1745893267285",
      "Action": [
        "s3:GetObject",
        "s3:PutObject"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::reportbucket7946135/*",
      "Principal": {
        "AWS": [
          "arn:aws:iam::492975102820:role/EC2InstanceProfileRole"
        ]
      }
    },
    {
      "Sid": "PublicReadAccess",
      "Effect": "Allow",
      "Principal": "*",
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::reportbucket7946135/*"
    }
  ]
}

이렇게 하면 만들면,

EC2 인스턴스 → 파일 읽기/쓰기 가능

브라우저(모든 사람) → 파일 읽기(보기) 가능

 


6. 버전 관리 탐색

업로드중..
ss

업로드중..

sample-file.txt에서 URL 링크를 사용하여 기존 sample-file.txt 파일 버전에 액세스하려고 하면 Access Denied 메시지가 수신됩니다. 이 오류는 이전 과제에서 생성한 버킷 정책이 객체의 최신 버전에만 액세스할 수 있는 권한을 허용하기 때문에 나타납니다

<Error>
<Code>AccessDenied</Code>
<Message>Access Denied</Message>
<RequestId>VDRZDWVE6N4ZMKKZ</RequestId>
<HostId>vhenljFB6w1AVkKHje5XV9F8GBjevN0s5+9ED9Ad6+yLdTPFbT7P6R4O+1/kCu/5kwWJpJETe425Zryv48Jf/v6ewQCVqHl6</HostId>
</Error>

“s3:GetObjectVersion” 권한이 포함되도록 버킷 정책을 업데이트해야 합니다.

업로드중..
new-report.png 객체는 하나의 버전만 있고 version ID가 null입니다. 이 버킷에서 버전 관리를 활성화하기 전에 객체가 업로드되었기 때문입니다.


마무리

이번 실습을 통해 Amazon S3의 기본적인 객체 저장 방식부터 보안 제어, 버킷 정책 구성, 그리고 고급 기능인 버전 관리까지 전체 흐름을 단계적으로 경험할 수 있었습니다.

특히,객체 업로드 및 권한 테스트, EC2 인스턴스에서의 S3 접근 검증, 버킷 정책을 통한 접근 통제 및 퍼블릭 접근 허용 설정, 그리고 객체의 변경 이력과 삭제 복구를 관리할 수 있는 버전 관리 기능까지 체계적으로 실습하며
S3를 실무에서 어떻게 설계하고 운영할 수 있는지에 대한 실질적인 감각을 익혔습니다.

이번 과정을 통해 단순한 저장소 이상의 기능을 제공하는 S3의 보안성과 유연성을 체감할 수 있었고,
향후 클라우드 기반 아키텍처 설계나 인프라 운영 시 신뢰성 있는 스토리지 구성 역량에 자신감을 갖게 되었습니다.

profile

0개의 댓글