AWS S3(Simple Storage Service)란?
Simple Storage Service의 약자로 파일 서버의 역할을 하는 서비스다. 일반적인 파일서버는 트래픽이 증가함에 따라서 장비를 증설하는 작업을 해야 하는데 S3는 이와 같은 것을 대행한다.
- 정보의 중요도에 따라서 보호 수준을 차등 할 수 있고, 이에 따라서 비용을 절감 할 수 있다.
- 저장할 수 있는 파일 수의 제한이 없다.
- 최소 1바이트에서 최대 5TB의 데이터를 저장하고 서비스 할 수 있다.
- 파일에 인증을 붙여서 무단으로 엑세스 하지 못하도록 할 수 있다.
Amazon S3 용어
Buckets
- Amazon S3에서 생성되는 최상위의 디렉토리, Amazon S3에 저장된 객체의 컨테이너이다.
- S3상의 모든 객체는 버킷에 포함된다.
- 버킷의 이름은 S3에서 유일해야 한다.
- 버킷에 포함된 모든 객체에 대해서 일괄적으로 인증과 접속 제한을 걸 수 있다.
Objects
- S3에 데이터가 저장되는 최소 단위이다.
- Objects는 최대 5TB까지 허용한다.
Keys
- 버킷 내 객체의 고유 식별자이다.
- 버킷의 모든 객체에는 하나의 키가 존재한다.
- 보통 "디렉토리 + 파일명" 으로 정의된다.
Regions
- 지역 간 객체 공유는 불가능하다.
- 버킷 단위로 지역(region)을 지정 할 수 있다. 지역을 어디에 지정하냐에 따라 지연 시간, 비용 등이 결정된다.
버킷생성하기
처음 아마존에서 버킷을 만들려면 s3에 들어간다. 버킷만들기라는 버튼을 누르면 아래와 같은 페이지가 나온다.
버킷 이름에는 내가 만들고자 하는 버킷의 이름을 지정한다. 그리고 지역은 서울로 설정하였다.
객체 소유권은 아마존에서 권장하는 acl 비활성화를 택해주었다.
이와 같은 경우는 여러 블로그에서 어떠한 경우는 차단하고 어떠한 경우는 차단하는 선택지항목이 많아, 처음에는 차단을 몇개해주었는데 이로 인해서 이후에 s3의 퍼블릭 액세스가 안되어서 다 해제해주었다. 처음에 모르고 설정했더라도 나중에 설정을 해제할 수 있다.
위와 같이 다 비활성화해주었다. 버전 관리의 경우, 같은 파일을 올리면서 계속 업데이트 과정을 거치더라도 업데이트 이전의 내용을 복원할 수 있게 해준다. 이와 같은 설정을 마치면 버킷 생성이 된다. 이렇게 생성해주었을 때 버킷 목록에 가보면 버킷 및 객체가 퍼블릭이 아니라는 문구가 뜬다. 여기서 몇가지 과정을 더 해주어야 한다.
버킷 정책 생성하기
- step1에서 select type of policy를 s3 Bucket Policy로 설정해주고
- step2에서 effect를 allow해주고
- principal을 *로
- Actions: GetObject로 해준다. 조회가 가능하도록 설정하는 것이다.
- 마지막으로, Amazon Resource Name (ARN): arn:aws:s3:::{버킷이름}/*로 설정해주면 된다.
- Add Statement버튼을 눌러준다. 이후 아래와 같은 항목이 뜬다.
- 이번에 생성할려고 했더니 arn관련해서 저런 오류가 계속 뜬다. 그래서 검색해보니 아래와 같은 코드를 입력하면 퍼블릭이 되는 것을 확인할 수 있다.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "PublicReadGetObject",
"Effect": "Allow",
"Principal": "*",
"Action": [
"s3:GetObject"
],
"Resource": [
"S3 Bucket의 ARN/*"
]
}
]
}
입력한 항목이 맞는지 확인하고 generate policy를 누르면, 생성된 정책의 json값을 복사한다.
창을 혹시 모르니 띄어놓고 다른 탭을 띄워 아까 생성한 버킷에 들어간다. 버킷에서 권한을 눌러 버킷 정책 편집을 클릭한다. json값을 붙여넣고 변경 사항을 저장하면 되는데 나같은 경우에는 오류가 발생하였다. 아까 위에 써놓은 것처럼 퍼블릭 액세스 차단설정으로 인한 오류였다. 모르고 삽질 몇번하다가 전체 다 해제해주었더니 오류가 사라졌다.
위의 cross-origin는 다른 도메인의 리소스가 상호작용하는 경우에 적용해주는데 나같은 경우는 혹시 몰라 적용해주었다.
액세스키 생성
나의 경우는 액세스키를 생성할 필요가 없었는데 오류로 인한 삽질을 하다보니 액세스키를 생성해주게 되었다. 액세스키는 모든 퍼블릭 액세스를 차단했을 경우에 필요하다. s3에 접근할려면 별도의 인증과정이 필요하다. 이 때 사용되는 것이 액세스키이다.
아래 화면은 아마존 IAM에 들어가서 액세스키메뉴에서 새 액세스키 만들기 버튼을 누르면 나오는 화면이다. 혹은 내 아이디를 누르면 내 보안 자격 증명을 누르면 액세스키 화면이 나온다.
사용자 이름을 임의로 작성하고, 액세스 유형에는 위의 액세스 방법을 선택하였다.
그 다음에는 권한 설정하는게 나오는데 S3을 사용하기 위하여 액세스키를 만들어주는 것이기에 S3FullAccess를 선택하여 액세스키를 생성하였다. 또한 이는 잘 관리해야 하는데, 노출되게 되면 비용을 어마무시하게 받게 된다.
그러면 위와 같이 생성된다.
확인
내가 만든 버킷에 들어가보면 규칙생성 전에는 왼쪽같은 모습이었다가, 퍼블릭으로 변한 모습을 볼 수 있다. 이렇게 변화했을 경우 s3를 사용해도 괜찮다.