使用 Transfer Family、Amazon Cognito 和 GuardDuty 保護檔案傳輸 - AWS 方案指引

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用 Transfer Family、Amazon Cognito 和 GuardDuty 保護檔案傳輸

Manoj Kumar,Amazon Web Services

Summary

此解決方案可協助您使用 透過 SFTP 伺服器安全地傳輸檔案 AWS Transfer Family。其中包括透過 Amazon GuardDuty 功能 Malware Protection for S3 的自動化惡意軟體掃描功能。它專為需要安全地與外部各方交換檔案,並在處理之前驗證所有傳入檔案都已掃描惡意軟體的組織而設計。

此模式隨附的基礎設施即程式碼 (IaC) 範本可協助您部署下列項目:

  • 透過 使用 Amazon Cognito 身分驗證的安全 SFTP 伺服器 AWS Lambda

  • Amazon Simple Storage Service (Amazon S3) 儲存貯體,用於已掃描惡意軟體的上傳和傳入檔案

  • 虛擬私有雲端 (VPC) 型架構,具有跨多個可用區域的公有和私有子網路

  • 輸入和輸出流量的 IP 型存取控制,具有可設定的允許和拒絕清單

  • 透過 GuardDuty 自動化惡意軟體掃描

  • 透過 Amazon EventBridge 和 Lambda 以掃描結果為基礎的智慧型檔案路由

  • 透過 Amazon Simple Notification Service (Amazon SNS) 即時通知安全事件

  • 透過 AWS Key Management Service (AWS KMS) 加密 Amazon S3 儲存貯體和 Lambda 環境變數

  • 無需網際網路暴露即可存取的 Amazon Virtual Private Cloud (Amazon VPC) 端點

  • 透過 Amazon CloudWatch 整合進行全面記錄

先決條件和限制

先決條件

  • 作用中 AWS 帳戶

  • AWS Identity and Access Management (IAM) 中執行此模式所述動作的許可,包括部署佈建 IAM 角色的 AWS CloudFormation 範本

  • GuardDuty,在目標帳戶中啟用

  • 目標帳戶中啟用的 S3 惡意軟體防護

  • 服務配額可讓您在目標帳戶中建立下列項目:

    • 一個 VPC

    • 一個私有子網路

    • 一個公有子網路

    • 三個彈性 IP 地址

    • 足夠的 Lambda 並行限制

  • 安全相關通知的有效電子郵件地址

  • (選用) 您要允許或拒絕的 IP 地址或 CIDR 範圍清單

  • (選用) AWS Command Line Interface (AWS CLI),已安裝設定

限制

  • S3 的惡意軟體防護受到配額限制,例如檔案大小上限。如需詳細資訊,請參閱《GuardDuty 文件》中的 S3 惡意軟體防護配額Amazon S3 功能的支援能力

  • 此解決方案僅使用 Amazon Cognito 使用者名稱和密碼身分驗證。此範本不支援憑證型或其他身分驗證方法。根據預設,此解決方案不會設定多重要素驗證 (MFA)。

  • 解決方案只會透過安全群組實作 IP 型存取控制。

架構

下列架構圖顯示在此模式中部署的資源。此解決方案使用 Amazon Cognito 進行使用者身分驗證和授權。 AWS Transfer Family SFTP 伺服器用於檔案上傳。檔案存放在 Amazon S3 儲存貯體中,Amazon GuardDuty 會掃描檔案是否有惡意軟體。如果偵測到惡意軟體,Amazon SNS 會傳送電子郵件通知。

使用 GuardDuty 和 Cognito 安全地將檔案傳輸至 Amazon S3 儲存貯體。

該圖顯示以下工作流程:

  1. 使用者連線到其中的 SFTP 伺服器端點 AWS Transfer Family。這會使用 Amazon Cognito 使用者集區啟動身分驗證程序。

  2. Lambda 函數會啟動身分驗證和授權程序,並使用 Amazon Cognito 驗證使用者的登入資料。

  3. Lambda 函數會傳回 UploadBucket Amazon S3 儲存貯體做為主目錄。使用者擔任 Transfer Family 伺服器的 IAM 角色,Lambda 函數會通知使用者他們已成功驗證。

  4. 使用者將檔案上傳至 Transfer Family SFTP 伺服器。檔案會存放在 UploadBucket Amazon S3 儲存貯體中。

  5. GuardDuty 會掃描檔案是否有惡意軟體。潛在的掃描結果為 NO_THREATS_FOUNDTHREATS_FOUNDACCESS_DENIEDUNSUPPORTEDFAILED。如需範例結果,請參閱 GuardDuty 文件中的 S3 物件掃描結果

  6. EventBridge 規則會偵測掃描結果事件。

  7. EventBridge 會啟動檔案路由 Lambda 函數。

  8. Lambda 函數會處理事件,並根據掃描結果篩選檔案,如下所示:

    • 具有NO_THREATS_FOUND掃描結果的檔案會傳送至 CleanBucket Amazon S3 儲存貯體。

    • 具有THREATS_FOUND掃描結果的檔案會傳送至 MalwareBucket Amazon S3 儲存貯體。

    • 具有UNSUPPORTED掃描結果的檔案會傳送至 ErrorBucket Amazon S3 儲存貯體。

    • 具有ACCESS_DENIED掃描結果的檔案會傳送至 ErrorBucket Amazon S3 儲存貯體。

    • 具有FAILED掃描結果的檔案會傳送至 ErrorBucket Amazon S3 儲存貯體。

    所有檔案都會使用 加密 AWS KMS key。

  9. 如果檔案已傳送至 MalwareBucket Amazon S3 儲存貯體,Lambda 函數會啟動 Amazon SNS 主題。Amazon SNS 主題會將電子郵件通知傳送至您設定的電子郵件地址。

工具

AWS 服務

  • Amazon CloudWatch 可協助您 AWS 即時監控 AWS 資源的指標,以及您在其上執行的應用程式。

  • Amazon Cognito 為 Web 和行動應用程式提供身分驗證、授權和使用者管理。

  • Amazon EventBridge 是一種無伺服器事件匯流排服務,可協助您將應用程式與來自各種來源的即時資料連線。例如, AWS Lambda 函數、使用 API 目的地的 HTTP 調用端點,或其他事件匯流排 AWS 帳戶。

  • Amazon GuardDuty 是一項持續的安全監控服務,可分析和處理日誌,以識別 AWS 環境中非預期和可能未經授權的活動。

  • AWS Key Management Service (AWS KMS) 可協助您建立和控制密碼編譯金鑰,以協助保護您的資料。

  • AWS Lambda 是一項運算服務,可協助您執行程式碼,無需佈建或管理伺服器。它只會在需要時執行程式碼並自動擴展,因此您只需按使用的運算時間付費。

  • Amazon Simple Notification Service (Amazon SNS) 可協助您協調和管理發佈者和用戶端之間的訊息交換,包括 Web 伺服器和電子郵件地址。

  • Amazon Simple Storage Service (Amazon S3) 是一種雲端型物件儲存服務,可協助您儲存、保護和擷取任何數量的資料。

  • AWS Transfer Family 可協助您透過 SFTP、FTPS 或 FTP 通訊協定將檔案傳入和傳出 AWS 儲存服務。

  • Amazon Virtual Private Cloud (Amazon VPC) 可協助您在已定義的虛擬網路中啟動 AWS 資源。此虛擬網路與您在自己的資料中心中操作的傳統網路相似,且具備使用 AWS可擴展基礎設施的優勢。

程式碼儲存庫

此模式的程式碼可在 GitHub AWS Transfer Family 和 GuardDuty 惡意軟體掃描解決方案儲存庫中使用。

最佳實務

提供的 CloudFormation 範本旨在整合許多 AWS 最佳實務,例如 IAM 角色和政策的最低權限許可、靜態和傳輸中的加密,以及自動金鑰輪換。對於生產環境,請考慮實作下列其他建議:

  • 為 Amazon Cognito 使用者啟用 MFA

  • 實作AWS Shield分散式拒絕服務 (DDoS) 保護

  • 設定 AWS Config以進行持續合規監控

  • 實作 AWS CloudTrail以進行全面的 API 記錄

  • 設定 Amazon GuardDuty 進行惡意軟體掃描以外的威脅偵測

  • 實作 AWS Security Hub以進行集中式安全管理

  • 使用 AWS Secrets Manager 進行登入資料管理

  • 使用流量鏡像實作網路流量監控

  • 為 Amazon S3 中的敏感資料探索和保護設定 Amazon Macie Amazon S3

  • 實作定期安全性評估和滲透測試

  • 建立正式的事件回應計劃

  • 實作所有元件的自動化修補

  • 定期為管理員進行安全訓練

  • AWS Organizations 設定多帳戶安全管理

史詩

任務描述所需的技能

複製儲存庫。

輸入下列命令,將 AWS Transfer Family 和 GuardDuty 惡意軟體掃描解決方案儲存庫複製到您的本機工作站:

git clone https://github.com/aws-samples/sample-secure-transfer-family-code.git
應用程式開發人員、DevOps 工程師

建立 CloudFormation 堆疊。

  1. 遵循 CloudFormation 文件中的指示,透過 CloudFormation 主控台或透過 建立堆疊AWS CLI。設定下列參數:

    • UploadBucketName - 上傳儲存貯體名稱

    • CleanBucketName - 清除檔案儲存貯體名稱

    • MalwareBucketName - 惡意軟體檔案儲存貯體名稱

    • ErrorBucketName - 錯誤檔案儲存貯體名稱

    • SecurityTeamEmail - 提醒的電子郵件地址

    • VpcCIDR - VPC 的 CIDR 範圍

    • PublicSubnet1CIDR - 公有子網路 1 的 CIDR 範圍

    • PublicSubnet2CIDR - 公有子網路 2 的 CIDR 範圍

    • PrivateSubnet1CIDR - 私有子網路 1 的 CIDR 範圍

    • PrivateSubnet2CIDR - 私有子網路 2 的 CIDR 範圍

    • AllowedIPAddresses - 允許 IP 地址或 CIDR 範圍

    • EnableEgressRules – 如果您想要啟用安全群組的輸出規則,請輸入 true。如果您想要停用輸出規則,請輸入 false

  2. 等待堆疊部署完成。

  3. 在堆疊建立輸出中,記下 SFTP 伺服器端點。您稍後將需要這個值。

雲端管理員、DevOps 工程師
任務描述所需的技能

開啟惡意軟體保護。

  1. 登入 AWS Management Console 並開啟 GuardDuty 主控台

  2. 在導覽窗格中,選擇 S3 的惡意軟體防護

  3. 受保護的儲存貯體區段中,選擇啟用

  4. 輸入 S3 儲存貯體詳細資訊下,輸入 Amazon S3 儲存貯體名稱。或者,選擇瀏覽 S3 以選取儲存貯體。選擇 UploadBucket Amazon S3 儲存貯體。

  5. 字首下,選取 S3 儲存貯體中的所有物件

  6. 標記掃描的物件下,選取標記物件

  7. 服務存取區段中,選擇建立並使用新的服務角色

  8. 選擇 啟用

雲端管理員、AWS 管理員

將使用者新增至使用者集區。

將一或多個使用者新增至 Amazon Cognito 使用者集區。如需說明,請參閱 Amazon Cognito 文件中的管理使用者集區中的使用者。 Amazon Cognito

雲端管理員、AWS 管理員
任務描述所需的技能

連線至 SFTP 伺服器端點。

  1. 輸入下列命令以取得 SFTP 伺服器端點,其中 <stack-name>是 CloudFormation 堆疊的名稱:

    TRANSFER_ENDPOINT=$(aws cloudformation describe-stacks \   --stack-name <stack-name> \   --query 'Stacks[0].Outputs[?OutputKey==`TransferServerEndpoint`].OutputValue' \   --output text)
  2. 輸入下列命令以連線至 SFTP 伺服器:

    sftp user@company.com@$TRANSFER_ENDPOINT
  3. 驗證您收到下列提示:

    sftp>

    這表示您現在可以輸入命令來執行檔案傳輸。

應用程式開發人員、雲端管理員、雲端架構師、DevOps 工程師

故障診斷

問題解決方案

使用者身分驗證失敗

  1. 確認使用者存在於 Amazon Cognito 使用者集區中。

  2. 驗證使用者已確認並啟用。

  3. 確定使用者提供正確的密碼。

  4. 檢查 CloudWatch Logs 中是否有錯誤。

如需可協助您執行這些故障診斷步驟的 AWS CLI 命令清單,請參閱其他資訊一節中的用於故障診斷的實用命令

SFTP 身分驗證失敗

  1. 確認使用者存在於 Amazon Cognito 使用者集區中。

  2. 驗證使用者已確認並啟用。

  3. 確定使用者提供正確的密碼。

  4. 確認 AWS Transfer Family 伺服器的安全群組中允許 IP 地址。

  5. 檢查身分驗證 Lambda 函數日誌中的錯誤。

  6. 確認 的 IAM 角色 AWS Transfer Family 具有正確的許可。

如需可協助您執行這些故障診斷步驟的 AWS CLI 命令清單,請參閱其他資訊一節中的用於故障診斷的實用命令

檔案上傳存取遭拒

  1. 確認 AWS KMS 金鑰許可已正確設定。

  2. 檢查 Amazon S3 儲存貯體政策。

  3. 確認已正確設定 IAM 角色許可。

  4. 確認 VPC 端點已正確設定

  5. 確認 的 IAM 角色 AWS Transfer Family 具有正確的許可。

如需可協助您執行這些故障診斷步驟的 AWS CLI 命令清單,請參閱其他資訊區段中的用於故障診斷的實用命令

無惡意軟體掃描

  1. 在帳戶中啟用 GuardDuty。

  2. 啟用 S3 的惡意軟體防護。

  3. 確認 Amazon EventBridge 規則處於作用中狀態。

  4. 檢查檔案路由 Lambda 函數日誌中的錯誤。

  5. 確認已在 Amazon SNS 中正確設定通知。

如需可協助您執行這些故障診斷步驟的 AWS CLI 命令清單,請參閱其他資訊一節中的用於故障診斷的實用命令

Lambda 函數錯誤

  1. 檢查 VPC 組態。

  2. 確認 VPC 端點已正確設定。

  3. 確認 的 IAM 角色 AWS Transfer Family 具有正確的許可。

  4. 檢查 CloudWatch Logs 中是否有錯誤。

  5. 確認 AWS KMS 金鑰許可已正確設定。

如需可協助您執行這些故障診斷步驟的 AWS CLI 命令清單,請參閱其他資訊區段中的用於故障診斷的實用命令

相關資源

其他資訊

用於故障診斷的實用命令

檢查 CloudFormation 堆疊的狀態:

aws cloudformation describe-stacks \ --stack-name <STACK_NAME>

列出 Amazon Cognito 使用者集區中的所有使用者:

aws cognito-idp list-users \ --user-pool-id <USER_POOL_ID>

檢視 Lambda 函數的日誌:

aws logs describe-log-groups \ --log-group-name-prefix /aws/lambda/

檢查 GuardDuty 的狀態:

aws guardduty list-detectors

檢查安全群組規則:

aws ec2 describe-security-groups \ --group-ids <SECURITY_GROUP_ID> \ --output table

檢查 AWS Transfer Family 伺服器的狀態:

aws transfer describe-server \ --server-id <SERVER_ID>

列出 Amazon S3 儲存貯體中的所有檔案:

aws s3 ls s3://<BUCKET_NAME>/ \ --recursive

檢查 EventBridge 規則的狀態:

aws events describe-rule \ --name <RULE_NAME>