本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用與靜態 IP 地址相關聯的端點來整合 Amazon S3 預先簽章的 URL 產生和物件下載
Song Jin、Eunhye Jo 和 Amazon Web Services Jun Soung Lee
Summary
此模式透過為物件下載建立安全的自訂預先簽章 URLs,簡化對 Amazon Simple Storage Service (Amazon S3) 的存取。解決方案提供具有唯一網域和靜態 IP 地址的單一端點。它專為需要在具有靜態 IP 地址的統一網域下整合 API 和 Amazon S3 端點的客戶量身打造。使用案例涉及遵循 IP 和網域允許清單防火牆政策的使用者,限制對特定網域和 IP 地址的 API 存取。
架構採用金鑰 AWS 服務,包括 AWS Global Accelerator Amazon API Gateway、 AWS Lambda Application Load Balancer AWS PrivateLink和 Amazon S3。此設計會集中 API,以在單一網域下產生預先簽章URLs 和 Amazon S3 端點,並連結至具有兩個靜態 IP 地址的加速器。因此,使用者可以輕鬆地請求預先簽章URLs,並透過具有靜態 IP 地址的統一網域端點下載 Amazon S3 物件。
此架構特別有利於具有嚴格政策或合規要求的客戶,例如公有、醫療和金融領域的客戶。
先決條件和限制
先決條件
作用中 AWS 帳戶
自訂網域名稱的公有託管區域
在您選擇的 AWS Certificate Manager (ACM) 中匯入 AWS 區域 的網域
限制
Amazon S3 儲存貯體名稱必須符合端點的網域名稱。此要求旨在確保可透過單一 API 端點提供 Amazon S3 端點。
API Gateway 中使用的自訂網域名稱應與單一 API 端點的網域名稱相符。
有些 AWS 服務 完全無法使用 AWS 區域。如需區域可用性,請參閱AWS 依區域的服務
。如需特定端點,請參閱服務端點和配額,然後選擇服務的連結。
架構
下圖顯示此模式的目標架構和工作流程。

下圖說明了下列概念和工作流程:
使用者使用透過 提供的自訂端點 AWS Global Accelerator,使用自訂網域名稱和相關聯的 IP 地址,啟動產生預先簽章 URL 的請求。
Lambda 函數會產生預先簽章的 URL,指向自訂端點。它會以 301 重新導向回應,其中包含產生的預先簽章 URL。透過重新導向的預先簽章 URL,使用者會使用透過 Global Accelerator 提供的自訂端點自動下載物件。
預先簽章 URL 產生和物件下載工作流程的整體架構元件如下:
由 Global Accelerator 佈建靜態 IP 地址。
使用自訂網域名稱,將加速器的別名註冊為 Amazon Route 53 公有託管區域的 A 記錄。
建立儲存貯體名稱符合已註冊自訂網域名稱的 Amazon S3 儲存貯體。
建立 API Gateway 和 Amazon S3 服務的 VPC 端點。
要連線至 Global Accelerator 的內部 Application Load Balancer 組態。
指派已連接 ACM 憑證之 API Gateway 的自訂網域名稱。
部署與 Lambda 函數整合的私有 API Gateway。
Lambda 函數配備連接的 AWS Identity and Access Management (IAM) 角色 (具有 GetObject 許可)。
工具
AWS 服務
Amazon API Gateway 可協助您建立、發佈、維護、監控和保護任何規模的 REST、HTTP 和 WebSocket APIs。
Application Load Balancer 會將傳入應用程式流量分散到多個可用區域中的多個目標,例如 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體。
AWS Certificate Manager (ACM) 可協助您建立、存放和續約公有和私有 SSL/TLS X.509 憑證和金鑰,以保護 AWS 網站和應用程式。
AWS Cloud Development Kit (AWS CDK) 是一種軟體開發架構,可協助您在程式碼中定義和佈建 AWS 雲端 基礎設施。
AWS Global Accelerator 是一種全域服務,支援多個 中的端點 AWS 區域。您可以建立加速器,透過 AWS 全球網路將流量導向最佳端點。如此可改善網際網路應用程式的可用性和效能,提升全球觀眾的使用體驗。
AWS Identity and Access Management (IAM) 透過控制已驗證並獲授權使用的人員,協助您安全地管理對 AWS 資源的存取。
AWS Lambda 是一項運算服務,可協助您執行程式碼,無需佈建或管理伺服器。它只會在需要時執行程式碼並自動擴展,因此您只需按使用的運算時間付費。
AWS PrivateLink 可協助您建立從虛擬私有雲端 (VPCs) 到 VPC 外部服務的單向私有連線。
Amazon Route 53 是一種可用性高、可擴展性強的 DNS Web 服務。
Amazon Simple Storage Service (Amazon S3) 是一種雲端型物件儲存服務,可協助您儲存、保護和擷取任何數量的資料。
其他工具
Terraform
是 HashiCorp 的基礎設施即程式碼 (IaC) 工具,可協助您建立和管理雲端和內部部署資源。
程式碼儲存庫
您可以根據您的偏好,使用 AWS CDK 或 Terraform 部署此模式。Epics 區段包含兩種部署方法的說明。此模式的程式碼可在下列 GitHub 儲存庫中使用:
最佳實務
為了增強生產環境中的安全性,請務必實作授權機制,例如 Amazon Cognito,以限制對
PresignedUrl
世代 API 的存取。
史詩
任務 | 描述 | 所需的技能 |
---|---|---|
設定 Terraform 開發環境。 | 若要設定開發環境,請執行下列動作:
| AWS 管理員、雲端管理員 |
修改 |
注意下列事項:
| AWS 管理員、雲端管理員 |
佈建網路資源。 | 若要佈建網路資源,請執行下列命令:
在 | AWS 管理員、雲端管理員 |
佈建 API Gateway、Amazon S3 和 Lambda。 | 若要佈建網路資源,請使用下列命令:
| AWS 管理員、雲端管理員 |
任務 | 描述 | 所需的技能 |
---|---|---|
設定 AWS CDK 開發環境。 | 若要設定開發環境,請執行下列動作:
| AWS 管理員、雲端管理員 |
在 | 若要編輯常數變數的選項,請使用下列命令:
在命令中,將每個預留位置取代為您自己的資訊:
| AWS 管理員、雲端管理員 |
部署堆疊。 | 若要部署兩個堆疊,一個用於虛擬私有雲端 (VPC),另一個用於應用程式,請使用下列命令:
| AWS 管理員、雲端管理員 |
任務 | 描述 | 所需的技能 |
---|---|---|
驗證端點的 IP 地址。 | 若要驗證此模式的網域具有靜態 IP 地址,請使用下列命令:
| 網路管理員 |
上傳您稍後可以下載的測試檔案。 | 將測試檔案上傳至 Amazon S3 儲存貯體中的 | AWS 管理員、雲端管理員 |
叫用 API 以產生預先簽章的 URL。 | 若要產生預先簽章的 URL,請使用下列格式從瀏覽器或 API 用戶端 (例如 Postman
將 | 應用程式擁有者 |
檢查結果。 | 預期的結果是您應該會收到 301 (移動永久) 重新導向狀態碼。此回應將包含預先簽章的 URL,該 URL 應會自動啟動測試檔案的下載。 | 測試工程師 |
任務 | 描述 | 所需的技能 |
---|---|---|
銷毀 API Gateway、Amazon S3 和 Lambda 資源。 | 若要刪除資源,請使用下列命令:
| AWS 管理員、雲端管理員 |
銷毀網路資源。 | 若要刪除網路資源,請使用下列命令:
| AWS 管理員、雲端管理員 |
任務 | 描述 | 所需的技能 |
---|---|---|
銷毀堆疊。 | 若要同時銷毀 VPC 和應用程式堆疊,請使用下列命令:
| AWS 管理員、雲端管理員 |
清空並刪除 Amazon S3 儲存貯體。 | 清空並刪除物件 Amazon S3 儲存貯體,以及預設不會刪除的日誌 Amazon S3 儲存貯體。 Amazon S3 儲存貯體名稱為 如果您偏好使用 AWS Command Line Interface (AWS CLI) 刪除儲存貯體,請使用下列命令:
將 | AWS 管理員、雲端管理員 |
相關資源
AWS 部落格