[英]how to allow cognito authenticated users to get public access to s3 bucket
我希望我的 Cognito 身份驗證用戶(通過谷歌身份提供商)公開訪問存儲桶對象,而無需任何x-Amz-Security
或簽名令牌。
在我的應用程序中,經過身份驗證的用戶每天上傳 100 張圖片,我無法在 Dynamodb 中使用令牌存儲每張圖片 URL,因為它的有效期只有 7 天,7 天后其令牌會發生變化。 訪問存儲桶對象的另一種方法是請求 getObject 調用,它需要一個鍵(文件名)並返回對象/圖像 URL 和一個令牌(和到期時間),我可以用它來渲染圖像,但我不想進行額外的調用以獲取標記化的 URL。因此,我希望經過身份驗證的用戶能夠公開訪問我的存儲桶中的所有對象。
為此,我正在使用 Amplify,並且可以使用amplify add storage
在應用程序中添加存儲。 我嘗試編寫存儲桶策略,但它對我不起作用:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "PublicReadGetObject",
"Effect": "Allow",
"Principal": {
"Federated": "accounts.google.com"
},
"Action": "s3:ListBucket",
"Resource": "arn:aws:s3:::<bucketname>-staging"
},
{
"Effect": "Allow",
"Principal": {
"Federated": "accounts.google.com"
},
"Action": [
"s3:PutObject",
"s3:GetObject",
"s3:DeleteObject"
],
"Resource": "arn:aws:s3:::<bucketname>-staging/*"
}
]
}
上面的策略沒有用,我仍然需要一個令牌來訪問 s3 存儲桶中的圖像/對象。 我也嘗試過這個原則,但它允許公共訪問對象,這意味着未經身份驗證的用戶也可以訪問它。
{
"AWS": "*"
},
在此之后,我在我的 Cognito 池 ID 和谷歌 ID 的幫助下創建了一個身份池。 並授予其讀、寫和列表權限。 但是仍然經過身份驗證的用戶仍然需要一個簽名的 URL,我想讓他們使用一個 go 和一個未簽名的 URL 來訪問它。
如果我對你的問題的理解正確,要訪問你不想訪問的非公共 S3 對象:
這里的問題是,要訪問 S3 中的受限對象,您必須使用兩種可能的機制之一:
您需要以某種方式告訴 S3 誰在請求該文件。 在您的情況下,它是聯合用戶。 您可以通過使用從 STS 獲得的安全令牌簽署請求或使用 SDK 將 ID 令牌交換為一組臨時憑證然后對 S3 API 進行簽名調用來告訴它。
如果我對你的理解是正確的——你不想做這兩件事中的任何一件。 在那種情況下,你就不走運了。 你將無法按照你想要的方式實現你想要的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.