如何在AWS中創建IAM用戶

在本教程中,我將解釋如何通過IAM(身份和訪問管理)面板在AWS中創建具有程序化訪問權限的用戶。 如果您還沒有AWS帳戶,請從這裡開始:https://aws.amazon.com。 一旦您設置了帳戶並且已登錄到AWS,請點擊頂部的用戶名,然後選擇“我的安全憑證”。 在側邊欄中,點擊“使用者”和“新增使用者”。啟用“程序化存取”。 透過頁面底部的按鈕(“下一步:權限”),移至下一個畫面。 單擊“直接連接現有策略”: 在此示例中,我創建了一個可以訪問S3上傳文件的用戶。 在過濾器中輸入“S3”以顯示S3策略。 選擇AmazonS3FullAccess權限: 用戶創建後,您將獲得一對訪問金鑰ID和密鑰。 將這些複製到您項目中用作環境變數的.env文件中。

如何將您的 S3 存儲桶設為公開

我之前寫過一篇關於如何上傳圖片至 S3 的文章。 在我準備好 S3 存儲桶,並且成功上傳了圖片並將 URL 存儲在數據庫後,我發現這些圖片無法被公開以只讀的方式訪問。 圖片雖然存在,但任何人都無法查看。 如果我試圖訪問它,只會看到類似下面這樣的錯誤信息: <Error> <Code>AccessDenied</Code> <Message>Access Denied</Message> <RequestId>E5FBYNEYEFNZH</RequestId> <HostId> iImqC8XkvmPP4/BJxNGDZrPrDr7us1u3UeZqH8prlv3dk69R9m7uOaaaZDvTLAtne2rLkRWZ4= </HostId> </Error> 我覺得可能是權限問題,所以首先我試圖編輯“阻止公共訪問”設置,將原有的阻止設置禁用: 但是這並沒有解決問題,圖片依然無法訪問。 於是,我嘗試在單個文件的權限設置中,將“Everyone (公共訪問)”設置為“只讀”: 這樣做對於單個文件是有效的。 因此,我前往一般存儲桶權限,那裡有一個相似的 ACL 權限面板,我試圖設置相同的設置。 我將“Everyone (公共訪問)”設置為“只讀”,但結果並不如預期。 雖然我明確地設置了公共訪問權限,但是人們仍然無法公開查看文件。 事實上,沒有通過點擊操作可以實現這一點。 我必須設置一個存儲桶策略,可以從存儲桶權限頁面進行設置,然後我添加了以下內容: { "Version": "2008-10-17", "Statement": [ { "Sid": "AllowPublicRead", "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": "s3:GetObject", "Resource": "arn:aws:s3:::YOURBUCKETNAME/*" } ] } 請將 YOURBUCKETNAME 修改為您的存儲桶名稱。 通過添加這一段內容,我成功讓它生效。添加後,您可以將“阻止公共訪問”設置如下: 這就是全部了。現在,我的文件(在這種情況下是圖片)可以公開訪問了。

如何從 Node.js 上傳文件到 S3

我有一個簡單的使用案例。 我正在建立一個工作看板,現在是建立提交新工作職位的表單的時候了。 招聘人員可以輸入公司詳細資料、職位詳細資料和公司標誌圖片。 數據存儲在數據庫中,起初我試圖將標誌存儲在數據庫中,但過了一段時間,我意識到儘管在技術上是可行的,但在存儲二進制數據方面存在一些問題,而且任務需要花費太長的時間。因此,我決定將其上傳到 S3。 S3是AWS提供的一個出色的服務。由於我已經在其他方面使用AWS,添加S3存儲桶很容易。 所以我去創建了一個S3存儲桶。 我已經有了一個AWS帳戶。如果您沒有,請從這裡開始: https://aws.amazon.com。 一旦設置好帳戶,請在AWS中創建一個IAM用戶。登錄AWS,點擊頂部的您的名稱,然後點擊“我的安全憑證”。 在側邊欄中點擊“用戶”和“添加用戶”。啟用“編程訪問。” 通過頁面底部的按鈕(“下一步: 權限”)來轉到下一個屏幕。 點擊“直接附加現有策略”: 在過濾器中輸入“S3”以顯示S3策略 選擇AmazonS3FullAccess權限: 用戶創建完成後,您將獲得一對訪問密鑰ID和安全訪問密鑰。將其複製到您的項目中的.env文件中,或者存儲在某個地方以便以後使用。 接下來,進入S3並創建一個存儲桶。從S3首頁https://s3.console.aws.amazon.com點擊“創建存儲桶”按鈕。 設置一個名稱,選擇一個AWS區域,禁用“阻止所有公共訪問”(我們將在另一篇文章中討論權限),然後點擊頁面底部的“創建存儲桶”按鈕。 完成!現在是深入研究Node.js的時候了。我在Next.js中在API調用中使用這段代碼。 首先使用npm install aws-sdk安裝aws-sdk包。 如前所述,將您的AWS訪問代碼存儲在.env中: AWS_ACCESS_KEY_ID=<訪問密鑰> AWS_SECRET_ACCESS_KEY=<安全訪問密鑰> AWS_BUCKET_NAME=<存儲桶名稱> 在頂部添加 import AWS from 'aws-sdk' 然後使用以下代碼初始化s3對象: const s3 = new AWS.S3({ accessKeyId: process.env.AWS_ACCESS_KEY_ID, secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY }) 現在,當您想要上傳文件時,從存儲中加載它: const filename = '文件名' const fileContent = fs.readFileSync(fileName) const params = { Bucket: process.env.AWS_BUCKET_NAME, Key: `${filename}.jpg`, Body: fileContent } s3.upload(params, (err, data) => { if (err) { reject(err) } resolve(data....