API Gateway API へのアクセスの制御 - AWS Serverless Application Model

API Gateway API へのアクセスの制御

Amazon API Gateway API にアクセスできるユーザーを制御するには、AWS SAM テンプレートで認証を有効にすることができます。

AWS SAM は API Gateway API へのアクセスを制御する複数のメカニズムをサポートしています。サポートされているメカニズムのセットは、AWS::Serverless::HttpApiAWS::Serverless::Api のリソースタイプ間で異なります。

以下の表は、各リソースタイプがサポートするメカニズムの要約です。

アクセスを制御するためのメカニズム AWS::Serverless::HttpApi AWS::Serverless::Api
Lambda オーソライザー
IAM 許可
Amazon Cognito user pools ✓ *
API キー
リソースポリシー
OAuth 2.0/JWT オーソライザー

* AWS::Serverless::HttpApi リソースタイプでは、JSON Web トークン (JWT) 発行者として Amazon Cognito を使用できます。

  • Lambda オーソライザー - Lambda オーソライザー (これまで カスタムオーソライザー と呼ばれていたもの) は、API へのアクセスを制御するためにユーザーが提供する Lambda 関数です。API が呼び出されると、クライアントアプリケーションが提供するリクエストコンテキストまたは認証トークンによって、この Lambda 関数が呼び出されます。Lambda 関数は、発信者がリクエストされたオペレーションの実行を許可されているかどうかについて応答します。

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

    AWS::Serverless::HttpApi での Lambda オーソライザーの詳細については、API Gateway デベロッパーガイドの「AWS Lambda オーソライザーを使用する」で HTTP API について参照してください。AWS::Serverless::Api での Lambda オーソライザーの詳細については、API Gateway デベロッパーガイドの「API Gateway Lambda オーソライザーを使用する」を参照してください。

    どちらか一方のリソースタイプ向けの Lambda オーソライザーの例については、「Lambda オーソライザーの例」を参照してください。

  • IAM 許可 - AWS Identity and Access Management (IAM) 許可を使用して、API を呼び出すことができるユーザーを制御できます。API を呼び出すユーザーは、IAM 認証情報を使用して認証される必要があります。API の呼び出しは、API 発信者を表す IAM ユーザー、ユーザーが含まれる IAM グループ、またはユーザーが引き受ける IAM ロールに IAM ポリシーがアタッチされていなければ成功しません。

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

    詳細については、API Gateway デベロッパーガイドの「IAM アクセス許可により API へのアクセスを制御する」を参照してください。例については、IAM 許可の例 を参照してください。

  • 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 へのアクセスを制御する」を参照してください 例については、Amazon Cognito ユーザープールの例 を参照してください。

  • API キー - API キーは、API へのアクセス権を付与するためにアプリケーションデベロッパーのお客様に配信する、英数字の文字列値です。

    API キーをサポートするのは、AWS::Serverless::Api リソースタイプのみです。

    詳細については、API Gateway デベロッパーガイドの「API キーを使用した使用量プランの作成と使用」を参照してください。API キーの例については、「API キーの例」を参照してください。

  • リソースポリシー - リソースポリシーは、API Gateway API にアタッチできる JSON ポリシードキュメントです。リソースポリシーは、指定されたプリンシパル (通常は IAM のユーザーまたはロール) が API を呼び出せるかどうかを制御します。

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

    リソースポリシーの詳細については、API Gateway デベロッパーガイドの「API Gateway リソースポリシーを使用して API へのアクセスを制御する」を参照してください。リソースポリシーの例については、「リソースポリシーの例」を参照してください。

  • OAuth 2.0/JWT オーソライザー - OpenID Connect (OIDC) および OAuth 2.0 フレームワークの一部として JWT を使用して、API へのアクセスを制御できます。API Gateway は、クライアントが API リクエストと共に送信する JWT を検証し、トークン検証、およびオプションでトークン内のスコープに基づいて、リクエストを許可または拒否します。

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

    詳細については、API Gateway デベロッパーガイドの「JWT オーソライザーを使用した HTTP API へのアクセスの制御」を参照してください。例については、OAuth 2.0/JWT オーソライザーの例 を参照してください。

アクセスを制御するためのメカニズムの選択

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

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

使用するメカニズムを選択したら、そのメカニズムを使用するために AWS SAM を使用してアプリケーションを設定する方法について、「」の対応するセクションを参照してください。

エラーレスポンスのカスタマイズ

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

API Gateway レスポンスの詳細については、API Gateway デベロッパーガイドの「API Gateway でのゲートウェイレスポンス」を参照してください。カスタマイズされたレスポンスの例については、「カスタマイズされたレスポンスの例」を参照してください。