2017-04-25 1 views
0

Je ne suis pas entièrement sûr si c'est la question que je devrais poser alors n'hésitez pas à soumettre des modifications.Comment signer en toute sécurité des demandes avec des informations d'identification AWS?

Je développe une application de bureau que je prévois de distribuer et d'utiliser amazon Polly pour lire le texte que l'utilisateur entre. J'ai de la difficulté à comprendre comment autoriser en toute sécurité les utilisateurs à accéder au service sous notre programme sans exposer la clé d'accès.

J'ai vu dans un exemple précédent que je devais créer une requête pour utiliser la ressource, avoir la clé d'accès et la clé d'accès secrète dans un serveur et signer la requête. Puis renvoyez-le à l'utilisateur sur l'application de bureau.

Si cela est correct, quelqu'un pourrait-il m'expliquer et me donner un exemple simple de la façon d'accomplir cela en python? Je vous remercie. :)

Voici ce que j'ai à ce jour que je voudrais être sur les clients de téléchargement de code:

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() 
+1

Vous pouvez essayer d'utiliser Cognito pour éviter les demandes d'alias. –

+0

Voulez-vous dire que vous voulez que vos clients puissent appeler AWS directement, en utilisant les informations d'identification de votre compte AWS? Est-ce que vous réalisez que vous n'auriez pas la possibilité de restreindre combien de fois ils l'ont appelé, ce qui pourrait vous causer des dépenses supplémentaires? Ou souhaitez-vous qu'ils fassent une demande à Polly * via votre application * plutôt que directement? –

+0

@JohnRotenstein Je ne savais pas qu'il y avait une différence. En fait, je voudrais seulement que mon application de bureau puisse appeler des demandes pour des choses spécifiques pour l'utilisateur. C'EST À DIRE. l'utilisateur ouvre l'application et il leur donne un message d'accueil personnalisé "Bonjour David, j'ai trouvé des ressources pour vous ..." Cependant, le défi est encore une application de bureau téléchargeable – Davidhall

Répondre

1

L'approche correcte pour donner aux gens l'accès aux services AWS et les ressources stockées sur AWS à adopter une approche client/serveur.

Le client dans votre cas est une application de Bureau, mais il peut également s'agir d'une application mobile ou d'une application Web. Le client est fondamentalement non approuvé et ne doit pas recevoir d'informations d'identification pour accéder à AWS.

Le serveur est une application en cours d'exécution, quelque part (généralement sur Amazon EC2 ou AWS Lambda) qui reçoit les demandes du client, applique la logique métier (par exemple la vérification de l'identité de l'utilisateur et déterminer les actions qu'ils sont autorisés à prendre) et des appels Services AWS.

Ensuite, il y a deux approches pour faire des appels à AWS:

  • Le serveur peut faire tous les appels à AWS (en utilisant les informations d'identification qui sont disponibles uniquement sur le serveur) et de transmettre de nouveau les résultats au client . Cela isole le client d'AWS et vous permet d'insérer une logique métier personnalisée dans le serveur. (Par exemple lorsque vous utilisez Netflix, votre téléviseur n'appelle pas AWS directement.) Ou ...
  • Le serveur peut vérifier l'identité du client (par exemple, l'utilisateur se connecte à l'application client, qui envoie les informations de connexion au serveur) en consultant une base de données d'utilisateurs d'application autorisés, générez les informations d'identification AWS temporaires, renvoyez-les au client, puis le client peut appeler AWS directement. (Par exemple de nombreuses applications mobiles font pour parler avec Amazon S3.)

Les temporaires des informations d'identification AWS peuvent être générés par le serveur en appelant la AWS Security Token Service et en spécifiant les autorisations et la durée recherchées. STS renvoie ensuite un ensemble d'informations d'identification limitées dans le temps qui ont les autorisations souhaitées. L'application cliente peut utiliser ces informations d'identification pour appeler les services AWS (par exemple Amazon Polly selon votre exemple de code). De cette manière, aucune information d'identification n'est stockée dans le code client et le serveur contrôle si le client est autorisé à accéder à AWS, quels appels d'API peuvent être utilisés et combien de temps l'accès doit être accordé.

+0

Pourriez-vous s'il vous plaît expliquer plus sur comment utiliser aws lambda à partir d'une application de bureau en python? De ce que j'ai regardé il semble que j'ai besoin d'ajouter des informations d'identification pour pouvoir appeler la fonction lambda. Je pense que c'est en partie parce que je suis confus au sujet de la façon dont toutes ces pièces devraient interagir. Merci pour la bonne réponse. – Davidhall

+0

Votre application de bureau doit demander au serveur des informations d'identification; le serveur confirme s'il est autorisé à utiliser votre compte et, le cas échéant, crée des informations d'identification temporaires en appelant STS et les renvoie à l'application de bureau. L'application de bureau peut ensuite appeler les services AWS. Mais ... pourquoi voulez-vous que votre application de bureau appelle Lambda? Il est normalement déclenché en réponse à un événement ou à une demande. –

+0

d'accord, génial! Merci. Je voulais appeler lambda parce que je pensais que c'était l'un des moyens de donner un accès complet au serveur. c'est-à-dire que le client appelle le lambda sur lequel sont les informations d'identification. Le lambda crée un mp3 avec Polly et renvoie le fichier mp3. Cependant, je ne pense pas que ce soit possible sans donner des informations d'identification au client. – Davidhall