Вы правы, вы не можете загружать, используя предварительно подписанные URL-адреса.
Существует другая, более сложная возможность, которую вы можете использовать, которая называется GetFederationToken .Это вернет вам некоторые временные учетные данные, к которым вы можете применить любую политику (разрешения), которая вам нравится.
Так, например, вы можете написать веб-сервис POST /upload
, который создает новую папку в S3, затемсоздает временные учетные данные с разрешениями для PutObject для только этой папки и возвращает путь к папке и учетные данные вызывающей стороне.Предположительно, этим методом также будет выполняться некоторая проверка авторизации.
Вы не можете встраивать облачные учетные данные или любые другие учетные данные в код приложения.Это не означает, что никто никогда не делает это случайно, даже специалисты по безопасности .
Чтобы безопасно распространять учетные данные в своей инфраструктуре, вам нужна поддержка инструментов.Если вы используете сервис AWS, такой как CloudFormation, вы можете (несколько больше) безопасно предоставить ему свои учетные данные.CloudFormation также может создавать новые учетные данные на лету.Если вы используете PaaS, такой как Heroku, вы можете загрузить в него свои учетные данные, и Heroku, вероятно, будет относиться к ним осторожно.Другим вариантом для AWS является роль IAM.Вы можете создать роль IAM с разрешением делать то, что вам нужно, а затем «передать» эту роль вашему экземпляру EC2.Он сможет выполнять действия, разрешенные ролью.
Последний вариант - это специальная служба управления секретами, например, Conjur .(Отказ от ответственности: я основатель компании).Вы загружаете свои учетные данные и другие секреты в выделенное виртуальное устройство и определяете права доступа, которые управляют изменением и распространением учетных данных.Эти разрешения могут быть предоставлены людям или «роботам», таким как ваш ящик EC2.Учетные данные могут быть получены с помощью REST или клиентских API, и каждое взаимодействие с учетными данными записывается в постоянную запись.