Я хочу использовать S3 для размещения файлов, которые я загружаю через приложение Kotlin Spring-Boot. Я следовал инструкциям и использовал различные другие документы, а также попробовал несколько решений для подобных проблем, обнаруженных в stackoverflow. Я всегда получаю ошибку 403. Как настроить S3 и IAM, чтобы я мог загрузить файл? И как мне узнать что не так? Любая помощь будет оценена.
Я активировал ведение журнала доступа, который занимает много лет и пока мне мало чем помогает, особенно потому, что создание журнала занимает около 45 минут. Игнорируя ответы со статусом 200, в журналах появляются следующие сообщения (сегмент представляет имя моего сегмента):
- GET / bucket? Encryption = HTTP / 1.1 "404 ServerSideEncryptionConfigurationNotFoundError
- GET / bucket? Cors = HTTP / 1.1 "404 NoSuchCORSConfiguration
- GET / bucket? Policy = HTTP / 1.1 "404 NoSuchBucketPolicy
- PUT / bucket? Policy = HTTP / 1.1 "400 MalformedPolicy
- GET / bucket /? PolicyStatus HTTP / 1.1 "404 NoSuchBucketPolicy
- PUT / bucket? Policy = HTTP / 1.1 "403 AccessDenied
Я создаю AmazonS3
экземпляр по
AmazonS3ClientBuilder.defaultClient()
Я проверил реализацию, и она получает учетные данные из переменных окружения, которые я установил.
Чтобы отправить файл, я использую следующий метод в моей реализации S3Service:
private fun uploadFileToBucket(fileName: String, file: File) {
s3client.putObject(
PutObjectRequest(bucketName, fileName, file)
.withCannedAcl(CannedAccessControlList.PublicRead)
)
}
Это моя политика для пользователя IAM (пользователь наследует политику от группы):
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"s3:PutAccountPublicAccessBlock",
"s3:GetAccountPublicAccessBlock",
"s3:ListAllMyBuckets",
"s3:HeadBucket"
],
"Resource": "*"
},
{
"Sid": "VisualEditor1",
"Effect": "Allow",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::bucket",
"arn:aws:s3:::bucket/*"
]
}
]
}
И это политика ведра:
{
"Version": "2012-10-17",
"Id": "PolicyId",
"Statement": [
{
"Sid": "StmtId",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::account:user/username"
},
"Action": "s3:*",
"Resource": "arn:aws:s3:::bucket"
}
]
}
В конце я хочу иметь возможность помещать файлы в корзину и предоставлять общий доступ к ним. Например, я хочу загрузить изображения из приложения Angular, загрузить их через приложение Spring Boot и отобразить их в приложении Angular. Сейчас я даже не могу загрузить их через Почтальон без ошибки 403.