AWS/S3

[AWS S3] AWS 버킷 생성과 권한

찰리-누나 2023. 1. 1.

13. 

 

React와 Node.js를 이용해 이미지를 AWS S3에 저장해본다. 그런데, S3란 무엇일까?

 

아마존 S3는 아마존 웹 서비스에서 제공하는 온라인 스토리지 웹 서비스이다. 아마존 S3는 웹 서비스 인터페이스를 통해 스토리지를 제공한다. 

 

S3의 풀네임은 Simple Storage Service이다. S가 세개 있다고 해서 3S로 축약되었다. 직역하자면 '간단한 스토리지 서비스' 인데, 어렵게 설명할 필요 없이 그냥 '파일 서버 역할을 해주는 서비스' 이다. S3에 이미지나 파일을 저장하면, '아무에게나 제공할 수 있는 URL' 형태로 돌려받을 수 있다. 

 

개인이 가지고 있는 S3 스토리지 하나를 '버킷'이라고 한다. 직역하면 바구니이다. 즉 S3 버킷은 나만의 파일 바구니를 만들어서 물건을 넣어두면, 아무나 꺼내갈 수 있게 할 수 있는 서비스이다. 이를 이용하려면 두 가지 단계가 필요하다.

 


1. S3 버킷 생성

2. 이용하기 위해 필요한 ID얻기


 

1단계는 말 그대로 파일 바구니를 생성하는 단계이고, 2단계는 바구니를 사용하기 위해 티켓을 얻는 단계이다. 이제 진짜 바구니를 만들고 티켓을 끊어와 보자.


 

 

 

 



AWS 가입 및 S3 버킷 생성
먼저 바구니를 만든다.

 

 

 

가입

 

아래 사진만 차근차근 따라하면 된다. 아마존 가입은 이곳에서 한다. : https://aws.amazon.com/ko/what-is-aws/

 

AWS란

 

aws.amazon.com

 

여기서 AWS계정 생성을 눌러, 계정을 만들어준다. 

 

기본 지원 - 무료를 클릭해, 무료 계정으로 가입한다.(부자라면 비즈니스를 선택한다.)

기본 지원 - 무료 로 계정 생성
루트 계정으로 로그인 시 진입되는 화면. 여기서 다양한 서비스를 살펴볼 수 있다.

 

 

 

 

 

 

S3 버킷 생성 및 버킷 설정

 

1. 이제 본격적으로 S3 버킷을 생성한다. 나만의 파일 바구니를 만들거란 뜻이다. 검색창에서 S3를 검색하고, 버킷을 클릭해 접속한다.

 

 

 

 

2. [버킷] 창에서, [버킷 만들기] 를 클릭한다.

 

아직 아무 버킷도 없는 상태.

 

 

 

 

3. [버킷 만들기] 창이다. 버킷 이름은 "세계에서 유일" 하게 작명해야 한다. 재주껏 작명하고 빨간색 네모로 체크된 것들을 클릭해 설정한다.

 

 

 

 

 

4. 버킷의 퍼블릭 액세스를 차단한다는 것은, 외부에서 파일을 '읽기' 조차도 하지 못하게 한다는 뜻이다. 그러나 우리는 백엔드에서 버킷에 저장된 이미지 주소를 읽어와 프론트엔드로 보내줄 것이기 때문에 차단을 해서는 안된다. 액세스 차단을 풀어주고, 경고창이 뜨면 체크해준다.

 

 

 

 

나머지 설정에 대해 궁금하다면 이곳을 참고한다.

버킷 버전에 대한 관리 : https://docs.aws.amazon.com/ko_kr/AmazonS3/latest/userguide/Versioning.html

기본 암호화 : https://docs.aws.amazon.com/ko_kr/AmazonS3/latest/userguide/default-bucket-encryption.html

 

 

5. 둘 다 비활성화를 선택하고 버킷 만들기를 클릭한다.

 

버킷을 만든다.

 

 

 

 

6. 버킷이 생성된 것을 확인할 수 있다. 내가 생성한 버킷 이름을 클릭하면 버킷 상세창으로 이동할 수 있다. 이동해준다.

 

 

7. 버킷 이름을 눌러 상세창으로 들어왔다면, [권한] 에 들어간다.

 

 

 

 

8. 스크롤을 내려 [버킷 정책] 의 [편집] 버튼을 누른다. 

 

 

 

 

9. 편집을 누르면 아래의 창이 떴을 것이다. 버킷 ARN을 복사하고, [정책 생성기] 를 클릭한다.

 

 

 

10. AWS 정책 생성기 페이지로 자동 이동된다. 아래 과정을 모두 따라한다.

 

● Step.1의 Select Type of Policy 는 S3 Bucket Policy를 선택한다.

● Add Statement(s) 에서는, Effect에서 Allow를 체크한다.

● Principal에 * 을 입력한다.

● Amazon Resource Name 에 아까 복사한 버킷 ARN을 붙여넣고, 뒤에 /* 를 붙인다. arn:aws:s3:::버킷명/* 을 입력하면 된다.

● Add Statement 버튼을 클릭한다.

 

 

 

 

11. Step3 밑에 Generate Policy 버튼이 나타난다. 클릭하면 모달창이 뜰 것이다.

 

 

 

 

12. 모달창이 뜨면, 아래 내용을 중괄호까지 포함해 모두 복사해준다. 복사했으면 Close를 누르고, 창을 끄고 버킷 설정창으로 돌아간다.

 

 

 

 

13. 버킷 정책 페이지로 돌아와, 복사한 내용을 [정책]란에 붙여넣기한다.

(만일 오류가 발생하면, 아래 코드를 복사해 붙여넣기 한다. sid:AddPerm은, 모든 객체에 대한 퍼블릭 읽기 엑세스 권한을 부여한다. 관련 문서 : https://repost.aws/ko/knowledge-center/read-access-objects-s3-bucket)

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AddPerm",
      "Effect": "Allow",
      "Principal": "*",
      "Action": "s3:*",
      "Resource": "arn:aws:s3:::버킷 이름/*"
    }
  ]
}

 

 

14. 버킷의 권한 설정이 완료되었다. 마지막으로 CORS 설정만 해주면 된다.

 

 

 

15. 

aws cors : https://docs.aws.amazon.com/ko_kr/sdk-for-javascript/v3/developer-guide/cors.html

CORS 설정을 위해 아래 내용을 복사해서, 붙여넣기 해 이미지처럼 만든다. (스크롤 내리면 있음)

 

아래 내용은 모든 출처에 대해서 (*) 리소스 공유를 허용한다는 내용의 설정이다.

[
    {
        "AllowedHeaders": [
            "*"
        ],
        "AllowedMethods": [
            "GET",
            "PUT",
            "POST",
            "HEAD"
        ],
        "AllowedOrigins": [
            "*"
        ],
        "ExposeHeaders": [
            "x-amz-server-side-encryption",
            "x-amz-request-id",
            "x-amz-id-2"
        ],
        "MaxAgeSeconds": 3000
    }
]

 

 

16. 

 

버킷 설정이 완전히 끝났다. 이제 파일이나 이미지를 업로드하면, 외부에서 접근할 수 있는 url로 돌려받을 수 있게 되었다. 테스트용으로 이미지를 하나 업로드한다. 우리집 고양이 사진을 업로드 해 주었다. [업로드] 버튼을 누르면 직접 파일을 올릴 수 있다.

 

 

17. [파일 추가] 를 누르고 파일을 업로드하면, 업로드된 파일의 이름과 크기가 표시된다. 

 

 

 

18. 파일명을 클릭해 페이지를 이동해보자.

 

 

19. 내가 업로드한 파일의 속성을 보여주는 페이지로 이동된다. [객체 URL] 부분에 표시되어 있는 URL을 클릭하였을 때, 내가 업로드한 이미지가 제대로 보이면 버킷 설정이 완벽하게 된 것이다.

 

 

20. 아무나 접근할 수 있는 이미지 URL이 생성되었다. 성공!

 

 


 

 

 

 

 


권한 설정 및 자격 증명 얻기


 

AWS의 IAM에서는, AWS 서비스에 접근할 수 있는 권한을 설정할 수 있다. 아무나 우리 바구니에 있는 파일을 수정하고 삭제하게 하면 안되지 않겠는가? 우리의 소중한 파일 바구니를 지키기 위해, 역할을 설정한다. 

 

 

1. 검색창에 IAM을 검색하고 클릭하여, IAM 페이지로 이동한다.

 

 

 

2. [역할] 탭을 클릭하여 [역할 만들기] 에 들어간다.

2

 

 

3. 우리는 AWS 서비스 내에서 파일바구니 S3를 사용하고 있다. 따라서 [AWS 서비스], [다른 AWS서비스의 사용 사례-S3] 를 선택하고 [다음] 을 클릭한다.

 

 

 

4. 권한을 추가할 수 있는 창이 뜬다. 이곳의 검색창에 S3를 검색한 다음, S3를 총 관리할 수 있는 권한인 [AmazonS3FullAccess] 를 체크하고 [다음] 을 누른다. 

 

 

 

5. 해당 권한을 가질 이름을 설정한 뒤, 스크롤을 내려 [역할 생성]을 클릭한다.

 

 

 

 

6. 설정한 이름으로 역할이 생성되었음을 알 수 있다. 이제 진짜 ID를 얻는 일만이 남았다.

 

 

 

 

7. 상단의 검색창에 congnito를 검색하고, 이동한다. 자격 증명을 설정하여 내 바구니를 다룰 수 있는 티켓, 즉 id를 얻어 올 것이다

 

 

 

8. [자격 증명 풀 관리] 를 클릭한다.

 

 

 

9. [자격 증명 풀 이름] 에 원하는 이름을 설정하고, [인증되지 않은 자격 증명에 대한 액세스 활성화] 를 체크한 뒤 [풀 생성] 을 누른다.

 

 

 

10. [세부 정보 보기] 를 클릭하면, 역할 이름과 [정책 문서 보기] 가 뜬다. [정책 문서 보기] 를 눌러 펼쳐준 다음, [편집] 을 누르고 아래 내용을 복사하여 붙여넣기 한다. 완료하면 [허용] 을 클릭한다.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": ["cognito-sync:*", "cognito-identity:*", "s3:*"],
      "Resource": ["*"]
    }
  ]
}

 

 

 

11. 내 바구니를 사용하기 위한 티켓, IdentityPoolId 를 받아올 수 있다. 초기에는 Android용으로 셋팅되어 있을 것이다. 자신이 사용할 플랫폼 언어를 선택해 자격 증명 내용을 복사한다. 나는 JavaScript를 선택하였다.

자격 증명 얻기

 

 

 

 

S3 버킷 설정은 AWS 서비스에서 몹시 간단한 편에 속한다(놀랍게도....). 다음 글에서는 React로 프론트를 완성하고, 백엔드에서는 Node.js의 Express를 사용해 S3에 이미지를 업로드 해 보자.

댓글