{
"Version": "2012-10-17",
"Id": "ExamplePolicy01",
"Statement": [
{
...
"Action": [
"s3:PutObject",
],
...
}
]
}
build.gradle
implementation group: 'io.awspring.cloud', name: 'spring-cloud-starter-aws', version: '2.4.2'
AmazonS3 bean 생성 및 주입
@PostConstruct
public void setS3Client() {
AWSCredentials credentials = new BasicAWSCredentials(this.accessKey, this.secretKey);
final AWSStaticCredentialsProvider credentialsProvider = new AWSStaticCredentialsProvider(credentials);
s3Client = AmazonS3ClientBuilder.standard()
.withRegion(this.region)
.disableChunkedEncoding()
.withCredentials(credentialsProvider)
.build();
}
파일 업로드 메소드
public void upload(MultipartFile file) {
ObjectMetadata objectMetadata = new ObjectMetadata();
objectMetadata.setContentType(file.getContentType());
objectMetadata.setContentLength(file.getSize());
String key = "item/" + file.getOriginalFilename();
try (InputStream inputStream = file.getInputStream()) {
final PutObjectRequest putObjectRequest = new PutObjectRequest(
bucket,
key,
inputStream,
objectMetadata);
putObjectRequest.withCannedAcl(CannedAccessControlList.PublicRead);
s3Client.putObject(putObjectRequest);
} catch (IOException e) {
e.printStackTrace();
}
}
CannedAccessControlList.PublicRead
: 외부에 공개할 이미지로 public read 권한 추가이대로 실행 시켰는데 403???
그대로 따라했는데 403 에러를 계속 보게 되었다.
S3 퍼블릭 액세스 차단도 모두 비활성하고 본인 IAM Access Key와 Secret Key도 전부 맞는데...?
여기서 Access Key와 Secret Key는 root 계정이 아니라 S3와 연결된 IAM의 것이라고 한다.
액세스 키-프로그래밍 방식 액세스
로 선택참고
https://programming-workspace.tistory.com/61
https://artiiicy.tistory.com/16