AWS

[ AWS ] - s3 버킷 생성하기

algml0703 2022. 6. 3. 02:04
반응형

버킷 만들기 클릭

버킷 이름과 aws 리전을 설정해준다. (bucket이름은 기존의 것과 중복될 수 없다.)

객체소유권 - ACL 비활성화됨

퍼블릭 엑세스 차단 설정 - 모든 퍼블릭 엑세스 차단을 비활성화하는 것 선택 

// 테스트 용으로 생성하는 것이므로 s3 url에 쉽게 접근 가능하도록 모든 퍼블릭 엑세스 차단을 비활성화 하였다.

나머지 사항들은 기본 선택된 것대로 두고 버킷 만들기 클릭 

생성된 버킷을 클릭한 후 권한 클릭

버킷 정책의 편집 클릭 후 버킷 정책 편집에 들어와서 정책 생성기 클릭

아래의 설정 후 Add Statement를 클릭하고 , 이후에 밑에 생긴 Generate Policy를 클릭한다.

// 설정에 관한 부분은 본인의 필요에 맞게 변경 가능하다.

- Select Type of Policy : S3 Bucket Policy
- Effect :  Allow
- Principal : *
- Acctions: getObject, getObjectAcl, putObject
~ getObject : 버킷에 파일을 다운로드하는 것을 허용
~ getObjectAcl : 파일에 대한 ACL 권한을 허용
- Amazon Resource Name (ARN) :      arn:aws:s3:::my-s3-bucket--test/*
~ arn 의 기본 형식 : arn:aws:s3:::[bucketName]/[keyName]
~ 끝에 /*는 정책이 해당 버킷 내의 모든 파일에 적용됨을 의미한다.

클릭 후 나온 창의 객체를 복사한 후 다시 버킷창으로 돌아와서 버킷 정책 부분에 복사 붙여넣기 한다.

복사 붙여넣기 한 후 변경 사항 저장을 클릭한다.

권한 탭 아래의 cors 설정에서 편집을 클릭한 후 아래의 내용을 입력 후 변경사항저장을 클릭한다. 이 역시 각자 개발 환경에 따라 변경 가능하다.

[
  {
    "AllowedHeaders":[
      "*"
    ],
    "AllowedMethods":[
      "PUT",
      "HEAD",
      "GET"
    ],
    "AllowedOrigins":[
      "*"  
    ],
    "ExposeHeaders":[]
    
  }
]

이후 s3 사용을 위한 권한을 보여하기 위해 본인의 계정 부분을 클릭후 나오는 대시보드에서 보안자격증명을 선택한다.

순서는 우선 1) 어떠한 권한을 줄 것인지 설정하기 위한 권한 정책 생성 후 , 2)생성한 권한 정책을 사용자에게 부여하는 순서로 진행될 것이다.

왼쪽의 대시보드에서 정책을 선택한 후 나온 화면에서 정책 생성을 클릭한다. // 기존에 aws 자체적으로 생성된 정책을 이용할 수도 있다.

  • 서비스 : S3
  • 작업 - 엑세스 레벨 : 읽기, 쓰기

리소스 부분의 object ARN 추가 클릭

  • Bucket name : 내가 생성한 버킷명
  • Object name : 해당 버킷내의 객체   ~ *는 모든 객체를 의미한다.

추가 클릭 후 다음 : 태그, 다음 : 검토 클릭 후 정보 입력 후 정책 생성 클릭

성공적으로 정책 생성이 이루어졌다면 다음으로는 생성된 정책을 사용자에게 부여한다. 왼쪽의 대시보드에서 사용자 선택 후 사용자 추가를 클릭한다.

생성할 사용자의 이름과 AWS 엑세스 유형을 선택한다. 나는 node.js 에서 s3 작업을 하기 위해 엑세스 키 - 프로그래밍 방식 엑세스를 선택했다.

기존 정책 직접 연결 클릭 후 아까 생성한 정책의 이름을 정책 필터에 입력하여 찾은 후 선택한 후 다음 : 태그, 다음 : 검토, 사용자 만들기를 클릭한다.

위와 같이 작업하면 아래와 같은 화면이 나오는데 여기서 엑세스 키 ID와 비밀 엑세스 키를 잘 보관하여 둔다. 해당 키들을 이용하여 node.js 환경에서 aws-sdk 모듈을 이용하여 s3이미지를 업로드할 것이다.

node.js 환경에서 s3 사용을 위한 코드는 다음과 같다.

~ region, bucketName, accessKeyId, secretAccessKey의 변수명은 다른게 설정해서는 안 된다.

서버를 실행하는 파일은 다음과 같은 구현하였다.(참고로 타입스크립트를 이용하였다. 큰 차이는 없다.)

이미지를 업로드할 브라우저는 다음과 같이 구현하였다.

 

출처

https://lhoiktiv.tistory.com/327

반응형