

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

# 使用 AWS SAM 範本控制 API 存取
<a name="serverless-controlling-access-to-apis"></a>

控制對 API Gateway APIs存取有助於確保您的無伺服器應用程式安全，而且只能透過您啟用的授權存取。您可以在 AWS SAM 範本中啟用授權，以控制誰可以存取您的 API Gateway APIs。

AWS SAM 支援多種機制來控制對 API Gateway APIs存取。支援的機制集在 `AWS::Serverless::HttpApi`和 `AWS::Serverless::Api` 資源類型之間有所不同。

下表摘要說明每個資源類型支援的機制。


| 控制存取的機制 | AWS::Serverless::HttpApi | AWS::Serverless::Api | 
| --- | --- | --- | 
| Lambda 授權方 | ✓ | ✓ | 
| IAM 許可 |  | ✓ | 
| Amazon Cognito 使用者集區 | ✓ \$1 | ✓ | 
| API 金鑰 |  | ✓ | 
| 資源政策 |  | ✓ | 
| OAuth 2.0/JWT 授權方 | ✓ |  | 

\$1 您可以使用 Amazon Cognito 做為具有 `AWS::Serverless::HttpApi` 資源類型的 JSON Web Token (JWT) 發行者。
+ **Lambda 授權方** – Lambda 授權方 （先前稱為*自訂授權方*) 是您提供的 Lambda 函數，用於控制對 API 的存取。呼叫 API 時，會使用用戶端應用程式提供的請求內容或授權字符叫用此 Lambda 函數。Lambda 函數會回應發起人是否有權執行請求的操作。

  `AWS::Serverless::HttpApi` 和 `AWS::Serverless::Api` 資源類型都支援 Lambda 授權方。

  如需使用 的 Lambda 授權方詳細資訊`AWS::Serverless::HttpApi`，請參閱 *API Gateway 開發人員指南*中的[使用 HTTP APIs的授權 AWS Lambda 方](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html)。如需搭配 使用 Lambda 授權方的詳細資訊`AWS::Serverless::Api`，請參閱《 [API Gateway 開發人員指南》中的使用 API Gateway Lambda 授權方](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-use-lambda-authorizer.html)。 **

  如需任一資源類型的 Lambda 授權方範例，請參閱 [的 Lambda 授權方範例 AWS SAM](serverless-controlling-access-to-apis-lambda-authorizer.md)。

  
+ **IAM 許可** – 您可以使用 [AWS Identity and Access Management (IAM) 許可](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_controlling.html)來控制誰可以叫用您的 API。呼叫 API 的使用者必須使用 IAM 登入資料進行身分驗證。只有在連接至 IAM 使用者的 IAM 政策代表 API 呼叫者、包含使用者的 IAM 群組，或使用者擔任的 IAM 角色時，呼叫 API 才會成功。

  只有 `AWS::Serverless::Api` 資源類型支援 IAM 許可。

  如需詳細資訊，請參閱《 [API Gateway 開發人員指南》中的使用 IAM 許可控制對 API 的存取](https://docs.aws.amazon.com/apigateway/latest/developerguide/permissions.html)。 **如需範例，請參閱 [的 IAM 許可範例 AWS SAM](serverless-controlling-access-to-apis-permissions.md)。
+ **Amazon Cognito 使用者集**區 – Amazon Cognito 使用者集區是 Amazon Cognito 中的使用者目錄。API 的用戶端必須先登入使用者集區，並取得使用者的身分或存取權杖。然後，用戶端會使用其中一個傳回的字符來呼叫您的 API。只有在所需的字符有效時，API 呼叫才會成功。

  `AWS::Serverless::Api` 資源類型支援 Amazon Cognito 使用者集區。`AWS::Serverless::HttpApi` 資源類型支援使用 Amazon Cognito 做為 JWT 發行者。

  如需詳細資訊，請參閱《*API Gateway 開發人員指南*》中的[使用 Amazon Cognito 使用者集區作為授權方來控制對 REST API 的存取](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-integrate-with-cognito.html)。如需範例，請參閱 [的 Amazon Cognito 使用者集區範例 AWS SAM](serverless-controlling-access-to-apis-cognito-user-pool.md)。
+ **API 金鑰** – API 金鑰是您分發給應用程式開發人員客戶的英數字串值，以授予 API 的存取權。

  只有 `AWS::Serverless::Api` 資源類型支援 API 金鑰。

  如需 API 金鑰的詳細資訊，請參閱*《 API Gateway 開發人員指南*》中的[使用 API 金鑰建立和使用用量計劃](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-api-usage-plans.html)。如需 API 金鑰的範例，請參閱 [的 API 金鑰範例 AWS SAM](serverless-controlling-access-to-apis-keys.md)。
+ **資源政策** – 資源政策是您可以連接到 API Gateway API 的 JSON 政策文件。使用資源政策來控制指定的委託人 （通常是 IAM 使用者或角色） 是否可以叫用 API。

  只有 `AWS::Serverless::Api` 資源類型支援資源政策做為控制 API Gateway APIs 存取的機制。

  如需資源政策的詳細資訊，請參閱《 [API Gateway 開發人員指南》中的使用 API Gateway 資源政策控制對 API 的存取](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-resource-policies.html)。 **如需資源政策的範例，請參閱 [的資源政策範例 AWS SAM](serverless-controlling-access-to-apis-resource-policies.md)。
+ **OAuth 2.0/JWT 授權方** – 您可以使用 JWTs做為 [OpenID Connect (OIDC)](https://openid.net/specs/openid-connect-core-1_0.html) 和 [OAuth 2.0](https://oauth.net/2/) 架構的一部分，以控制對 APIs存取。API Gateway 會驗證用戶端隨 API 請求提交JWTs，並根據權杖驗證以及可選擇權杖中的範圍來允許或拒絕請求。

  只有 `AWS::Serverless::HttpApi` 資源類型支援 OAuth 2.0/JWT 授權方。

  如需詳細資訊，請參閱《*API Gateway 開發人員指南*》中的[使用 JWT 授權方控制對 HTTP API 的存取](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-jwt-authorizer.html)。如需範例，請參閱 [的 OAuth 2.0/JWT 授權方範例 AWS SAM](serverless-controlling-access-to-apis-oauth2-authorizer.md)。

## 選擇控制存取的機制
<a name="serverless-controlling-access-to-apis-choices"></a>

您選擇用於控制 API Gateway APIs機制取決於幾個因素。例如，如果您有一個未設定授權或存取控制的綠地專案，則 Amazon Cognito 使用者集區可能是您的最佳選項。這是因為當您設定使用者集區時，也會自動設定身分驗證和存取控制。

不過，如果您的應用程式已設定身分驗證，則使用 Lambda 授權方可能是您的最佳選項。這是因為您可以呼叫現有的身分驗證服務，並根據回應傳回政策文件。此外，如果您的應用程式需要使用者集區不支援的自訂身分驗證或存取控制邏輯，則 Lambda 授權方可能是您的最佳選項。

當您選擇要使用的機制時，請參閱 中的對應章節，[範例](#serverless-controlling-access-to-apis-examples)了解如何使用 AWS SAM 設定您的應用程式以使用該機制。

## 自訂錯誤回應
<a name="serverless-controlling-access-to-apis-responses"></a>

您可以使用 AWS SAM 來自訂某些 API Gateway 錯誤回應的內容。只有 `AWS::Serverless::Api` 資源類型支援自訂 API Gateway 回應。

如需 API Gateway 回應的詳細資訊，請參閱[《 API Gateway 開發人員指南](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-gatewayResponse-definition.html)*》中的 API Gateway* 回應。如需自訂回應的範例，請參閱 [的自訂回應範例 AWS SAM](serverless-controlling-access-to-apis-customize-response.md)。

## 範例
<a name="serverless-controlling-access-to-apis-examples"></a>
+ [的 Lambda 授權方範例 AWS SAM](serverless-controlling-access-to-apis-lambda-authorizer.md)
+ [的 IAM 許可範例 AWS SAM](serverless-controlling-access-to-apis-permissions.md)
+ [的 Amazon Cognito 使用者集區範例 AWS SAM](serverless-controlling-access-to-apis-cognito-user-pool.md)
+ [的 API 金鑰範例 AWS SAM](serverless-controlling-access-to-apis-keys.md)
+ [的資源政策範例 AWS SAM](serverless-controlling-access-to-apis-resource-policies.md)
+ [的 OAuth 2.0/JWT 授權方範例 AWS SAM](serverless-controlling-access-to-apis-oauth2-authorizer.md)
+ [的自訂回應範例 AWS SAM](serverless-controlling-access-to-apis-customize-response.md)