2016-06-28 28 views
0

我有一個http-endpoint-A.如何將通過HTTP代理的AWS_IAM憑據映射到AWS的API網關中的實際HTTP EndPoint?

我們可以通過另一個http-endpoint-B調用這個端點。

因此B - > A

我們正在使用AWS API網關來執行上述操作。現在 - A是AWS_IAM受保護的,B沒有保護。所以A需要x-amz-security-token,AccessKey,SecretKey,X-Amz-Date,Authorization。我使用API​​網關的API資源功能 - 方法請求和集成請求來執行相應的映射。

enter image description here

完成各種其他的方式,但最終我收到以下錯誤:

{ 「消息」:「我們出的要求籤名不匹配您提供的簽名檢查您的AWS祕密訪問密鑰和簽名方法......「 }

我可以知道我在這裏丟失了什麼嗎?我已經查看過文檔和其他幾個參考文獻,但沒有找到任何適合的內容。

+0

*現在 - A是AWS_IAM受保護的,...所以A需要x-amz-security-token,AccessKey,SecretKey *什麼?有**沒有** AWS服務,需要您傳遞您的密鑰與請求。這是一個**祕密**鍵。 –

+0

@ Michael-sqlbot我正在使用Amazon Cognito(圍繞它編寫lambda/auth代碼),它返回臨時憑證(x-amz-security-token,AccessKey,SecretKey)以訪問預期的資源。 –

+0

啊,是的,這確實更有意義。 –

回答

0

您正在收到的錯誤表明端點A正期待請求使用sigV4進行簽名。目前,只有在使用「AWS服務代理」集成類型時,API網關纔會對後端集成端點的請求進行簽名。這是默認隱藏的。設置方法時,在「集成類型」下單擊「顯示高級」。這使得「AWS服務代理」可見。當您選擇它時,集成字段會更改爲與調用AWS服務相關的新集合。一個example of using the AWS Service Proxy can be found here

請注意,API網關當前不支持調用所有AWS服務。更具體地說,它不支持將其他API網關API作爲集成端點調用。所以,如果端點A是另一個API網關API,那麼這將不起作用。如果您需要調用API Gateway目前不支持的AWS服務,則可以通過創建Lambda函數來調用您的端點並從API網關調用Lambda函數來解決此問題。

+0

讓我工作,然後我會在這裏更新狀態。 –

+0

您可以共享任何示例(代碼段),我們可以從Java中的Lambda函數中調用端點。我發現這個:https://github.com/awslabs/aws-apigateway-sdk-java,但我沒有找到任何例子,例如如何設置具有必要終點值的結構並調用?或者,我們應該使用任何標準的http庫來調用端點? –

相關問題