Доступ запрещен при помещении файла из HDFS в корзину S3
Я написал программу на Java, которая включена в рабочий процесс oozie, который помещает файлы из HDFS в корзину S3. Однако я получаю следующую ошибку
com.amazonaws.services.s3.model.AmazonS3Exception: доступ запрещен (сервис: Amazon S3; код состояния: 403; код ошибки: AccessDenied; идентификатор запроса: 310F08CD4FF8B5D9), расширенный идентификатор запроса S3: fAysD1vgtriV8x+sf1zqHk58eAT89Y6k0yPHIHPHIHPHPHPHPHPHPHPHPHPHP
Я создаю ключевой путь в S3 Bucket динамически в рабочем процессе oozie.
Например: если мое имя файла abc_20171009.tsv.gz
Затем этот файл должен быть загружен в корзину по следующему пути
tsvFile/year=2017/month=10/day=09/abc_20171009.tsv.gz
Аналогичным образом, файлы других дней должны быть загружены на основе даты.
Мой вопрос: должен ли путь к ключу существовать в корзине перед загрузкой файлов, или он может быть создан динамически?
// Request server-side encryption.
BasicAWSCredentials awsCredentials = new BasicAWSCredentials(awsAccessKeyId, awsSecretKey);
AmazonS3Client s3Client = new AmazonS3Client(awsCredentials);
PutObjectRequest request = new PutObjectRequest("bucket_name", "key_name","");
ObjectMetadata objectMetadata = new ObjectMetadata();
objectMetadata.setSSEAlgorithm(ObjectMetadata.AES_256_SERVER_SIDE_ENCRYPTION);
request.setMetadata(objectMetadata);
PutObjectResult response = s3Client.putObject(request);
LOGGER.info("Server Side Encryption successful" +response.getSSEAlgorithm());
Примечание. Я могу вручную поместить файл и подключиться к корзине S3 через интерфейс командной строки AWS.
1 ответ
В амазоне S3 Serive есть список безопасных символов, которые могут быть использованы для ключа объекта S3
Безопасные символы Следующие наборы символов обычно безопасны для использования в именах клавиш: • Буквенно-цифровые символы [0-9a-zA-Z] • Специальные символы!, -, _, ., *, ', (, И)
Однако то, что я вижу, вы используете =
с другой стороны, это специальный символ, требующий обработки
Символы, для которых может потребоваться специальная обработка Следующие символы в имени ключа могут потребовать дополнительной обработки кода и, вероятно, должны быть закодированы как URL или указаны как HEX. Некоторые из них являются непечатаемыми символами, и ваш браузер может не обрабатывать их, что также потребует специальной обработки
и один из этих персонажей =
возможно, когда вы загружаете файл вручную, =
автоматически кодируется. Так что у вас есть варианты, удалите это =
подписывает или кодирует их (я бы пошел с первыми вариантами)