

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# AWS SAM テンプレートを使用して API アクセスを制御する
<a name="serverless-controlling-access-to-apis"></a>

API Gateway API へのアクセスを制御すると、サーバーレスアプリケーションの安全性を担保し、有効化されている認証を通じてのみアクセスが行われることを保証できます。 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 `AWS::Serverless::HttpApi` リソースタイプでは、JSON Web トークン (JWT) 発行者として Amazon Cognito を使用できます。
+ **Lambda オーソライザー** - Lambda オーソライザー (これまで *カスタムオーソライザー* と呼ばれていたもの) は、API へのアクセスを制御するためにユーザーが提供する Lambda 関数です。API が呼び出されると、クライアントアプリケーションが提供するリクエストコンテキストまたは認可トークンによって、この Lambda 関数が呼び出されます。Lambda 関数は、発信者がリクエストされたオペレーションの実行を許可されているかどうかについて応答します。

  `AWS::Serverless::HttpApi` と `AWS::Serverless::Api` リソースタイプの両方が Lambda オーソライザーをサポートします。

  `AWS::Serverless::HttpApi` での Lambda オーソライザーの詳細については、*API Gateway デベロッパーガイド*の「[AWS Lambda オーソライザーを使用する](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html)」で HTTP API について参照してください。`AWS::Serverless::Api` での Lambda オーソライザーの詳細については、*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 認証情報を使用して認証される必要があります。API の呼び出しは、API 発信者を表す IAM ユーザー、ユーザーが含まれる IAM グループ、またはユーザーが引き受ける IAM ロールに IAM ポリシーがアタッチされていなければ成功しません。

  IAM 許可をサポートするのは、`AWS::Serverless::Api` リソースタイプのみです。

  詳細については、*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 のクライアントは、まずユーザーをユーザープールにサインインし、ユーザーのアイデンティティまたはアクセストークンを取得する必要があります。その後、返されたトークンの 1 つを使用して、クライアントが API を呼び出します。API コールは、必要なトークンが有効な場合にのみ成功します。

  `AWS::Serverless::Api` リソースタイプが Amazon Cognito ユーザープールをサポートします。`AWS::Serverless::HttpApi` リソースタイプは、JWT 発行者としての Amazon Cognito の使用をサポートします。

  詳細については、*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 へのアクセス権を付与するためにアプリケーションデベロッパーのお客様に配信する、英数字の文字列値です。

  API キーをサポートするのは、`AWS::Serverless::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 を呼び出せるかどうかを制御します。

  API Gateway API へのアクセスを制御するメカニズムとしてのリソースポリシーをサポートするのは、`AWS::Serverless::Api` リソースタイプのみです。

  リソースポリシーの詳細については、*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 オーソライザー** - [OpenID Connect (OIDC)](https://openid.net/specs/openid-connect-core-1_0.html) および [OAuth 2.0](https://oauth.net/2/) フレームワークの一部として JWT を使用して、API へのアクセスを制御できます。API Gateway は、クライアントが API リクエストと共に送信する JWT を検証し、トークン検証、およびオプションでトークン内のスコープに基づいて、リクエストを許可または拒否します。

  OAuth 2.0/JWT オーソライザーをサポートするのは、`AWS::Serverless::HttpApi` リソースタイプのみです。

  詳細については、*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 API へのアクセスを制御するために選択するメカニズムは、いくつかの要因に応じて異なります。例えば、認可またはアクセスコントロールが設定されていないグリーンフィールドプロジェクトの場合は、Amazon Cognito ユーザープールが最適なオプションになり得ます。ユーザープールのセットアップ時には、認証とアクセスコントロールがどちらも自動的にセットアップされるからです。

ただし、アプリケーションで認証がすでにセットアップされている場合は、Lambda オーソライザーの使用が最適なオプションになり得ます。これは、既存の認証サービスを呼び出し、レスポンスに基づいてポリシードキュメントを返すことができるためです。また、アプリケーションに、ユーザープールがサポートしないカスタム認証またはアクセスコントロールロジックが必要な場合は、Lambda オーソライザーが最適なオプションになり得ます。

使用するメカニズムを選択したら、 を使用してそのメカニズムを使用するようにアプリケーション AWS SAM を設定する方法については、 [例](#serverless-controlling-access-to-apis-examples)の対応するセクションを参照してください。

## エラーレスポンスのカスタマイズ
<a name="serverless-controlling-access-to-apis-responses"></a>

を使用して AWS SAM 、一部の API Gateway エラーレスポンスの内容をカスタマイズできます。カスタマイズされた API Gateway レスポンスをサポートするのは、`AWS::Serverless::Api` リソースタイプのみです。

API Gateway レスポンスの詳細については、*API Gateway デベロッパーガイド*の「[API Gateway でのゲートウェイレスポンス](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-gatewayResponse-definition.html)」を参照してください。カスタマイズされたレスポンスの例については、「[のカスタマイズされたレスポンスの例 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)