繁体   English   中英

如何使用AWS凭证安全地签署请求?

[英]How to securely sign requests with aws credentials?

我不确定这是否是我要提出的问题,请随时提交修改。

我正在开发一个桌面应用程序,我打算分发并使用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服务和资源的访问权的正确方法是采用客户端/服务器方法。

在您的情况下, 客户端是桌面应用程序,但也可以是移动应用程序或Web应用程序。 客户端基本上是不受信任的 ,不应获得访问AWS的任何凭证。

服务器是运行在某处(通常在Amazon EC2或AWS Lambda上)的应用程序,该应用程序接收来自客户端的请求,应用业务逻辑(例如,验证用户身份并确定允许他们采取的操作)并调用AWS服务。

然后,有两种方法可以调用AWS:

  • 服务器可以对AWS进行所有调用(使用仅对服务器可用的凭据),然后将结果传递回客户端。 这会将客户端与AWS隔离开来,并允许您在服务器内插入自定义业务逻辑。 (例如,当您使用Netflix时,电视不会直接呼叫AWS。)或...
  • 服务器可以通过咨询授权应用程序用户的数据库来验证客户端的身份(例如,用户登录到客户端应用程序,该客户端应用程序将登录详细信息发送到服务器),生成临时AWS凭证 ,将其传递回客户端,然后客户可以直接致电AWS。 (例如,许多移动应用程序都这样做是为了与Amazon S3进行通信。)

服务器可以通过调用AWS Security Token Service并指定所需的权限和持续时间来生成临时AWS凭证 然后,STS将返回一组具有所需权限的限时凭证。 客户端应用程序可以使用这些凭证来调用AWS服务(例如,根据您的代码示例的Amazon Polly)。

这样,客户端代码中不会存储任何凭证,服务器将控制是否允许客户端访问AWS,可使用哪些API调用以及应授予访问多长时间。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM