如何使用aws凭据安全地签署请求?

2024-06-01 02:41:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我不完全确定这是否是我应该问的问题,所以请随时提交编辑。你知道吗

我正在开发一个桌面应用程序,我计划分发并使用amazonpolly阅读用户输入的文本。我很难理解如何安全地允许用户在不暴露访问密钥的情况下访问我们程序下的服务。你知道吗

我在前面的一个例子中看到,我应该创建一个使用资源的请求,在服务器中拥有访问和秘密访问密钥,并对请求进行签名。然后将其发送回桌面应用程序上的用户。你知道吗

如果这是正确的,有人能解释一下,并给我一个简单的例子,说明如何在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()

Tags: 用户fromimportclientaws应用程序accessresponse
1条回答
网友
1楼 · 发布于 2024-06-01 02:41:11

为人们提供访问AWS服务和存储在AWS上的资源的正确方法是采用客户机/服务器方法。你知道吗

在您的例子中,客户端是一个桌面应用程序,但它同样可以是一个移动应用程序或web应用程序。客户端基本上是不受信任的,不应该被授予访问AWS的任何凭据。你知道吗

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

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

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

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

通过这种方式,客户端代码中不存储任何凭据,服务器控制是否允许客户端访问AWS、可以使用哪些API调用以及应该授予访问权限的时间。你知道吗

相关问题 更多 >