Cloud/AWS SAA
Learning Plan Labs 3.S3
uning
2026. 3. 23. 16:20
- S3
- Simple Storage Service
- 객체(txt 파일, 사진, 영상, zip 파일 등) 스토리지 서비스, 원하는 용량 만큼 데이터 저장 및 보호 가능(드라이브와 비슷한 개념)
- 데이터 조직화 및 세부적인 엑세스 제어 구성 가능
<<< 실습 case >>>
EC2 보고서 데이터 보관하는 환경 구성
버킷(드라이브) 생성 -> 객체 업로드 -> 해당 버킷에 EC2 인스턴스 연결 및 사용(보안성)
- 버킷
- S3의 모든 객체는 버킷에 저장(업로드)
- 버킷 이름은 리전과 관계없이 고유해야함
- 버킷 생성 후 이름 변경 불가
- 객체
- S3 내 객체는 기본적으로 비공개로, 객체 url 브라우저 입력 시 Access Denied 발생
- 객체 actions 에서 'ACL 사용하여 퍼블릭으로 설정' 을 하려면, 우선 버킷의 퍼블릭 엑세스 허용 설정이 필요
- 버킷 설정이 개별 객체에 적용되는 모든 권한을 재정의
- 버킷의 퍼블릭 엑세스 차단(BPA) 을 off 해야 퍼블릭 허용 가능
- 버킷 개요 -> 권한 -> 퍼블릭 엑세스 차단(버킷 설정) -> Block all public access off
- 위에서 버킷의 퍼블릭 엑세스 차단 설정 해제 후 개별 객체 설정에서 퍼블릭 설정 후 url 로 접근 가능
- 전체 버킷에 대한 엑세스 권한 부여는 버킷 정책 사용
<<< 실습 1 >>>
버킷에 대한 특정 액세스 권한 허용하는 버킷 정책 생성 (인스턴스 <-> 버킷 / 파일 넣고 빼기)
- 인스턴스에서 버킷 설정
- SSM (Session Manager)
- 방화벽, VPC 보안그룹 포트 오픈없이 베스천 호스트 인스턴스 접속 가능
- aws s3 cp 명령어로 인스턴스 특정 디렉토리 내 있는 객체를 테스트 버킷에 복사 시도 시 failed
- 현재 버킷에 대한 읽기 전용 권한만 있고 PutObject 작업 권한이 없기 때문
- 버킷 정책
- S3 버킷에 연결된 권한 집합
- 전체 버킷 / 버킷 내 특정 디렉토리 등의 엑세스 제어 가능
- 버킷 정책 생성
- EC2 인스턴스에서 버킷에 대한 읽기 및 쓰기 액세스 활성화
- aws 정책은 json 형식
- 아까 버킷에서 BPA(버킷 퍼블릭 액세스) 비활성화 후 특정 객체에 별도 허용 설정 했기 때문에 다른 객체를 동일하게 url 접속 시 차단
- 따라서 버킷의 모든 객체에 대한 액세스 권한을 부여하도록 버킷 정책 구성 필요
- IAM - Roles 로 접근제어 설정
- EC2InstanceProfileRole 의 ARN(amazon resource name) 복사
- ARN: aws 전체에서 리소스를 고유하게 식별하는 이름

- 버킷으로 돌아와서 권한 - 버킷 정책 설정 - 버킷 ARN 복사
- aws policy gen html 로 이동
- Principal
- IAM Role 에서 복사한 ARN 입력(IAM EC2InstanceProfileRole ARN)
- ARN
- 버킷 ARN 입력(이 ARN이 버킷을 참조)
- 맨 끝 /* 입력 (해당 버킷 정책을 버킷 내 모든 객체에 적용)
- Type of Policy
- Actions
- PutObject (버킷에 넣기)
- GetObject (버킷에서 빼기)


- 위 정책 복사 및 S3 버킷 - 권한 - 버킷 정책에 붙여넣기
- SSM 창에서 객체 복붙 명령어 실행
- PutObject
- 버킷으로 put
- 인스턴스 내 있는 파일을 특정 s3 버킷으로 복사 (객체 복사)

- GetObject (읽기)
- 버킷으로부터 get
- 특정 버킷에 저장된 객체를 현재의 인스턴스로 복사

- 여전히 sample-file.txt 에 대한 url 접근은 denied
- 버킷 정책에서 EC2InstanceProfileRole 이라는 보안 주체에 대한 권한만 부여했기 때문에
- 정책 생성기에서 모두에게 읽기 액세스(GetObject)를 허용하는 다른 statement 추가 필요
- 위 작업을 통해 EC2InstanceProfileRole 이 버킷에 액세스하도록 허용하고, 모든 사용자에게 브라우저를 통해 객체를 읽을 수 있는 권한을 부여
- 모두에게 읽기 액세스 부여 위해 정책 생성기에서 추가 설정
- principal: * 로 설정
- Actions: GetObject 만 추가
- 리소스 끝에 /* 까지 추가 필요(캡쳐에서 누락됨)


<<< 실습2 >>>
객체 복사본을 실수로 삭제하지 않도록 유지하는 방법
- 버전 관리
- 같은 버킷에 여러 객체 변형 버전을 유지
- reportbucket 에서 버전 관리 활성화 필요
- 객체 속성에서 버전 관리 활성화 시
- 버전을 달리 지정하지 않는 한 같은 이름의 객체를 업로드하면 url 객체의 최신버전을 반환

- null: 이전에 올린 sample-file.txt 객체
- 객체 url 링크로 이전 버전의 sample-file.txt 액세스 시도 시 access denied
- 버킷 정책에서 객체의 최신 버전에만 액세스할 수 있는 권한을 허용했기 때문에
- 이전 버전에도 접근하려면 "s3:GetObjectVersion" 권한 포함되도록 정책 업데이트 필요
- 이전 버전이 있는 객체를 삭제 후 복구하려면?
- 버킷에서 버전 관리를 활성화한 경우, 객체가 즉시 삭제되지 않고 S3에서 현재 객체 버전이 되는 삭제 마커를 삽입
- 삭제 마커 표기된 객체를 삭제하여 객체 복구 가능
- 객체의 특정 버전을 삭제할 때는 삭제 마커가 생성되지 않고, 영구적으로 삭제됨
S3 관련 예제 문제
'Cloud/AWS SAA' Related Articles