

# API Gateway Lambda オーソライザーを設定する
<a name="configure-api-gateway-lambda-authorization"></a>

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

API Gateway コンソールの組み込みツールまたは [Postman](https://www.postman.com/) を使用して、Lambda オーソライザーをテストできます。Postman を使用して Lambda オーソライザー関数をテストする方法については、「[API Gateway Lambda オーソライザーで API を呼び出す](call-api-with-api-gateway-lambda-authorization.md)」を参照してください。

## Lambda オーソライザーを設定する (コンソール)
<a name="configure-api-gateway-lambda-authorization-with-console"></a>

 次の手順は、API Gateway REST API コンソールで Lambda オーソライザーを作成する方法を示しています。Lambda オーソライザーのタイプ別の詳細については、「[Lambda オーソライザーのタイプの選択](apigateway-use-lambda-authorizer.md#api-gateway-lambda-authorizer-choose)」を参照してください。

------
#### [ REQUEST authorizer ]

**Lambda オーソライザー `REQUEST` を設定するには**

1. [https://console.aws.amazon.com/apigateway](https://console.aws.amazon.com/apigateway) で API Gateway コンソールにサインインします。

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

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

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

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

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

1. **[Lambda 呼び出しロール]** は空白のままにして、API Gateway REST API コンソールでリソースベースのポリシーを設定できるようにします。このポリシーは、Lambda オーソライザー関数を呼び出すアクセス許可を API Gateway に付与します。IAM ロールの名前を入力して、Lambda オーソライザー関数を呼び出すことを API Gateway に許可することもできます。ロールの例については、「[引き受け可能な IAM ロールを作成する](integrating-api-with-aws-services-lambda.md#api-as-lambda-proxy-setup-iam-role-policies)」を参照してください。

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

1. **[ID ソースタイプ]** では、パラメータタイプを選択します。サポートされているパラメータタイプは、`Header`、`Query string`、`Stage variable`、および `Context` です。ID ソースをさらに追加するには、**[パラメータを追加]** を選択します。

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

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

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

------
#### [ TOKEN authorizer ]

**`TOKEN` Lambda オーソライザーを設定するには**

1. [https://console.aws.amazon.com/apigateway](https://console.aws.amazon.com/apigateway) で API Gateway コンソールにサインインします。

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

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

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

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

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

1. **[Lambda 呼び出しロール]** は空白のままにして、API Gateway REST API コンソールでリソースベースのポリシーを設定できるようにします。このポリシーは、Lambda オーソライザー関数を呼び出すアクセス許可を API Gateway に付与します。IAM ロールの名前を入力して、Lambda オーソライザー関数を呼び出すことを API Gateway に許可することもできます。ロールの例については、「[引き受け可能な IAM ロールを作成する](integrating-api-with-aws-services-lambda.md#api-as-lambda-proxy-setup-iam-role-policies)」を参照してください。

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

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

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

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

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

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

------

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

------
#### [ REQUEST authorizer ]

**`REQUEST` Lambda オーソライザーをテストするには**

1. [https://console.aws.amazon.com/apigateway](https://console.aws.amazon.com/apigateway) で API Gateway コンソールにサインインします。

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

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

   [`REQUEST` オーソライザー Lambda 関数の例](apigateway-use-lambda-authorizer.md#api-gateway-lambda-authorizer-request-lambda-function-create) を使用している場合は、次の手順に従います。

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

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

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

   テスト呼び出しのコンテキスト変数は変更できませんが、Lambda 関数の **API Gateway オーソライザー**のテストイベントテンプレートは変更できます。次に、変更したコンテキスト変数を使用して Lambda オーソライザー関数をテストできます。詳細については、「AWS Lambda デベロッパーガイド」の「[コンソールでの Lambda 関数のテスト](https://docs.aws.amazon.com/lambda/latest/dg/testing-functions.html)」を参照してください。**

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

------
#### [ TOKEN authorizer ]

**`TOKEN` Lambda オーソライザーをテストするには**

1. [https://console.aws.amazon.com/apigateway](https://console.aws.amazon.com/apigateway) で API Gateway コンソールにサインインします。

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

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

   [`TOKEN` オーソライザー Lambda 関数の例](apigateway-use-lambda-authorizer.md#api-gateway-lambda-authorizer-token-lambda-function-create) を使用している場合は、次の手順に従います。

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

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

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

------

## Lambda オーソライザーを設定する (AWS CLI）
<a name="configure-api-gateway-lambda-authorization-cli"></a>

次の [create-authorizer](https://docs.aws.amazon.com/cli/latest/reference/apigateway/create-authorizer.html) コマンドは、AWS CLI を使用して Lambda オーソライザーを作成する方法を示しています。

------
#### [ REQUEST authorizer ]

次の [create-authorizer](https://docs.aws.amazon.com/cli/latest/reference/apigateway/create-authorizer.html) コマンドは、`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 ]

次の [create-authorizer](https://docs.aws.amazon.com/cli/latest/reference/apigateway/create-authorizer.html) コマンドは、`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](https://docs.aws.amazon.com/cli/latest/reference/apigateway/test-invoke-authorizer.html) コマンドは、Lambda オーソライザーをテストします。

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

## Lambda オーソライザーを使用するようにメソッドを設定する (コンソール)
<a name="configure-api-gateway-lambda-authorization-method-console"></a>

Lambda オーソライザーを設定したら、これを API のメソッドにアタッチする必要があります。オーソライザーが認可キャッシュを使用している場合は、追加のメソッドのアクセスを制御するようにポリシーを更新してください。

**API メソッドを設定して Lambda オーソライザーを使用するには**

1. [https://console.aws.amazon.com/apigateway](https://console.aws.amazon.com/apigateway) で API Gateway コンソールにサインインします。

1. API を選択します。

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

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

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

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

1. **[保存]** を選択します。

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

## Lambda オーソライザーを使用するようにメソッドを設定する (AWS CLI)
<a name="configure-api-gateway-lambda-authorization-method-cli"></a>

Lambda オーソライザーを設定したら、これを API のメソッドにアタッチする必要があります。新しいメソッドを作成するか、パッチオペレーションを使用してオーソライザーを既存のメソッドにアタッチできます。オーソライザーが認可キャッシュを使用している場合は、追加のメソッドのアクセスを制御するようにポリシーを更新してください。

次の [put-method](https://docs.aws.amazon.com/cli/latest/reference/apigateway/put-method.html) コマンドは、Lambda オーソライザーを使用する新しいメソッドを作成します。

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

次の [update-method](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-method.html) コマンドは、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"
```