(2)

S3 + CloudFront 를 이용한 웹 호스팅

버킷을 생성할때 퍼블릭 액세스 차단 설정을 해제하여 누구든지 접속인 가능하게 합니다. 그리고 해당 버킷의 정책을 아래와 같이 객체 읽기 권한만 줍니다. { "Version": "2012-10-17", "Statement": [ { "Sid": "AddPerm", "Effect": "Allow", "Principal": "*", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::/*" } ] } 그리고 해당 버킷만 접근이 가능하도록 IAM 사용자를 생성해야하는데 Role을 먼저 생성후 사용자를 생성해서 연결을 해주는 작업을 합니다. 정책은 아래와 같이 put 과 get 만 주었습니다. 그외 다른권한은 호스팅을 할때 필요한지를 모르겠어서 최소한의 권한만 주었습니다...

S3 (Simple Storage Service) 이란

AWS 서비스를 이용하면서 가장 많이 접근해본 서비스가 무엇이냐고 물어보면 필자는 S3 라고 말을 했을것이다. 물론 회사에서 다양하게 사용을 해서 그럴수 있지만 가장 안전하고 많은 데이터를 저렴한 비용에 저장하고 관리를 할수있다는 장점에서 사용을 한다. 여기서 S3 에 대해서 설명하자면 S3 (Simple Storage Service) 이란 다양한 기능이 있지만 S3 서비스는 스토리지 서비스 이다. 여기서 중요한 점은 블록,파일 단위가 아닌 객체 스토리지 이다. 객체 스토리지를 사용한다는것은 데이터의 저장 및 액세스(접근)이 용이하다는 장점이 있다. 객체 스토리지가 이해하기 힘들어 각 블록,파일,객체 스토리지에 대한 특징을 살펴 보았다. 파일 스토리지란 파일 수준의 스토리지이다. 즉 파일단위로 데이터가 ..

S3 + CloudFront 를 이용한 웹 호스팅

AWS/S3 2021. 10. 18. 11:03
반응형

버킷을 생성할때 퍼블릭 액세스 차단 설정을 해제하여 누구든지 접속인 가능하게 합니다. 

 

 

그리고 해당 버킷의 정책을 아래와 같이 객체 읽기 권한만 줍니다.

 

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AddPerm",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::<bucketname>/*"
        }
    ]
}

 

그리고 해당 버킷만 접근이 가능하도록 IAM 사용자를 생성해야하는데 Role을 먼저 생성후 사용자를 생성해서 연결을 해주는 작업을 합니다.

 

정책은 아래와 같이 put 과 get 만 주었습니다. 그외 다른권한은 호스팅을 할때 필요한지를 모르겠어서 최소한의 권한만 주었습니다. 

 

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:GetObject"
            ],
            "Resource": "arn:aws:s3:::<bucketname>/*"
        }
    ]
}

 

이후 사용자를 생성한후 프로그래밍 방식으로 접근하기를 선택합니다. 그리고 사용자 생성후 credential 을 다운로드하면 됩니다. 

 

aws cli 를 설치한뒤 aws configure 라는 명렁어로 아까 다운로드 받은 credential 파일안에 있는 정보를 입력해 줍니다. 

 

그런 다음 aws s3 sync 로 S3 생성된 버킷에 빌드된 코드를 업로드하려고 했더니  아래와 같이 처움 보는 에러가 출력이 되었습니다. 

 

 

해당 에러가 출력이 되었다.. 이건 처음 보는 권한인데 어디에 있을까?.. 구글링을 열심히 해보았더니 아래와 같은 AWS 커뮤니티에대한 글을 찾을수 있었다 

 

https://aws.amazon.com/ko/premiumsupport/knowledge-center/s3-access-denied-listobjects-sync/

 

즉 aws s3 sync 는 ListObjectsV2, CopyObject, GetObject 및 PutObject API 호출을 하여 실행하는데 ListBucket 권한이 없어서 발생이 되는 문제였다 

 

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:GetObject",
                "s3:ListBucket"
            ],
            "Resource": "arn:aws:s3:::<bucketname>",
            "Resource": "arn:aws:s3:::<bucketname>/*"
        }
    ]
}

 

해당 정책을 변경후 테스트를 하였을때는 정상적으로 동작을 하였습니다. 

 

 

반응형

'AWS > S3' 카테고리의 다른 글

S3 (Simple Storage Service) 이란  (0) 2021.01.24
cafe-jun12

cafe-jun12

틀린 질문에는 옳은 답이 나올수 없듯 올바른 문제 인식부터 문제를 논리적으로 해결하는 사람이되는것 목표하는 개발자 입니다.

S3 (Simple Storage Service) 이란

AWS/S3 2021. 1. 24. 21:44
반응형

AWS 서비스를 이용하면서 가장 많이 접근해본 서비스가 무엇이냐고 물어보면 필자는 S3 라고 말을 했을것이다. 

물론 회사에서 다양하게 사용을 해서 그럴수 있지만 가장 안전하고 많은 데이터를 저렴한 비용에 저장하고 관리를 할수있다는 장점에서 사용을 한다.

 

여기서 S3 에 대해서 설명하자면 

 

S3 (Simple Storage Service) 이란


 

AWS S3 아이콘

다양한 기능이 있지만 S3 서비스는 스토리지 서비스 이다. 여기서 중요한 점은 블록,파일 단위가 아닌 객체 스토리지 이다. 

객체 스토리지를 사용한다는것은 데이터의 저장 및 액세스(접근)이 용이하다는 장점이 있다. 객체 스토리지가 이해하기 힘들어 

각 블록,파일,객체 스토리지에 대한 특징을 살펴 보았다. 

 

 

파일 스토리지란 

파일 수준의 스토리지이다. 즉 파일단위로 데이터가 저장이 되는 일반적인 스토리지 이다. 우리가 사용하는 윈도우 내폴더나 맥 파인더 화면에서 폴더안에 접근하여 파일을 저장해놓는것처럼 논리적 계층구조로 이루어져 있습니다. 그리고 해당 파일에 접근하려면 당연히 최상위폴더/폴더들/파일 로 접근을 해야합니다. 이때 데이터량이 많이 지고 폴더의 계층구조가 깊어질때마다 파일 인덱싱이 많이지고 찾기가 힘들어 집니다. 

 

블록스토리지 

데이터를 블록으로 쪼갠후 별도의 조각으로 분리해 저장하는 구조입니다. 이떼 생성된 블록은 고유 식별자를 부여받으며 혼선이 없도록 정리되어 보관이 된다. 주로 저장통신망(SAN: Storage area Network) 나 클라우드와 같은 원격 환경에서 데이터를 저장할때 사용되는 기술이다. 블록스토리지는 파일스토리지와 다르게 접근 방식이 단일 경로로 국한되지 않아 유연하고 신속하게 접근이 가능하다.그리고 IO 성능 또한 좋다. 하지만 가격이 비싸다는 단점을 가지고 있다. 

 

객체 스토리지 

객체 스토리지에 정의를 보면 데이터에 Unique ID 를 부여하여 컨테이너/버킷에 저장하고 필요한 데이터가 있을경우 ID를 통해 호출하여 사용하는 스토리지 입니다. 객체 스토리지를 이해하기위해 예를 많이 드는것은 발렛-파킹 구조입니다. 우리가 호텔에 들어갔을때 손님이 키를 주면 (PUT) 주차 요원이 알아서 주자를 해줍니다. 그리고 번호표를 받게 됩니다. 이때 우리는 손님의 차가 어디있는지는 전혀 모르게 됩니다.그리고 차를 찾을때 (데이터를 찾을때) 번호표를 반납하게(GET) 되면 차를 찾을수가 있습니다. (해당 설명은 링크를 찾아서 적어둔거지만 정말 쉽게 잘 설명을 해둔것 같아 가져왔습니다.)

 

그럼 객체 장점을 보면 여러가지가 있지만 사용하면서 가장 좋았던 것은 액세스가 용이하다는 점이다. 

 

그럼 객체 스토리지인 AWS S3는 어떻게 관리가 되고 있는지 알아보자 

 

버킷 (Bucket)


S3 는 Object(file)을 저장하기 위해 버킷 이라는 저장 공간을 생성해야한다. 

이때 버킷의 이름은 전세계 어디에서도 겹치지 않아야 하고 네이밍 규칙까지 지켜야 한다. (번수명도 짓기 힘든데 세계에서 유일한 네이밍을 하라는것은....) 그리고 버킷에는 리전 수준을 정의할수가 있어 버킷을 생성할때 서비스 하려는 리전을 설정하면 된다. 

 

객체 (Object)


S3 에서 객체란 버킷에 저장된 엔터티 또는 파일입니다. 객체는 모든 형식의 데이터를 저장을 할수가 있습니다. 객체의 크기는 0 바이트에서 5TB 까지 저장이 가능하며 단일 버킷에서는 무제한으로 객체를 저장할수 있습니다. 

각 객체는 데이터(파일 자체) 와 메타데이터 로 구성이 되는데 객체의 데이터는 단순희 바이너리 취급을 받습니다. 

 

 

 

그럼 S3에서 버킷을 생성해 보자 

 

AWS 콘솔 페이지에서 S3 서비스 페이지에 접근을 하면 버킷 리스트와 함께 표 오른쪽 상단에 버킷 만들기 라는 버튼을 클릭해보자 

 

버튼을 클릭하면 버킷을 생성할수 있는 페이지로 이동을 합니다. 버킷의 이름은 유니크 해야한다. 즉 모든 리전에 대해서 버킷의 이름은 중복이 없어야 하는것이다. 버킷의 이름을 설정하고 나면 리전에 대한 설정을 할수가 있는데 객체의 접근을 어느 리전에서 할건지 생각하여 설정을 하면 됩니다. 그리고 기존 버킷에서 설정된 내용을 복사할수도 있다.

 

그리고 S3에서 가장 중요한 객체에 대한 접근 허용 범위 설정입니다. ACL로 엑세스 제어 목록을 제한 할수도있고 퍼블릭으로 풀어 모든 사

용자가 접근이 가능하도록 설정을 할수도 있습니다. 

 

다른 설정은 기본으로 놓은뒤 버킷을 만들기 하면 버킷이 생성이 됩니다. 

 

참고 URL : http://www.ibm.com/blogs/cloud-computing/2017/02/01/object-storage-benefits-myths-and-options/

 

 

 

반응형

'AWS > S3' 카테고리의 다른 글

S3 + CloudFront 를 이용한 웹 호스팅  (0) 2021.10.18
cafe-jun12

cafe-jun12

틀린 질문에는 옳은 답이 나올수 없듯 올바른 문제 인식부터 문제를 논리적으로 해결하는 사람이되는것 목표하는 개발자 입니다.

방명록