2017-04-25 76 views
0

我不完全確定這是否是我應該問的問題,因此請隨時提交修改。如何使用aws憑證安全地簽署請求?

我正在開發一個桌面應用程序,我打算分發和使用亞馬遜波利閱讀用戶輸入的文本。我無法理解如何安全地允許用戶在我們的程序下訪問該服務而無需公開訪問密鑰。

我在前面的例子中看到,我應該創建一個使用資源的請求,在服務器中擁有訪問和祕密訪問密鑰,並對請求進行簽名。然後將其發送回桌面應用程序上的用戶。

如果這是正確的,有人可以解釋並給我一個簡單的例子,說明如何在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() 
+1

您可以嘗試使用Cognito以避免必須混淆請求。 –

+0

您是否說您希望您的客戶能夠使用AWS賬戶中的憑證直接撥打AWS?你是否意識到自己無法限制他們多次稱呼它,這可能會導致額外的費用?或者你希望他們通過你的申請*而不是直接向Polly *提出請求嗎? –

+0

@JohnRotenstein我不知道有什麼區別。我實際上只想讓我的桌面應用程序能夠爲用戶調用特定事件的請求。 I.E.用戶打開應用程序,它給他們一個自定義的問候語「早上好大衛,我找到了一些資源給你......」然而,挑戰是這是一個可下載的桌面應用程序 – Davidhall

回答

1

正確的做法爲人們提供訪問AWS服務和資源存儲在AWS是採取客戶端/服務器方法。

客戶端在你的情況是一個桌面應用程序,但它也可以是一個移動應用程序或一個Web應用程序。客戶基本上是不受信任的,並且不應該給予訪問AWS的任何憑據。

服務器某處(通常在Amazon EC2或AWS拉姆達)爲從客戶端接收請求運行的應用程序,應用業務邏輯(例如驗證用戶的身份,並確定允許他們採取什麼行動),並調用AWS服務。

然後有兩種方法來撥打電話到AWS:

  • 服務器可以讓所有AWS(即只提供給服務器使用的憑證)的調用和結果傳回客戶端。這將客戶端與AWS隔離開來,並允許您在服務器中插入自定義業務邏輯。 (例如,當您使用Netflix時,您的電視不直接呼叫AWS。)或者...
  • 服務器可以驗證客戶端的身份(例如,用戶登錄到客戶端應用程序,該應用程序發送登錄詳細信息通過諮詢授權應用程序用戶的數據庫,生成臨時AWS憑證,將它們傳遞迴客戶端,然後客戶端可以直接呼叫AWS。 (例如,許多移動應用程序這樣做是爲了與亞馬遜S3交談。)

臨時AWS憑據通過調用AWS Security Token Service並指定要求的權限和持續時間可以由服務器生成。然後,STS將返回一組具有所需權限的時間限制憑據。客戶端應用程序可以使用這些憑據來調用AWS服務(例如,根據您的代碼示例,Amazon Polly)。

這樣,客戶端代碼中不存儲憑據,服務器控制是否允許客戶端訪問AWS,可以使用哪些API調用以及應授予訪問多長時間。

+0

您能否詳細解釋如何在python中使用桌面應用程序中的aws lambda?從我一直在尋找它似乎我需要添加證書才能夠調用lambda函數。我覺得這部分是因爲我對所有這些作品應該如何互動感到困惑。謝謝你的偉大答案。 – Davidhall

+0

你的桌面應用應該向服務器詢問一些憑證;服務器會確認是否允許使用您的帳戶,如果是,則通過調用STS創建臨時憑據並將其傳遞迴桌面應用程序。桌面應用程序可以調用AWS服務。但是...爲什麼你想讓你的桌面應用程序調用Lambda?它通常是爲了響應事件或請求而觸發的。 –

+0

好的,太棒了!謝謝。我希望它調用lambda,因爲我認爲這是完全訪問服務器的方式之一。即,客戶端調用其上具有憑據的lambda。 lambda用Polly創建一個mp3並返回mp3文件。但是,如果不向客戶提供憑據,我認爲這是不可能的。 – Davidhall

相關問題