Вы должны понимать, что ваш javascript запускается в окне браузера клиента, следовательно, это браузер, пытающийся получить доступ к mp3-файлу во втором, а не в первом.
Зная, что не существует простого решения вашей проблемы, кроме открытия доступа ко второму сегменту и использования CORS, как вы пытались (но только один CORS не даст доступа к частному сегменту)
Предложение 1: подписи, созданные вручную
Если вы просто хотите предоставить доступ к нескольким файлам во втором сегменте (и не ко всем файлам), я бы порекомендовал включить в ваш javascript полностью подписанный URL-адрес объекта во втором блоке. Подписанные URL-адреса позволяют получить доступ к отдельным объектам в непубличном сегменте в соответствии с документацией S3 . Однако генерирование подписей не является тривиальным и требует немного кода.
Я написал эту утилиту командной строки, чтобы помочь вам сгенерировать подпись для данного объекта в приватной корзине.
https://github.com/sebsto/s3sign
В настоящее время в командной строке AWS также есть опция presign
https://docs.aws.amazon.com/cli/latest/reference/s3/presign.html
Кроме того, подпись ограничена по времени, и максимальный возраст составляет 7 дней Так что, если вы выберете этот подход, вам потребуется пересоздавать ссылки каждую неделю. Это не очень масштабируемо, но может быть легко автоматизировано.
Предложение 2: динамическое создание подписи на веб-сервере
Если вы решили отойти от Javascript на стороне клиента и использовать вместо этого сгенерированные на стороне сервера страницы (используя Python, Ruby, PhP и т. Д. И сервер), вы можете динамически генерировать подписи с вашего сервера. Недостатком этого подхода является то, что вам потребуется сервер.
Предложение 3: динамическая генерация подписи, без сервера
Если вы знакомы с AWS Lambda и API Gateway, вы можете создать безсерверный сервис, который будет динамически возвращать подписанный URL-адрес в ваш файл MP3. Ваша статическая HTML-страница (или Javascript на стороне клиента) будет вызывать URL-адрес API-шлюза, а API-шлюз будет вызывать Lambda, а Lambda на основе пути или строки запроса вернет соответствующий подписанный URL-адрес для вашего MP3.
С предложениями 2 и 3 связаны затраты AWS (либо для запуска сервера EC2, либо для времени выполнения шлюза API и лямбды), поэтому обязательно проверяйте Цены AWS перед выбором варианта. (подсказка: предложение 3 будет более рентабельным)
Настоящий вопрос в том, ПОЧЕМУ ты хочешь создать это? Почему вы не можете хранить весь свой публичный контент в одной корзине, используя тонкодисперсные политики доступа S3, когда это необходимо.