Доступ запрещен при помещении файла из 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. Некоторые из них являются непечатаемыми символами, и ваш браузер может не обрабатывать их, что также потребует специальной обработки

и один из этих персонажей =

возможно, когда вы загружаете файл вручную, = автоматически кодируется. Так что у вас есть варианты, удалите это = подписывает или кодирует их (я бы пошел с первыми вариантами)

Другие вопросы по тегам