LoginSignup
13
9

More than 5 years have passed since last update.

Auth0 カスタムオーソライザーを使用してAWS API Gateway Endpointへセキュアにアクセスする (1/2)

Last updated at Posted at 2018-03-01

はじめに

このブログは、Auth0のSecure AWS API Gateway Endpoints Using Custom Authorizerを日本語化したものです(英語版のPart 1 およびPart 2の内容です)。

AWSを使用すると、LambdaAPI Gateway、およびJavaScriptクライアントをフロントエンドに使用した、強力でServerless でスケーラビリティの高いAPIとアプリケーションを作成することができます。

Serverless アプリケーションは、カスタムコードをコンピューティングサービスとして実行し、サービスをホストするオペレーティング環境を維持する必要はありません。 代わりに、AWS Lambdawebtask.ioのようなサービスがあなたの代わりにコードを実行します。

API Gatewayは、Lambda ファンクションの前段にサービスレイヤーを追加し、セキュリティを拡張し、入力/出力時のメッセージ変換を管理し、スロットリングや監査等の機能を提供することで、Lambdaの機能を拡張します。 Serverless アプローチは、スケールアウトやフォールトトレランスのような懸念事項がコードを実行するコンピューティングサービスの責任になるため、運用上の要求事項を簡素化されます。

このチュートリアルでは、APIゲートウェイを使用してAPIを設定方法、Lamdba ファンクション (カスタムオーソライザを含む)の作成、および設定してAPIエンドポイントを保護し、ユーザーがAPIにアクセスするために必要なAccess TokenをAuth0から取得できるための認可フローを実装する方法を説明します。

より具体的には、カスタムオーソライザーは:

  1. APIに対するアクセスに対するリクエストのauthorizationヘッダーを介してAccess Tokenがパスされたことを確認します
  2. JWKSエンドポイント経由で取得した公開鍵を使用し、Access TokenのRS256署名を検証します
  3. Access Tokenに必要なIssuer iss および Audience aud Claim情報があることを確認します

OAuth 2.0は初めてですか? OAuth 2.0の紹介をご覧ください。

さて、このチュートリアルでは、以下のセクションに分けて解説をしています。

1章 - Auth0 を設定する
2章 - AWS API Gateway のセットアップおよび導入
3章 - カスタムオーソライザー の作成
4章 - カスタムオーソライザーを使用してAPIを保護する

API Gatewayカスタムオーソライザーの動作

Amazonによると、API Gatewayカスタムオーソライザーは、「OAuthやSAMLなどのベアラートークン認証方法を使用して、APIへのアクセス制御を提供するLambda関数制御を提供するLambda関数」です。

どのような場合でも誰か(もしくはプログラム)がAPIを呼び出す際には、API GatewayはAPIにカスタムオーソライザーが設定してあるかどうかをチェックします。

APIにカスタムオーソライザーが設定されている場合には、API Gatewayはカスタムオーソライザーを呼び出し、受信したリクエストヘッダーから抽出したAuthorizationトークンを提供します。

カスタムオーソライザーはJWTの検証、リクエストを認可するIAMポリシーなど、異なるタイプの認可ストラテジで実装することができます。もしポリシーが無効、もしくは承認されなかった場合には、APIコールは失敗します。

有効なポリシーの場合、APIは返されたポリシーをキャッシュし、それを受信したトークンに関連付けし、現在および将来の要求に使用します。ポリシーをキャッシュをする時間は設定可能です。デフォルトは300秒、最大キャッシュ時間は3600秒です(値に0を設定することでキャッシュを無効化することもできます)。

はじめる前に

このチュートリアルを始める前に、AWSアカウントでAWSにサインアップする必要があります。これにより、このチュートリアルで使用するAWSのすべての機能 (API GatewayやLambdaなど)にアクセスできます。新規登録メンバーはAWSに12ヶ月間無償でアクセスすることができます。

参考文献

API認可 (API Authorization)
Auth0 Access Tokenを取得する
JSON Web Key Sets (JWKS)

1. Auth0 にAPIを登録する

正常に認可されたクライアントが使用するAPIを構成する必要があります。Auth0 管理DashboardのAPIsセクションから構成することができます。

CREATE API をクリックして、連携のための新しいAPIを作成します。

api-1.png

以下の項目に対して、値の入力を求められます:

パラメーター
Name APIに対するわかりやすい名称。この値はAuth0 APIs画面でリスト表示されます
Identifier APIの論理識別子 (この識別子のフォーマットにはURL https://your-api-gateway のように定義することを推奨します)
Signing Algorithm 発行されたAccess Tokenを署名する際にAuth0が使用するアルゴリズム

CREATE をクリックして、次に進みます.

api-2.png

新しく作成したAPIの詳細については、Setting ページを参照してください。

api-3.png

APIを作成すると、APIで使用するためのNon Interactive Clientも作成されます。このクライアントは、API設定のNon Interactive Clientsタブで Authorized とリスト表示されます。さらにこのチュートリアルの3章で必要となるため、Client IDを書き留めておいてください。

2. API Gateway APIのインポートおよび導入

チュートリアルのこの章については、AWSの公式例を基に作成されています。詳しくは[こちら]をご参照下さい。

AWS API Gatewayチュートリアルを行うこの章では、API Gatewayを使用して、以下のようなAPIのインポート方法および管理方法を紹介いたします:

・API GatewayにAPIをインポートする
・ImportしたAPIのテスト
・どのようなフロントエンド・クライアントでも使用できるAPIのデプロイ
・デプロイしたAPIのテスト

このチュートリアルの後半で、Auth0 Access Tokenを受理したカスタムオーソライザーを使用してAPIのエンドポイントをそのようにセキュアにするか、同様にAPIをフロントエンドJavascriptクライアントに統合するかを説明いたします。

Pets APIのインポートおよび構成

AWSアカウントでAWSにログインし、トップナビゲーションバーにあるサービスドロップダウンメニューを使用して、API Gatewayコンソールに移動します。

以前APIを作成したことがある場合は、単にAPI Gatewayコンソールが表示されるので、APIの作成をクリックし、APIの例を選択します。

まだAPI Gatewayを使用してAPIを作成したことがない場合には、以下の画面が表示されます。今すぐ始めるをクリックして次に進みます。

スクリーンショット 2018-03-01 16.16.58.png

「Amazon API Gatewayへようこそ。...」というポップアップメッセージが表示されます。OKをクリックして次に進みます。

スクリーンショット 2018-03-01 16.21.34.png

新しいAPIの作成フォームで、デフォルトAPIの例が選択されており、エディターにサンプルAPIが定義されていると思います。これからのチュートリアルではこのAPIを使用します。インポートをクリックしてAPIを作成します。

スクリーンショット 2018-03-01 16.23.27.png

作成が完了すると、AWSにAPIが作成され、提供されたデータが入力されたことを示すメッセージが表示されます。

スクリーンショット 2018-03-01 16.25.01.png

APIにはすでに関連したメソッドが存在することに注意して下さい(つまりGETPOST)。リソースツリーからメソッド名をクリックすることで、メソッドの詳細を表示したり、設定の変更をしたり、メソッドの呼び出しをテストすることができます。

スクリーンショット 2018-03-01 16.26.22.png

APIをテストする

APIを正常にインポートできたので、全てが期待通りに動作するかを確認するために、いくつかテストを実行してみましょう。この演習では、API自体のいくつかの機能についても説明します。

例として、/pets配下のPOSTをクリックします。POSTメソッドの構造と振る舞いの概要を示、メソッドの実行ウィンドウが表示されます。

メソッドリクエストとメソッドレスポンス: フロントエンドとのAPIインターフェース
統合リクエストと統合レスポンス: バックエンドとのAPIインターフェース

この領域を使用して、作成したAPIをテストできます。

テストをクリックします(ページ中央にある、細長いクラアント領域にあります)。

スクリーンショット 2018-03-01 16.28.37.png

/pets - POST - メソッドテスト ページにリダイレクトされます。

スクリーンショット 2018-03-01 16.30.51.png

画面を底部までスクロールし、リクエスト本文に以下の文字列を入力します:

{"type": "dog", "price": 249.99}

リクエスト本文はデータベースに追加したいペットの属性、およびペットの価格を示しています。

スクリーンショット 2018-03-01 16.32.47.png

テストをクリックします。

テスト結果はページの右側に表示されます。

スクリーンショット 2018-03-01 17.40.04.png

APIをデプロイする

上記で完了したテストは、API Gatewayコンソールを使用して実行しました。異なるクライアントでAPIを使用するためには、APIをステージ環境にデプロイする必要があります。これはアクションメニューのAPIのデプロイオプションから実行することができます。

以下のパラメーターについて入力を求められます:

パラメーター
デプロイされるステージ [新しいステージ]を選択
ステージ名 ステージの名称を入力します
ステージの説明 ステージの説明を入力します
デプロイメントの説明 APIデプロイメントの説明を入力します

適切な値の入力が完了したらデプロイをクリックします。

スクリーンショット 2018-03-01 17.43.41.png

デプロイメントのテスト

APIが正常にデプロイされると、Testステージエディターにリダイレクトされます。ここでAPIが正常にデプロイできたかどうかをテストすることができます。

Testステージエディターの一番上にある青いバナーにURL の呼び出しが表示されています。これはAPIのGETエンドポイントを呼び出すためのURLです。

スクリーンショット 2018-03-01 17.44.38.png

GET /メソッドリクエスト画面に表示されたURLをクリックします。すると以下のようなレスポンスが表示されるはずです:

aws-pt1-8.png

次に、/pets/{petId}GETメソッドをコールします。ステージページでTestツリーを展開して下さい。

スクリーンショット 2018-03-01 22.05.09.png

画面の一番上の青いバナーにURL の呼び出しが表示されています。最後の部分{pedID}はパス変数を表しています。この変数を1に置き換え、ブラウザを使用して新しいURLにアクセスします。次のJSONペイロードでHTTP 200リクエストを受信するはずです:

{
  "id": 1,
  "type": "dog",
  "price": 249.99
}

スクリーンショット 2018-03-01 22.07.52.png

第2章のまとめ

AWS API Gatewayチュートリアルの第2章では、以下の内容をカバーしました:

・API GatewayにAPIをインポートする
・インポートしたAPIのテスト
・どのようなフロントエンド・クライアントでも使用できるAPIのデプロイ
・デプロイしたAPIのテスト

これでAPI Gatewayによって管理された完全に機能するAPIが完成しました。

パート2(2/2)に続きます。

パート2では、以下の項目について説明をします。
3章 - Auth0 カスタムオーソライザーの作成
4章 - カスタムオーソライザーを使用してAPIを保護する

パート2へ行く

13
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
9