是的,預簽名的URL應該適合你。只是提供快速說明...
默認情況下,Amazon S3中的所有對象都是私有的。然後,您可以添加權限,以便人們可以訪問您的對象。這可以通過以下方式進行:
- 對單個對象
- 水桶策略的訪問控制列表的權限(即授權基於路徑,IP地址,引薦等範圍廣泛的訪問)
- IAM用戶和組(即權限授予與AWS憑證用戶)
- 前置簽名網址
甲Pre-Signed URL可用於授予訪問S3 OBJE cts作爲「覆蓋」訪問控制的一種方式。通常可以通過URL訪問一個通常爲私人對象的,並附上失效時間和簽名。這是在不需要Web服務器的情況下提供私人內容的好方法。
如果你的目標是服務內容只有在使用預簽名URL,然後:
- 不分配通過上面列出的常規方法的任何權限(這讓他們的私人默認)
- 使用前簽署的網址訪問對象
你的代碼是:
const getLinkForKey = key => new Promise((resolve, reject) => {
const params = {Bucket: PICTURES_BUCKET, Key: key};
S3.getSignedUrl('getObject', params, (err, url) => err && reject(err) || resolve(url));
});
我注意到你是未通過Expires
參數,它指定了預先簽名的URL的有效期。下面是從Amazon S3 documentation for node.js一個代碼示例:
var params = {Bucket: 'bucket', Key: 'key', Expires: 60};
var url = s3.getSignedUrl('getObject', params);
console.log('The URL is', url); // expires in 60 seconds
因此,很可能你測試的URL之前鏈接過期。我建議您提供一個Expires
參數並將其設置爲適合您預期用途的長度(例如300秒)。
在存儲區權限中,允許'Everyone'能夠列出/查看文件。 – hjpotter92
如果我這樣做,每個人都可以訪問thoses的照片,不是嗎?我想提供具體的鏈接給他們訪問特定的圖片 – Ereold
如果你知道他們的IP,你可以創建一個策略。 – hjpotter92