S3에 접근하기 위해서는 IAM 사용자에게 S3 접근 권한을 줘야 한다.
IAM 사용자인 경우에만 따로 발급받아야 한다.
검색 창에 IAM을 검색한다.
IAM 서비스> 액세스 관리 > 사용자 > 사용자 생성을 통해 사용자 이름을 입력하고 액세스 유형을 선택한다.
AWS Management Console
에 대한 사용자 액세스 권한 제공을 선택할 수 있는데 Identity Center
를 이용하면 사용자가 콘솔을 액세스할 수 있는 권한을 받는다. 사용자 그룹을 생성해 이전에 만든 정책을 선택한다.
권한 설정은 사용자 그룹을 새로 생성하거나 기존의 사용자 그룹에 추가할 수 있다.
목적에 따라 다양한 정책이나 역할을 부여할 수 있다. 즉, 한 명의 사용자가 여러 개의 사용자 그룹에 포함될 수 있다.
또한 사용자 단독으로 생성하는 경우, 직접 정책 연결
을 통해 단독으로 정책을 부여할 수 있다.
uploadImage
라는 사용자 그룹을 생성해 S3와 관련된 정책
을 포함시켰다..csv
파일은 꼭 다운받아 저장하는 것이 좋다. 해당 파일에는 콘솔 로그인 URL과 사용자 이름, 콘솔 암호가 있다. 로그인한 다음, 비밀번호를 변경하면 된다.
IAM 계정으로 로그인한 다음, IAM > 사용자
에서 해당 사용자 이름을 클릭한다. 그 다음, 보안 자격 증명
탭을 클릭해 액세스 키 만들기를
클릭한다.
제대로 권한을 설정했음에도 불구하고, 아래와 같이 권한 추가를 요청하라는 안내 문구가 있었다. IAM Policy Simulator
로 돌려봤을 때는 제대로 작동되고 있었다.
관리자에게 권한 추가를 요청하십시오.
권한 추가 요청을 하기 위해서
❗문제원인
IAM 사용자가 액세스 키를 생성할 권한이 없어서 발생한 문제였다.
💡해결방안
루트 사용자로 로그인해서 새로운 정책을 생성하고 IAM 사용자 그룹에게 해당 정책을 부여했더니 액세스 키를 발급받을 수 있었다!
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"iam:CreateAccessKey",
"iam:ListAccessKeys",
"iam:DeleteAccessKey"
],
"Resource": "*"
}
]
}
발급받은 액세스 키랑 비밀 액세스 키는 .env 파일에 저장한다.
VITE_S3_ACCESS_KEY_ID=IAM 사용자로부터 발급받은 액세스 키 ID
VITE_S3_SECRET_ACCESS_KEY=IAM 사용자로부터 발급받은 시크릿 액세스 키
버킷 만들기를 클릭 후, 버킷 이름과 지역 설정을 한다.
기본 암호화를 설정하면 버킷에 저장되는 모든 새 객체를 암호화해 저장한다. 객체를 다운로드하면 복호화해서 제공한다.
- 정책 타입 : S3 bucket 정책 선택
- 정책 허용(Effect) : Allow (허용)
- 버킷 정책이 적용될 대상(Principal) : *(전체)
- 버킷에 수행할 액션(Action) : Get Object,Put Object 택
- 버킷에 어떤 리소스에 적용할지(ARN) :
arn:aws:s3:::버킷이름/*
Add Stament 클릭 후 Generate Policy 버튼을 클릭하면 아래와 같은 json 형식으로 나온다.
{
"Version": "2012-10-17" // 정책ID,
"Id": "Policy1723272675989",
"Statement": [
{
"Sid": "Stmt1723272671189",
"Effect": "Allow", // 정책 적용
"Principal": "*", // 정책 적용 대상 모두
"Action": [ // 버킷에 수행할 액션
"s3:GetObject" // 객체 가져오기
"s3:PutObject" // 객체 업로드하기
],
// 어떤 버킷에 어떤 리소스에 적용할건지
"Resource": "arn:aws:s3:::shopshop-image/*"
}
]
}
로컬에서 사용하는 주소도 추가한다.
[
{
"AllowedHeaders": [
"*"
],
"AllowedMethods": [
"PUT",
"POST",
"DELETE",
"GET"
],
"AllowedOrigins": [
"http://localhost:5173"
],
"ExposeHeaders": []
}
]
AWS S3 버킷 생성 참고
S3에 대한 개념
버킷 생성 및 액세스 키 발급 참고
IAM 사용자 액세스 키 발급받기
aws-sdk 깃허브