iT邦幫忙

2025 iThome 鐵人賽

DAY 10
0

前言

我們在第八天雖然使用 S3 Bucket 架設只支援 HTTP 的靜態網站,讓使用者可以上傳資料。 第九天透過 CloudFront 鋪設 CDN 限制只有 AWS CloudFront 可以存取 S3 Bucket 大幅縮限原本可能會被尻爆 API 的 S3 Bucket,之後只能先去問問 CDN 上車點,也支援了 HTTPS。 但是,還有一件事情沒有限制,那就是任何人都可以自由進出我在鐵人賽放出去的網址,上傳一些垃圾資料塞爆我的 S3,那使我的信用卡帳單面臨了一些危險欸!!

我需要做一個登入機制,來防堵無聊人士灌爆我的帳單。

需求分析

  • 至少還需要一組「我知道的密碼」來進行登入,然後弄幾組「影片拍攝團隊」、「後製團隊」知道的 密碼 吧! - 要一個「登入頁面」
  • 隨著登入功能,當然也需要 另一個「註冊頁面」
  • 要有一個頁面擋在 API Gateway 最前頭,使所有的流量都先進行身份驗證喔,驗完身份再給合法使用者看到上傳頁面,上傳頁面自動去按取號機,拿到 Presigned URL 才可以上傳喔~~

前端 (S3 Static Website)

  • login.html → 使用者輸入帳號密碼
  • register.html → 新使用者註冊
  • main.html → 登入後才能進行上傳的頁面

後端 (Serverless)

  • 因為沒有架設真正的伺服器,而是使用了 API Gateway,我們試圖讓這個 API Gateway 接收三個頁面,提供註冊登入驗證
    • register
    • login
    • validate
  • 如同前面幾篇做過的內容, API Gateway 收到了請求後,當然要去觸發 Lambda Functions,把該做的邏輯都做完喔。
    • registerUser:寫入帳號密碼到 DynamoDB(密碼要 Hash!)

      使用明文存密碼真的不應該,金價揪北爛,就算密碼沒有外流給駭客,也會被管理者看光光呢。

    • loginUser:驗證帳號密碼 → 發 JWT Token
    • validateUser:檢查 Token 是否有效

資料庫 (Database) 的選擇呢?!

  • 由於我們的需求很明確,在第一篇的時候就設定,這套系統只給「少數人」來使用。 當然你如果是某某影像工作室,也可以如法泡製自己的影音小工具。
  • 為此,如果還要開一台主機、提供資料庫,維護資料庫那很累噎,資料庫可能會越用越舊,越來越多的漏洞會被打喔!
  • 就算不要自己養主機,直接去使用 AWS RDS 來放這些少少的帳號密碼,不覺得浪費嗎,要按照開機時間燒錢的欸,然後 RDS 還有一個睡覺最多睡七天的設定,時不時就推你上線燒錢,痛啊。
  • 所以,遇到這種情形喔,把帳號密碼,放在雲端表格是一種做法,例如用 Google 表單後面對應到的 Spreadsheet 去當成資料庫,存少少的資料,也不在乎查詢搜尋的速度,表格類型是的好選擇。 但是這個檔案喔,會隸屬於某某帳號的表單,可能會被誤刪,也有可能因為員工離職,導致系統管理出現問題。
  • DynamoDB 在這個場景,就很適合拿來儲存 帳號(PK=user_id)與 hash 密碼

    Securely implement authentication with JWTs using Auth0 on any stack and any device in less than 10 minutes.
    意指實作簡單,十分鐘內就可以開發好登入的機制啦

關於 DynamoDB

  1. 全託管服務
    • 不需要自己維護伺服器、備份或升級,AWS 會自動處理。
    • 內建高可用性,資料會在多個 AZ(Availability Zones)自動複寫。
  2. 高效能與低延遲
    • 單位毫秒級的延遲,即使在高流量下也能維持穩定。
    • 適合需要即時存取的應用。
  3. 彈性擴展
    • 支援 自動擴展 (Auto Scaling),可依照流量動態調整讀寫容量。
      • On-Demand Mode: 自動根據請求付費。 反正就是擺著,有多少請求就收多少錢。
      • Provisioned Mode: 事先設定讀寫容量。 先向 AWS 老大求饒承諾要吃多少,換取關稅折扣,但還是要收錢喔!
  4. Key-Value 與 Document 資料模型
    • 資料表中每筆資料是一個 Item(類似於關聯式資料庫的 row)。
    • 支援 JSON 文件,可存放結構化與半結構化資料。
  5. 查詢能力
    • 以 Primary Key(分區鍵 + 選用排序鍵) 做主要存取。
    • 支援 Global Secondary Index (GSI) 與 Local Secondary Index (LSI),方便建立不同的查詢模式。
  6. 安全與整合
    • 與 IAM 整合,能精準控管存取權限。
    • 支援 加密 (Encryption at Rest/Transit)。
    • 可與 Lambda、Kinesis、S3 等 AWS 服務整合,適合事件驅動架構。
  7. 補充功能
    • DAX (DynamoDB Accelerator):記憶體快取,加速查詢。
    • Global Tables:跨區域複寫,支援多區域部署。
    • Streams:提供變更紀錄,可搭配 Lambda 做觸發器。

參考資料


上一篇
【Day 9】 關掉 BPA 的 S3 將會面臨什麼議題? / 好 CDN 不拿來用嗎?
系列文
無法成為片師也想拍 Vlog?!個人影音小工具的誕生!10
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言