Lambda オーソライザーを設定する - Amazon API Gateway

Lambda オーソライザーを設定する

Lambda 関数を作成したら、Lambda 関数を API のオーソライザーとして設定します。次に、Lambda オーソライザーを呼び出すようにメソッドを設定し、発信者がメソッドを呼び出せるかどうかを判断します。Lambda 関数は、API を作成したのと同じアカウントまたは別のアカウントで作成できます。

API Gateway コンソールの組み込みツールまたは Postman を使用して、Lambda オーソライザーをテストできます。Postman を使用して Lambda オーソライザー関数をテストする方法については、「API Gateway Lambda オーソライザーで API を呼び出す」を参照してください。

Lambda オーソライザーを設定する (コンソール)

次の手順は、API Gateway REST API コンソールで Lambda オーソライザーを作成する方法を示しています。Lambda オーソライザーのタイプ別の詳細については、「Lambda オーソライザーのタイプの選択」を参照してください。

REQUEST authorizer
Lambda オーソライザー REQUEST を設定するには
  1. https://console.aws.amazon.com/apigateway で API Gateway コンソールにサインインします。

  2. API を選択し、[オーソライザー] を選択します。

  3. [オーソライザーの作成] を選択します。

  4. [オーソライザー名] で、オーソライザー名を入力します。

  5. [オーソライザータイプ] には Lambda を選択します。

  6. [Lambda 関数] で、Lambda オーソライザー関数を作成した場所 AWS リージョン を選択し、関数名を入力します。

  7. [Lambda 呼び出しロール] は空白のままにして、API Gateway REST API コンソールでリソースベースのポリシーを設定できるようにします。このポリシーは、Lambda オーソライザー関数を呼び出すアクセス許可を API Gateway に付与します。IAM ロールの名前を入力して、Lambda オーソライザー関数を呼び出すことを API Gateway に許可することもできます。ロールの例については、「引き受け可能な IAM ロールを作成する」を参照してください。

  8. [Lambda イベントペイロード] の場合は、[リクエスト] を選択します。

  9. [ID ソースタイプ] では、パラメータータイプを選択します。サポートされているパラメータタイプは、HeaderQuery stringStage variable、および Context です。ID ソースをさらに追加するには、[パラメーターの追加] を選択します。

  10. オーソライザーが生成した認証ポリシーをキャッシュするには、[認証キャッシュ] をオンのままにします。ポリシーのキャッシュを有効にすると、[TTL] 値を変更できます。[TTL] を 0 に設定すると、ポリシーのキャッシュは無効になります。

    キャッシュを有効にすると、オーソライザーは、API 全体のすべてのメソッドに適用されるポリシーを返す必要があります。メソッド固有のポリシーを適用するには、コンテキスト変数の $context.path および $context.httpMethod を使用します。

  11. [オーソライザーの作成] を選択します。

TOKEN authorizer
TOKEN Lambda オーソライザーを設定するには
  1. https://console.aws.amazon.com/apigateway で API Gateway コンソールにサインインします。

  2. API を選択し、[オーソライザー] を選択します。

  3. [オーソライザーの作成] を選択します。

  4. [オーソライザー名] で、オーソライザー名を入力します。

  5. [オーソライザータイプ] には Lambda を選択します。

  6. [Lambda 関数] で、Lambda オーソライザー関数を作成した場所 AWS リージョン を選択し、関数名を入力します。

  7. [Lambda 呼び出しロール] は空白のままにして、API Gateway REST API コンソールでリソースベースのポリシーを設定できるようにします。このポリシーは、Lambda オーソライザー関数を呼び出すアクセス許可を API Gateway に付与します。IAM ロールの名前を入力して、Lambda オーソライザー関数を呼び出すことを API Gateway に許可することもできます。ロールの例については、「引き受け可能な IAM ロールを作成する」を参照してください。

  8. [Lambda イベントペイロード] の場合は、[トークン] を選択します。

  9. [トークンソース] には、認証トークンを含むヘッダー名を入力します。認証トークンを Lambda オーソライザーに送信するには、発信者がこの名前のヘッダーが含める必要があります。

  10. (オプション) [トークンの検証] に、RegEx ステートメントを入力します。API Gateway は、この式に対して、入力トークンの初期検証を実行し、認証が成功するとオーソライザーを呼び出します。

  11. オーソライザーが生成した認証ポリシーをキャッシュするには、[認証キャッシュ] をオンのままにします。ポリシーのキャッシュが有効の場合、[トークンのソース] で指定されているヘッダー名はキャッシュキーになります。ポリシーのキャッシュを有効にすると、[TTL] 値を変更できます。[TTL] を 0 に設定すると、ポリシーのキャッシュは無効になります。

    キャッシュを有効にすると、オーソライザーは、API 全体のすべてのメソッドに適用されるポリシーを返す必要があります。メソッド固有のポリシーを適用するには、[認可のキャッシュ] をオフにすることができます。

  12. [オーソライザーの作成] を選択します。

Lambda オーソライザーを作成したら、これをテストできます。次の手順は、Lambda オーソライザーをテストする方法を示しています。

REQUEST authorizer
REQUEST Lambda オーソライザーをテストするには
  1. https://console.aws.amazon.com/apigateway で API Gateway コンソールにサインインします。

  2. オーソライザーの名前を選択します。

  3. [オーソライザーをテスト] に、ID ソースの値を入力します。

    REQUEST オーソライザー Lambda 関数の例 を使用している場合は、次の手順に従います。

    1. [ヘッダー] を選択して「headerValue1」と入力し、[パラメーターの追加] を選択します。

    2. [ID ソースタイプ][クエリ文字列] を選択して「queryValue1」と入力し、パ[ラメータの追加] を選択します。

    3. [ID ソースタイプ] で、[ステージ変数] を選択し、「stageValue1」と入力します。

    テスト呼び出しのコンテキスト変数は変更できませんが、Lambda 関数の API Gateway オーソライザーのテストイベントテンプレートは変更できます。次に、変更したコンテキスト変数を使用して Lambda オーソライザー関数をテストできます。詳細については、「AWS Lambda デベロッパーガイド」の「コンソールでの Lambda 関数のテスト」を参照してください。

  4. [オーソライザーをテスト] を選択します。

TOKEN authorizer
TOKEN Lambda オーソライザーをテストするには
  1. https://console.aws.amazon.com/apigateway で API Gateway コンソールにサインインします。

  2. オーソライザーの名前を選択します。

  3. [オーソライザーをテスト] に、トークンの値を入力します。

    TOKEN オーソライザー Lambda 関数の例 を使用している場合は、次の手順に従います。

    1. [authorizationToken] に、「allow」と入力します。

  4. [オーソライザーをテスト] を選択します。

    Lambda オーソライザーがテスト環境でリクエストを正常に拒否すると、テストは 200 OK HTTP レスポンスで応答します。ただし、テスト環境以外では、API Gateway は 403 Forbidden HTTP レスポンスを返し、メソッドリクエストは失敗します。

Lambda オーソライザーを設定する (AWS CLI)

次の create-authorizer コマンドは、AWS CLI を使用して Lambda オーソライザーを作成する方法を示しています。

REQUEST authorizer

次の例では、REQUEST オーソライザーを作成し、Authorizer ヘッダーと accountId コンテキスト変数 を ID ソースとして使用します。

aws apigateway create-authorizer \ --rest-api-id 1234123412 \ --name 'First_Request_Custom_Authorizer' \ --type REQUEST \ --authorizer-uri 'arn:aws:apigateway:us-west-2:lambda:path/2015-03-31/functions/arn:aws:lambda:us-west-2:123412341234:function:customAuthFunction/invocations' \ --identity-source 'method.request.header.Authorization,context.accountId' \ --authorizer-result-ttl-in-seconds 300
TOKEN authorizer

次の例では、TOKEN オーソライザーを作成し、Authorization ヘッダーを ID ソースとして使用します。

aws apigateway create-authorizer \ --rest-api-id 1234123412 \ --name 'First_Token_Custom_Authorizer' \ --type TOKEN \ --authorizer-uri 'arn:aws:apigateway:us-west-2:lambda:path/2015-03-31/functions/arn:aws:lambda:us-west-2:123412341234:function:customAuthFunction/invocations' \ --identity-source 'method.request.header.Authorization' \ --authorizer-result-ttl-in-seconds 300

Lambda オーソライザーを作成したら、これをテストできます。次の test-invoke-authorizer コマンドは、Lambda オーソライザーをテストする方法を示しています。

aws apigateway test-invoke-authorizer --rest-api-id 1234123412 \ --authorizer-id efg1234 \ --headers Authorization='Value'

Lambda オーソライザーを使用するようにメソッドを設定する (コンソール)

Lambda オーソライザーを設定したら、これを API のメソッドにアタッチする必要があります。

API メソッドを設定して Lambda オーソライザーを使用するには
  1. https://console.aws.amazon.com/apigateway で API Gateway コンソールにサインインします。

  2. API を選択します。

  3. [リソース] を選択し、新しいメソッドを選択するか、既存のメソッドを選択します。

  4. [メソッドリクエスト] タブの [メソッドリクエスト設定] で、[編集] を選択します。

  5. [オーソライザー] では、ドロップダウンメニューから、先ほど作成した Lambda オーソライザーを選択します。

  6. (オプション) オーソライザートークンをバックエンドに渡す場合は、[HTTP リクエストヘッダー] を選択します。[ヘッダーを追加] を選択し、認証ヘッダーの名前を追加します。[名前] に、API の Lambda オーソライザーを作成した際に指定した [トークンソース] の名前と一致するヘッダー名を入力します。このステップは [REQUEST] オーソライザーには適用されません。

  7. [Save] を選択します。

  8. [API のデプロイ] を選択して、API をステージにデプロイします。ステージ変数を使用した REQUEST オーソライザーの場合は、必要なステージ変数を定義して、[ステージ] ページで値を指定する必要があります。

Lambda オーソライザーを使用するように API のメソッドを設定する (AWS CLI)

Lambda オーソライザーを設定したら、これを API のメソッドにアタッチする必要があります。新しいメソッドを作成するか、パッチオペレーションを使用してオーソライザーを既存のメソッドにアタッチできます。

次の put-method コマンドは、Lambda オーソライザーを使用する新しいメソッドを作成する方法を示しています。

aws apigateway put-method --rest-api-id 1234123412 \ --resource-id a1b2c3 \ --http-method PUT \ --authorization-type CUSTOM \ --authorizer-id efg1234

次の update-method コマンドは、Lambda オーソライザーを使用するように既存のメソッドを更新する方法を示しています。

aws apigateway update-method \ --rest-api-id 1234123412 \ --resource-id a1b2c3 \ --http-method PUT \ --patch-operations op="replace",path="/authorizationType",value="CUSTOM" op="replace",path="/authorizerId",value="efg1234"