Я не совсем уверен, стоит ли мне задавать этот вопрос, поэтому не стесняйтесь вносить изменения.
Я разрабатываю настольное приложение, которое планирую распространять и использовать amazon Polly для чтения текста, вводимого пользователем. У меня возникают проблемы с пониманием того, как безопасно разрешить пользователям доступ к сервису в рамках нашей программы, не раскрывая ключ доступа.
В предыдущем примере я видел, что должен создать запрос на использование ресурса, иметь на сервере ключ доступа и секретного доступа и подписать запрос. Затем отправьте его обратно пользователю в настольном приложении.
Если это правильно, может кто-нибудь объяснить и дать мне простой пример того, как сделать это в Python? Спасибо. 🙂
Вот что у меня есть, и я хотел бы, чтобы клиенты загружали код:
from boto3 import client
import boto3
import StringIO
from contextlib import closing
polly = boto3.client(
'polly',
region_name='us-east-1',
aws_access_key_id='I_want_to_protect_this',
aws_secret_access_key='I_also_want_to_protect_this'
)
response = polly.synthesize_speech(
Text="Good Morning. My Name is Rajesh. I am Testing Polly AWS Service For Voice Application.",
OutputFormat="mp3",
VoiceId="Raveena")
print(response)
if "AudioStream" in response:
with closing(response["AudioStream"]) as stream:
data = stream.read()
fo = open("pollytest.mp3", "w+")
fo.write( data )
fo.close()
Правильный подход к предоставлению людям доступа к сервисам и ресурсам AWS, хранящимся в AWS, заключается в подходе клиент / сервер.
клиент в вашем случае это приложение для настольного компьютера, но в равной степени это может быть мобильное приложение или веб-приложение. Клиент в основном ненадежный и не должны предоставляться никакие учетные данные для доступа к AWS.
сервер это приложение, запущенное где-то (обычно в Amazon EC2 или AWS Lambda), которое получает запросы от клиента, применяет бизнес-логику (например, проверяет личность пользователя и определяет, какие действия ему разрешено выполнять) и вызывает сервисы AWS.
Тогда есть два подхода к звонкам в AWS:
временные полномочия AWS может быть сгенерирован сервером, вызвав Сервис токенов безопасности AWS и указание разрешений и продолжительности поиска. Затем STS вернет набор ограниченных по времени учетных данных, которые имеют необходимые разрешения. Клиентское приложение может использовать эти учетные данные для вызова сервисов AWS (например, Amazon Polly согласно вашему примеру кода).
Таким образом, в клиентском коде не хранятся учетные данные, и сервер контролирует, разрешен ли клиенту доступ к AWS, какие вызовы API можно использовать и как долго следует предоставлять доступ.
Других решений пока нет …