0

我的應用程序使用Cognito用戶池來限制訪問,以便每個用戶可以在「私人」存儲區中訪問自己的個人文件夾讀/寫。在「公共」存儲桶中,它是一樣的,除了每個人都可以讀取所有內容並將訪問權限寫入自己的文件夾。當通過JavaScript S3 SDK訪問時,這一切都可以正常工作。AWS API網關 - 如何執行S3 Cognito用戶池限制文件夾訪問?

我現在試圖通過API網關訪問訪問S3的Lambda函數進行訪問。

問題是,似乎Cognit用戶池標識未被Lambda函數使用。如果我給Lambda函數角色全部訪問S3,那麼函數可以訪問S3並且該函數可以工作。但是,如果我有角色策略以按照上面所述的Cognito用戶池ID進行限制,則我的訪問被拒絕。

在我看來,Userpool Cognito Identity不是Lambda函數正在使用的內容。

任何人都可以建議此設置的正確配置?

謝謝

回答

0

API網關和Lambda不會自動支持此用例。

Lambda函數以其執行角色的標識運行,因此其上下文將不包含來自Cognito用戶池的標識屬性。 (Lambda函數中的上下文對象包含來自Lambda視角的上下文。)

API網關通過API網關中的$ context.authorizer.claims變量公開Cognit用戶池標識信息。要從您的Lambda函數中訪問此信息,您必須在API網關中修改您的正文映射模板,以通過請求正文將所需數據從$ context.authorizer.claims傳遞到您的Lambda函數。您是Lambda函數,然後像任何其他字段一樣從請求主體讀取此信息。

在這種情況下,沒有機制可以基於每個Cognito用戶自動限制對S3存儲桶/對象的權限。您可以在您的Lambda函數中實現邏輯,以使用自定義代碼執行它。

相關問題