S3[Amazon Simple Storage Service]
AWS에서 제공하는 객체 스토리지 서비스입니다. 아마존 S3는 웹 서비스 인터페이스를 통해 스토리지를 제공합니다.
쉽게 말해서, AWS에서 사용할 수 있는 하드 디스크라고 생각할 수 있습니다.
1. S3 개요
- 확장성, 가용성 및 내구성이 뛰어난 객체 스토리지 서비스
- 파일, 이미지, 비디오 등 다양한 유형의 데이터를 저장하고 검색하는 데 사용
- 웹 인터페이스, CLI, SDK 등을 통해 액세스 가능
2. S3의 주요 개념
- 버킷(Bucket): 데이터를 저장하는 컨테이너로, 고유한 이름을 가짐
- 객체(Object): 버킷에 저장되는 데이터 단위로, 키(Key)와 메타데이터로 구성
- 키(Key): 객체를 식별하는 고유한 식별자
- 버전 관리(Versioning): 객체의 여러 버전을 유지하고 관리할 수 있는 기능
3. S3의 보안 및 액세스 제어
- IAM(Identity and Access Management)을 통한 사용자 및 권한 관리
- 버킷 정책과 ACL(Access Control List)을 사용하여 버킷 및 객체에 대한 액세스 제어
- 서버 측 암호화(SSE) 및 클라이언트 측 암호화를 통한 데이터 보호
4. S3의 성능 및 확장성
- 높은 확장성과 가용성을 제공하여 대량의 데이터를 처리할 수 있음
- 트래픽이 많은 웹 애플리케이션의 정적 파일 호스팅에 적합
- S3 Transfer Acceleration을 통해 장거리 데이터 전송 속도 향상
5. S3의 사용 사례
- 백업 및 아카이빙
- 콘텐츠 배포 및 호스팅
- 빅데이터 분석 및 데이터 레이크
- 재해 복구 및 비즈니스 연속성
6. S3와 다른 AWS 서비스와의 통합
- AWS Lambda, EC2, CloudFront 등 다른 AWS 서비스와 원활하게 통합
- 이벤트 기반 아키텍처 구현에 활용 (예: S3 이벤트 트리거)
ACL[Access Control List]
ACL은 S3 버킷과 객체에 대한 액세스 권한을 관리하는 데 사용되는 레거시 액세스 제어 메커니즘입니다. ACL을 사용하면 버킷 또는 객체 수준에서 다른 AWS 계정이나 일반 공개 액세스에 대한 읽기, 쓰기 및 권한 부여 권한을 제어할 수 있습니다.
1. 버킷 ACL과 객체 ACL
- 버킷 ACL은 버킷 자체에 대한 액세스 권한을 제어합니다.
- 객체 ACL은 개별 객체에 대한 액세스 권한을 제어합니다.
2. 사전 정의된 그룹
- ACL에는 사전 정의된 그룹이 있어 권한 부여에 사용할 수 있습니다.
- 대표적인 그룹으로는 버킷/객체 소유자, 인증된 사용자, 모든 사용자(공개 액세스) 등이 있습니다.
3. 권한 유형
- READ: 버킷이나 객체의 내용을 읽을 수 있는 권한
- WRITE: 버킷에 객체를 쓰거나 삭제할 수 있는 권한 (버킷 ACL에만 적용)
- READ_ACP: 버킷이나 객체의 ACL을 읽을 수 있는 권한
- WRITE_ACP: 버킷이나 객체의 ACL을 수정할 수 있는 권한
- FULL_CONTROL: 모든 권한을 포함하는 권한
4. 권한 부여 방식
- 명시적 거부(Explicit Deny): 명시적으로 권한을 거부하는 것으로, 다른 모든 권한보다 우선합니다.
- 명시적 허용(Explicit Allow): 명시적으로 권한을 부여하는 것으로, 명시적 거부가 없는 경우 적용됩니다.
ACL은 S3의 초기 액세스 제어 메커니즘이었지만, 현재는 IAM 정책과 버킷 정책을 사용하는 것이 권장됩니다. IAM과 버킷 정책은 보다 세분화되고 유연한 액세스 제어를 제공하며, ACL보다 우선적으로 적용됩니다.
그러나 레거시 애플리케이션이나 특정 사용 사례에 따라 ACL을 사용해야 할 수도 있습니다. ACL은 IAM 및 버킷 정책과 함께 사용할 수 있으며, 이 경우 가장 제한적인 정책이 적용됩니다.
정적 웹서비스 구축
AWS에서 S3를 검색한 뒤, 버킷 만들기를 누릅니다.
버킷이름은 본인이 원하는 이름으로 선택해줍니다. 저는 간단하게 myhistbucket으로 선택해주었습니다.
그리고 일단 연습용으로 만들었기 때문에 모든 퍼블릭 액세스 차단 버튼을 해제합니다.
나머지 설정들은 기본으로 선택되어있는 값들을 선택해주었습니다. 아직 Key Management Service에 대해선 다루지 않았으므로.. SSE-S3를 사용한 서버 측 암호화로 선택해주었습니다.
업로드에서 드래그 앤 드롭으로 간단하게 업로드 할 수 있습니다. 저는 예전에 스키장에서 찍었던 사진을 그냥.. 보여성.. 업로드 해봤습니다.
이렇게 성공 메세지가 뜨면서 업로드 된 모습을 확인할 수 있었습니다.
myhistbucket에서 권한 -> 객체 소유권 편집을 클릭해서 ACL 활성화됨을 클릭합니다.
ACL을 활성화 해줘야 다른 권한 설정을 할 수 있기 때문입니다.
여기서 이미지를 웹에서 확인하고 싶어서 URL을 복사해서 주소창에 쳤더니 아래와 같은 에러메시지가 발생하는 것을 확인할 수 있습니다.
Message를 확인해보니, AccessDenied가 원인인 것 같습니다. S3는 폐쇄형 권한 정책을 사용해서 별도로 설정하지 않으면 권한이 비활성화 되어있습니다.
해당 이미지에 들어간 뒤에 권한을 클릭해줍니다.
ACL -> 편집 -> 모든 사람[퍼블릭 액세스] 에서 객체, 객체 ACL 모두 읽기 권한을 활성화 해줍니다.
이런식으로 해당이미지가 웹 상에서 보이는 모습을 확인할 수 있었습니다. 웹 호스팅이 성공 했음을 보여줍니다!
권한 설정 방법 - 2
권한 -> 버킷 정책 -> 편집을 클릭해줍니다.
정책 생성기를 클릭하면 이런 화면이 나옵니다. 위의 순서대로 작성해줍니다. 그리고 ARN의 경우에는 버킷의 ARN을 복사한 뒤 /*을 붙여줍니다. 이러면 버킷 안에 있는 모든 것에 대한 권한 설정을 해주는 것을 의미합니다.
{
"Id": "Policy1712494502443",
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt1712494501438",
"Action": [
"s3:GetObject"
],
"Effect": "Allow",
"Resource": "arn:aws:s3:::myhistbucket/*",
"Principal": "*"
}
]
}
버킷 -> 속성 -> 정적 웹 사이트 호스팅 편집을 클릭해 줍니다.
활성화 -> html 파일명을 적어줍니다.
아래에 적혀있는 웹 사이트를 클릭하면 웹 사이트를 볼 수 있습니다.
이로써 성공적으로 정적 웹 사이트를 호스팅을 만들어봤습니다.
'개발 > AWS' 카테고리의 다른 글
[AWS] EC2 인스턴스로부터 AMI 이미지를 생성해보기 (0) | 2024.04.09 |
---|---|
[AWS] Elastic IP 탄력적 IP 할당 (0) | 2024.04.09 |
[AWS] IAM 계정을 생성해보자! MFA 설정도 ! 초간단! (0) | 2024.03.11 |
[AWS] AWS 계정을 생성해보자 (프리티어) - 1단계 (2) | 2024.02.02 |
[AWS] EKS 환경구성 (Bastion에 kubectl을 설치해보자!) (1) | 2024.01.16 |