Amazon DVA-C02: 儲存、Amazon S3、CloudFront 與檔案系統 (EFS, FSx) — 學習指南

屬於 AWS Developer Associate DVA-C02 — 學習指南. 使用經過驗證的解答練習: Amazon 考試中心, 或參加限時模擬考試: ExamRoll.io.

Amazon S3 基礎、安全控制與開發者模式

Amazon S3 是標準的持久性物件儲存。開發者應圍繞 PutObject/GetObject/HeadObject 來設計 API,針對大型酬載 (payloads) 則使用多部分上傳 (CreateMultipartUpload, UploadPart, CompleteMultipartUpload),並利用 SDK 輔助工具,例如 boto3 的 generate_presigned_url(‘get_object’) 或 generate_presigned_post 來處理暫時性的用戶端上傳。使用伺服器端加密 (SSE-S3、透過 PutObject 搭配 x-amz-server-side-encryption 的 SSE-KMS,或透過 PutBucketEncryption 強制執行儲存貯體預設加密) 來保護物件、透過在儲存貯體政策中強制執行 aws:SecureTransport 來要求使用 TLS,並使用 S3 Block Public Access 和明確的儲存貯體政策拒絕 (deny) 來阻擋意外的公開存取。常見的陷阱包括:IAM 的明確拒絕會優先於角色權限、預先簽章 URL 會繼承簽署者的權限但仍受儲存貯體政策和 VPC 端點政策的約束,以及從瀏覽器直接上傳時的 CORS 設定錯誤 (需設定 PutBucketCors)。使用生命週期規則 (PutBucketLifecycleConfiguration) 將物件轉換至 Intelligent-Tiering、GLACIER,或讓非當前版本過期,並在依賴非當前版本的規則前,先啟用版本控制 (PutBucketVersioning)。為了稽核與復原,請啟用 S3 伺服器存取日誌或 S3 Access Points,並使用具有保留模式的 Object Lock 來進行不可變的保留。在架構設計上,需考量到覆寫新金鑰 (key) 的最終一致性 (對於新物件的 PUT 操作,寫後讀取的一致性是有保證的,但更新現有金鑰在邊緣情境下可能會呈現最終一致性)。

進階 S3:Object Lambda、預先簽章流程、政策與生命週期的細微之處

S3 Object Lambda 讓您能透過將一個 Lambda 函數附加到 S3 Object Lambda Access Point 來轉換 GetObject 的回應;該 Lambda 會收到一個 GetObjectContext,且必須呼叫 WriteGetObjectResponse (透過 S3 Object Lambda/Control API) 來回傳轉換後的位元組 (bytes)。典型的模式是在不複製物件的情況下,即時進行圖片大小調整、資料遮蔽 (redaction) 或格式轉換。對於瀏覽器上傳,應產生帶有受限政策 (例如 content-length-range、金鑰前綴) 的預先簽章 POST (在 SDK 中使用 generate_presigned_post) 以避免濫用。儲存貯體政策和 VPC 閘道/介面端點政策是限制存取的強大工具:偏好使用明確允許 (explicit allow) 加上資源條件 (謹慎使用 aws:SourceVpce、aws:Referer),並避免使用開放的萬用字元主體 (principal)。生命週期的注意事項包括對已啟用版本控制的儲存貯體進行轉換——需明確設定 noncurrentVersionTransitions 和 noncurrentVersionExpiration——以及設定 abort-incomplete-multipart-upload 以避免儲存空間洩漏。當強制執行傳輸中加密時,需請求 x-amz-server-side-encryption 或使用 PutBucketPolicy 來拒絕未使用 tls 的請求。為了達到不可變的合規性,請在上傳物件前啟用 Object Lock。當需要程式化的強制執行時,可結合 S3 事件 (SNS, EventBridge) 與 Lambda 來套用標籤或執行上傳後驗證。

CloudFront、快取策略與邊緣運算 (Lambda@Edge vs CloudFront Functions)

CloudFront 加速全球交付並保護來源 (origin)。對於 S3 來源,偏好使用帶有 Sigv4 的 Origin Access Control (OAC),而非舊版的 Origin Access Identity,來簽署對來源的請求,並拒絕直接的 S3 公開存取。快取行為的調校可透過 Cache-Control/Expires、轉送 Authorization 標頭,以及基於查詢字串/Cookie 的快取金鑰;偏好使用快取金鑰白名單或 Cache Policy & Origin Request Policy 來減少快取碎片化。對於私有內容,請使用 CloudFront 簽章 URL 或簽章 Cookie (透過 cloudfront.create_signer 或 SDK 輔助工具建立)。使用 CloudFront Functions 進行亞毫秒級的輕量級操作 (檢視器請求/回應),而 Lambda@Edge 則用於需要 Node/Python 執行環境以及來源請求 (origin-request) 或來源回應 (origin-response) 掛鉤 (hook) 的較重邏輯;請記住 Lambda@Edge 函數是從 us-east-1 部署,且有冷啟動的影響和區域性複寫延遲。失效 (Invalidation) 操作具有成本和延遲——偏好使用物件金鑰版本控制 (例如部署新檔名或新增查詢字串版本) 來避免失效操作。使用即時日誌和 CloudWatch 指標來檢測 CloudFront,以進行近乎即時的異常偵測,並觸發 Lambda 以進行自動化回應。常見的陷阱包括轉送過多的標頭/Cookie 導致快取失效 (cache bust),以及假設失效操作會立即傳播。

共享檔案系統:EFS 與 FSx 的決策標準、掛載方式與常見陷阱

如果需要在多個 Linux 用戶端之間,同時掛載符合 POSIX 標準的 NFSv4.1 檔案系統,請選擇 EFS;如果你需要 SMB/Windows 的功能或高效能的 Lustre,則選擇 FSx 系列服務。EFS 支援透過 KMS 進行靜態加密 (encryption at rest)、使用 TLS 掛載選項進行傳輸中加密 (encryption in transit),並可透過存取點 (access points) 為每個應用程式對應 UID/GID。使用 amazon-efs-utils (mount -t efs -o tls,accesspoint=fsap-0123456789 fs-12345678:/ /mnt) 或針對高吞吐量工作負載使用 NFS 用戶端來掛載。根據吞吐量/IOPS 的模式,選擇 generalPurposemaxIO 效能模式,以及 burstingprovisioned 吞吐量模式。FSx for Windows 與 Active Directory 整合,並提供具備 NTFS ACLs、DFS 命名空間和原生 Windows 語意的 SMB 共享——可使用 net use \\fs-xxxx\share 或透過 EC2 Windows 用戶端掛載;常見的陷阱包括加入 AD 的複雜性及 DNS 解析問題。FSx for Lustre 是高效能運算的理想選擇,並可透過資料儲存庫任務 (data repository tasks) 透明地連結到 S3,以匯入/匯出資料集。網路方面的注意事項:在安全群組 (security groups) 中開啟 NFS/SMB 連接埠、為 EFS 在每個 AZ 中使用掛載目標 (mount targets),並確保 IAM 政策不能用來限制 NFS 層級的存取——POSIX 權限和安全群組才是強制執行點。備份方面,建議優先使用自動快照 (EFS Backup、FSx snapshots),並定期測試還原作業。

實務問題:使用情境

情境:AcmeAnalytics 公司在一個 S3 儲存貯體中託管一個面向客戶的靜態儀表板,並透過 CloudFront distribution 向全球提供服務。工程團隊需要提供私有資料檔案的存取、對某些物件執行即時的 CSV 轉 JSON 格式轉換,並確保新版本的儀表板建置能以最低成本使快取失效。

挑戰:實作安全的私有物件交付、不重複儲存資料的動態轉換,以及一個低成本的快取更新策略。

建議方法:

  1. 建立一個 S3 儲存貯體,使用 PutBucketEncryption (SSE-KMS) 和 PutBucketPolicy 來拒絕非 TLS 的連線,並只允許來自 CloudFront Origin Access Control (OAC) 的存取 (需建立 OAC 並附加到 distribution);使用 PutBucketVersioning 來啟用版本控制。
  2. 設定一個 S3 Object Lambda Access Point;實作一個 Lambda 函數,該函數處理 GetObjectContext,透過 S3 GetObject 取得原始物件,在記憶體中將 CSV 轉換為 JSON,並使用 s3control.write_get_object_response 回傳結果。
  3. 設定 CloudFront 快取行為 (cache behaviors):將 /private/* 的路由指向 S3 Object Lambda Access Point (作為一個 origin),設定一個 Cache Policy,必要時根據 Accept 標頭進行快取,並啟用最小 TTLs;對於儀表板的資產,使用帶有版本的檔案名稱以避免快取失效。
  4. 對於不常發生但必要的快取失效,在部署後從 CI 呼叫 cloudfront.create_invalidation(DistributionId=..., InvalidationBatch={...});對於例行變更,則上傳檔名中包含內容雜湊 (content-hash) 的資產,以繞過快取失效的成本。

基本原理:透過 OAC 將 S3 存取限制於 CloudFront,並強制執行 SSE-KMS,可確保傳輸中和靜態資料的安全。S3 Object Lambda 提供即時轉換功能而無需複製物件,而使用物件版本控制或內容雜湊檔名,則可在維持快取效率的同時,避免昂貴的快取失效操作。


監控、日誌記錄與偵錯 (CloudWatch · 所有領域 · 資料庫與快取 (RDS

練習這些題目 → · 在 ExamRoll.io 上限時練習 →

Pass the whole exam — not just this question

You found this answer. Get every verified question and explanation in one place, and save hours of prep. Free to start.

通過考試 →

瀏覽 Amazon →

Related guides

一站式存取

一份訂閱。所有考試。

每個方案都可無限存取答案搜尋、練習測驗、AI 解釋和完整的資源庫 — 支援 20 多種語言。

每月
24.87
Just €0.83/day
包含所有內容:
  • 無限答案搜尋
  • 無限練習測驗
  • AI 驅動的解釋
  • 完整資源庫
  • 20 多種語言
  • 每週內容更新
  • 獎勵與推薦
  • 優先支援
開始免費試用

無需信用卡*

最佳價值
12 個月
179.87
Just €0.49/daySave 40%
包含所有內容:
  • 無限答案搜尋
  • 無限練習測驗
  • AI 驅動的解釋
  • 完整資源庫
  • 20 多種語言
  • 每週內容更新
  • 獎勵與推薦
  • 優先支援
開始免費試用

無需信用卡*

✓ 包含免費方案 · ✓ 隨時取消 · ✓ 所有方案解鎖完整產品