[리액트] AWS S3 연동을 위한 액세스 키 발급받기

Jinny·2024년 8월 18일
0

React

목록 보기
23/23

IAM 계정 Access Key, Secret Key 발급받기

S3에 접근하기 위해서는 IAM 사용자에게 S3 접근 권한을 줘야 한다.
IAM 사용자인 경우에만 따로 발급받아야 한다.

1)IAM 사용자 추가하기

검색 창에 IAM을 검색한다.

IAM 서비스> 액세스 관리 > 사용자 > 사용자 생성을 통해 사용자 이름을 입력하고 액세스 유형을 선택한다.

2) 사용자 세부 정보 지정

  • 사용자 이름은 IAM 계정을 뜻한다.
  • AWS Management Console에 대한 사용자 액세스 권한 제공을 선택할 수 있는데 Identity Center를 이용하면 사용자가 콘솔을 액세스할 수 있는 권한을 받는다.
  • IAM 사용자를 생성하는 경우, 액세스 키나 암호 등 서비스별 보안 인증 정보를 통해 액세스를 활동화해야 하는 경우에만 권장된다.
    => 내 경우는 IAM 사용자 생성으로 선택했다.

사용자 그룹을 생성해 이전에 만든 정책을 선택한다.

3) 권한 설정

  • 권한 설정은 사용자 그룹을 새로 생성하거나 기존의 사용자 그룹에 추가할 수 있다.

  • 목적에 따라 다양한 정책이나 역할을 부여할 수 있다. 즉, 한 명의 사용자가 여러 개의 사용자 그룹에 포함될 수 있다.

  • 또한 사용자 단독으로 생성하는 경우, 직접 정책 연결을 통해 단독으로 정책을 부여할 수 있다.

4) 검토 및 생성

  • 마지막 단계로 설정한 사용자의 세부 정보와 권한을 확인할 수 있다.
  • uploadImage라는 사용자 그룹을 생성해 S3와 관련된 정책을 포함시켰다.
    ➡️ 검토가 끝났다면 사용자 생성을 누른다.

5) 생성된 암호 및 다운로드

  • IAM 계정을 생성하면 해당 콘솔에 로그인할 수 있는 주소가 나온다.
  • .csv 파일은 꼭 다운받아 저장하는 것이 좋다. 해당 파일에는 콘솔 로그인 URL과 사용자 이름, 콘솔 암호가 있다.

6) 생성된 IAM 사용자로 로그인하기

로그인한 다음, 비밀번호를 변경하면 된다.

IAM 사용자 액세스 키 발급받기

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 사용자로부터 발급받은 시크릿 액세스 키

AWS S3 버킷 만들기

버킷 만들기를 클릭 후, 버킷 이름과 지역 설정을 한다.

  • 한 계정으로 관리할 예정이므로 ACL 비활성화를 선택한다.
    퍼블릭 액세스 권한은 모두에게 오픈할 것인지 접근 권한을 제한하는 것이다.
  • 모든 퍼블릭 액세스 차단은 모든 접근을 차단하기 때문에 필요에 따라 차단을 해제해 제한 설정을 하는 것이 좋다. 우선 퍼블릭 상태로 생성하였다.

  • 버킷 버전 관리는 파일을 버전별로 관리하기 때문에 비용이 더 많이 들어 비활성화를 선택한다.

기본 암호화를 설정하면 버킷에 저장되는 모든 새 객체를 암호화해 저장한다. 객체를 다운로드하면 복호화해서 제공한다.

버킷 정책 설정하기

  • 정책 타입 : 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/*"
        }
    ]
}

CORS 설정하기

로컬에서 사용하는 주소도 추가한다.

[
    {
        "AllowedHeaders": [
            "*"
        ],
        "AllowedMethods": [
            "PUT",
            "POST",
            "DELETE",
            "GET"
        ],
        "AllowedOrigins": [
            "http://localhost:5173"
        ],
        "ExposeHeaders": []
    }
]

AWS S3 버킷 생성 참고
S3에 대한 개념
버킷 생성 및 액세스 키 발급 참고
IAM 사용자 액세스 키 발급받기
aws-sdk 깃허브

0개의 댓글