프로젝트/Recipository

[Dev] 23.03.31. AWS S3 Bucket 생성

규글 2023. 3. 31. 22:04

 이제까지 AWS 관련해서 EC2 인스턴스를 생성하고 build한 jar file을 복사해주었다. 그리고 RDS 인스턴스도 생성하여 EC2 인스턴스 및 프로젝트와 연결해주었다. 이번에는 게시글의 이미지를 저장할 수 있도록 하기 위해서 'S3 버킷'이라는 것을 생성해보려고 한다. 생성 후에는 프로젝트에서 이미지를 업로드하고, 그 저장 경로를 저장하는 logic에 대한 수정 작업을 이어서 할 것이다.

 

 참고한 블로그입니다.[각주:1]

 

 

S3 버킷 생성하기

 서비스에서 S3를 검색하여 들어오면 확인할 수 있는 화면이다. 처음 들어왔으니 버킷이 존재하지 않으므로, 새롭게 버킷을 만들어보겠다.

 

 가장 먼저 버킷의 이름을 설정하고, AWS 리전을 서울로 설정했다.

 

 객체 소유권 항목은 권장하는대로 우선 두었다.

 

 이 버킷의 퍼블릭 액세스 차단 설정 항목이다. 후에 액세스를 허용해야만 파일을 업로드할 수 있을 것 같은데, 일단 생성시에는 모든 액세스를 차단하는 옵션으로 두고 진행하겠다.

 

 버킷 버전 관리 항목은 비활성화하였으며, 태그는 선택 사항이라고 하여 아무 내용도 작성하지 않았다.

 

 기본 암호화 항목은 키를 비활성화 한 것으로 두고 넘어갔다.

 

 고급 설정에서 객체 잠금 항목은 기본으로 비활성화 되어 있는데, 그대로 두고 버킷을 생성해주었다.

 

 

IAM 사용자 생성

 IAM이라는 것은 AWS 페이지에 로그인할 때에도 볼 수 있는 것으로, Identity and Access Management의 줄임말이다.

 

 관련 항목을 찾아보면 AWS 리소스에 대한 액세스를 안전하게 제어할 수 있는 웹 서비스라고 언급하고 있다. 특히 처음 AWS 계정을 생성하는 것은 root 사용자이고, 이 root 사용자를 일상적인 task에 사용하지 않을 것을 강력하게 권장한다고 한다.

 

 AWS 에 IAM을 검색하여 사용자 탭을 눌렀을 때 볼 수 있는 화면이다. 아무런 사용자가 존재하지 않으므로 사용자를 추가해주겠다.

 

 가장 먼저 사용자의 이름을 설정해주었다. AWS Management Console에 대한 액세스 권한을 제공하도록 선택했을 때 등장하는 IAM 사용자를 생성하는 것으로 선택해주었고, 암호는 자동으로 생성되도록 했다.

 

 다음으로는 권한 옵션에 대한 내용인데, 필자는 설정된 그룹도 없고, 복사할 권한도 없으므로 직접 정책 연결을 선택했다. 그리고 S3를 검색하여 AmazonS3FullAccess를 선택했다.

 

 마지막으로 작성했던 내용들을 검토하여 생성하면 사용자 추가가 완료된다.

 

버킷 정책 편집

 버킷을 생성하면 더 이상 비어있는 상태가 아닌 것을 볼 수 있다. 생성된 버킷을 클릭한다.

 

 버킷을 클릭하면 버킷에 대한 여러 항목들을 볼 수 있는데, 그 중에 권한 탭을 들어간다.

 

 조금 내리면 버킷 정책 항목이 있는데, 이곳의 편집 버튼을 눌러준다. 그리고 정책 생성기 버튼을 눌러주면 다음과 같은 화면을 보게 된다.

 

 우선 표기된 곳들을 건드려줄 것이다. 다음과 같이 정리할 수 있다. 입력하고 활성화된 Add Statement를 누르면 하단에 다음과 같이 정보를 확인할 수 있다.

  • Select Type of Policy : S3 Bucket Policy로 선택.
  • Principal : 생성한 IAM의 ARN 정보를 입력.
  • Actions : Delete Object, Get Object, Put Object
  • Amazon Resourece Name (ARN) : 생성한 Bucket의 ARN 정보 입력.

 

 입력한 정보를 확인하고서 Generate Policy를 눌러 정책을 완성하면 다음과 같이 JSON document를 얻을 수 있다.

 

 이를 복사하여 정책 편집기에 붙여넣고, 변경 사항을 저장한다.

 

Action does not apply to any resource(s) in statement

 필자는 위와 같은 에러 메시지를 보게 되었는데, 이는 Resource 정보를 잘못 적어주었기 때문이다.[각주:2] S3 bucket에는 folder가 있을 수 있는데, 만약 bucket 내의 모든 항목에 접근할 수 있도록 허용하려고 한다면 'ARN/*', 특정 폴더에만 접근을 허용하려고 한다면 'ARN/xxx' 와 같이 작성해주면 변경 사항을 저장할 수 있게 된다.

 

 

퍼블릭 접근 허용

 이미지를 하나 업로드하고, 해당 업로드 객체의 URL을 눌러 이미지를 확인하려고 했더니 다음과 같은 메시지의 페이지를 만나게 되었다.

 

 이는 접근이 거부되었다는 메시지로, S3 버킷을 생성할 때 퍼블릭 접근을 허용해주지 않았기 때문이다.

 

 S3 버킷의 권한 탭의 퍼블릭 액세스 차단(버킷 설정) 항목의 편집 버튼을 누르면, 버킷을 생성할 때 봤던 항목들을 다시 한 번 볼 수 있다.

 

 다음의 네 항목을 볼 수 있게 된다.

  • 새 ACL(액세스 제어 목록)을 통해 부여된 버킷 및 객체에 대한 퍼블릭 액세스 차단
    : S3은 새로 추가된 버킷 또는 객체에 적용되는 퍼블릭 액세스 권한을 차단하며, 기존 버킷 및 객체에 대한 새 퍼블릭 액세스 ACL 생성을 금지합니다. 이 설정은 ACL을 사용하여 S3 리소스에 대한 퍼블릭 액세스를 허용하는 기존 권한을 변경하지 않습니다.

 위 네 항목을 모두 체크 해제하면 정상적으로 이미지를 확인할 수 있으나, 일단은 모든 액세스를 차단한 상태로 두었다. 각 항목에 대해 알고 싶다면 다음의 글을 참조하면 좋을 것 같다. 번역이 되면서 이해하기 어려운 말이 된 것 같다.[각주:3]

 

 

 우선 S3 버킷을 생성하고 관련된 IAM을 만들어보았다. 다음 게시글에서는 프로젝트에서 업로드하는 부분을 작성해보도록 하겠다.

 

Reference