RustFS 실습 - 4 : RustFS -> S3으로 환경 전환하기

TopOfTheHead·2026년 7월 27일

AWS S3 관련 설정

  • AWS IAM에서 IAM Group 생성 및 AmazonS3FullAccess 권한 부여


  • 해당 IAM Group에 속하는 IAM USER 생성


  • 생성된 IAM USER를 클릭 후 Access Key를 생성


    。 Spring App 내에서 저장되어 관리되므로 AWS Access Key 발급 시 로컬 코드로 지정

    。 발급된 Access Key를 저장
    ▶ 이후 application.yml 내 등록되어 활용

  • AWS 콘솔 -> S3에서 버킷 생성 버킷


  • 생성된 Bucket에서 권한 -> CORS로 진입하여 CORS 지정
  [
    {
      "AllowedOrigins": ["http://localhost:8080"],
      "AllowedMethods": ["GET", "PUT", "POST"],
      "AllowedHeaders": ["*"],
      "ExposeHeaders": ["ETag"],
      "MaxAgeSeconds": 3000
    }
  ]

▶ 브라우저에서 S3 버킷으로 PUT 요청을 전달하여 직접 업로드하고자, S3 버킷의 CORS를 설정하여 PUT을 허용

application.yml

s3:
  access-key: ${AWS_ACCESS_KEY}
  secret-key: ${AWS_SECRET_KEY}
  bucket: ${AWS_S3_BUCKET_NAME}
  region: ${AWS_REGION}
  presigned-url-expiration-seconds: ${PRESIGNEDURL_EXPIRATION_TIME_SEC}

.env
。발급한 S3 Bucket과 IAM User의 액세스키를 입력

# AWS S3
AWS_S3_ACCESS_KEY=액세스키명
AWS_S3_SECRET_KEY=시크릿키명
AWS_S3_BUCKET_NAME=s3demo-604415812331
AWS_REGION=ap-northeast-2
PRESIGNEDURL_EXPIRATION_TIME_SEC=3600

Properties 클래스

@ConfigurationProperties(prefix = "s3")
public record S3Proeprties(
        String accessKey,
        String secretKey,
        String bucket,
        String region,
        Long presignedUrlExpirationSeconds
) {
}

▶ 이후 기존 RustFsProperties를 사용하는 클래스( S3Config, MediaService, MultipartService )를 S3Properties로 전환

  • S3Config 수정
@Configuration
@RequiredArgsConstructor
public class S3Config {
    private final S3Proeprties s3Proeprties;
    @Bean
    public S3Client s3Client() {
        return S3Client.builder()
                .region(Region.of(s3Proeprties.region()))
                .credentialsProvider(StaticCredentialsProvider.create(
                        AwsBasicCredentials.create(
                                s3Proeprties.accessKey(),
                                s3Proeprties.secretKey()
                        )
                ))
                .build();
    }
    @Bean
    public S3Presigner s3Presigner() {
        return S3Presigner.builder()
                .region(Region.of(s3Proeprties.region()))
                .credentialsProvider(StaticCredentialsProvider.create(
                        AwsBasicCredentials.create(
                                s3Proeprties.accessKey(),
                                s3Proeprties.secretKey()
                        )
                ))
                .build();
    }
}

이후 AWS S3으로 파입 업로드 / 파일 다운로드를 완료할 수 있음


profile
공부기록 블로그

1개의 댓글

comment-user-thumbnail
2026년 7월 29일

도움이 많이 됐어요! 감사합니다

답글 달기