

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

# 使用公有端點保護工作負載
<a name="security-public-endpoints"></a>

對於可公開存取的工作負載，AWS 提供了許多有助於降低特定風險的功能和服務。本節涵蓋應用程式使用者的身分驗證和授權，以及保護 API 端點。

## 身分驗證和授權
<a name="authentication"></a>

身分驗證與身分相關，授權涉及動作。使用身分驗證來控制誰可以調用 Lambda 函數，然後使用授權來控制調用者可以執行的動作。對於許多應用程式，IAM 足以管理這兩個控制機制。

對於具有外部使用者的應用程式 (例如 Web 或行動應用程式)，通常使用 [JSON Web 權杖](https://jwt.io/introduction/) (JWT) 來管理身分驗證和授權。與傳統的伺服器型密碼管理不同，JWT 在每次請求時都會從用戶端傳遞。它們是一種加密的安全方式，可使用從用戶端傳遞的資料來驗證身分和宣告。對於 Lambda 型應用程式，這可讓您保護對每個 API 端點的每次呼叫，而無需依賴中央伺服器進行身分驗證。

您可以[使用 Amazon Cognito 實作 JWT](https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-using-tokens-with-identity-providers.html)。Amazon Cognito 是一種使用者目錄服務，可以處理註冊、身分驗證、帳戶復原及其他常見帳戶管理操作。[Amplify Framework](https://docs.amplify.aws/start/getting-started/auth/q/integration/react) 提供了一些程式庫，可簡化將此服務整合到前端應用程式的程序。您也可以考慮使用第三方合作夥伴服務，例如 [Auth0](https://auth0.com/)。

鑑於身分提供者服務的關鍵安全角色，請務必使用專業工具來保護您的應用程式。不建議您自己編寫服務，來處理身分驗證或授權。自訂程式庫中的任何漏洞都可能對您的工作負載及其資料的安全性產生重大影響。

## 保護 API 端點
<a name="api-endpoints"></a>

對於無伺服器應用程式，公開為後端應用程式提供服務的偏好方式是使用 Amazon API Gateway。這可協助您保護 API 免受惡意使用者或流量激增的侵害。

API Gateway 為無伺服器開發人員提供兩種端點類型：[REST API](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-rest-api.html) 和 [HTTP API](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api.html)。兩者都支援[使用 AWS Lambda、IAM 或 Amazon Cognito 進行授權](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-use-lambda-authorizer.html)。使用 IAM 或 Amazon Cognito 時，會評估傳入請求，如果這些請求缺少所需的權杖或包含無效的身分驗證，則請求會遭到拒絕。您無需為這些請求付費，並且這些請求不計入任何限流配額。

公有網際網路上的任何人皆可存取未驗證的 API 路由，因此建議您限制使用未驗證的 API。如果必須使用未進行身分驗證的 API，請務必保護這些 API 免受常見風險，例如[拒絕服務](https://en.wikipedia.org/wiki/Denial-of-service_attack) (DoS) 攻擊。[將 AWS WAF 套用](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-control-access-aws-waf.html) 至這些 API，有助於保護應用程式免受 SQL injection 隱碼攻擊和跨網站指令碼 (XSS) 攻擊。使用 API 金鑰時，API Gateway 還會在 AWS 帳戶層級和每個用戶端層級實作[限流](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-request-throttling.html)。

在許多情況下，未驗證的 API 提供的功能可以透過替代方式來實現。例如，Web 應用程式可以向未登入的使用者提供來自 DynamoDB 資料表的客戶零售店清單。此請求可能源自前端 Web 應用程式或任何其他呼叫 URL 端點的來源。此圖表比較了以下三種解決方案：

![\[安全營運圖 5\]](http://docs.aws.amazon.com/zh_tw/lambda/latest/dg/images/security-ops-figure-5.png)


1. 網際網路上的任何人都可以呼叫此未驗證的 API。在拒絕服務攻擊中，可能會耗盡基礎資料表上的 API 限流限制、Lambda 並行或 DynamoDB 佈建讀取容量。

1. 在 API 端點前面使用適當的[存留時間](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Expiration.html) (TTL) 組態的 CloudFront 分佈將承受 DoS 攻擊中的大部分流量，而無需變更用於擷取資料的底層解決方案。

1. 或者，對於很少變更的靜態資料，CloudFront 分佈可以提供來自 Amazon S3 儲存貯體的資料。