

# クロスアカウントの API Gateway Lambda オーソライザーを設定する
<a name="apigateway-lambda-authorizer-cross-account-lambda-authorizer"></a>

AWS Lambda 関数は、API オーソライザー関数とは異なる AWS アカウントからも使用できるようになりました。各アカウントは、Amazon API Gateway を利用できるリージョンであればどのリージョンでもかまいません。Lambda オーソライザー関数では、OAuth や SAML などのべアラートークン認証戦略を使用できます。これにより、複数の API Gateway API 間で簡単に一元管理し、主要な Lambda オーソライザー関数を共有できるようになります。

このセクションでは、Amazon API Gateway コンソールを使用してクロスアカウント Lambda オーソライザー関数を設定する方法を示します。

これらの手順は、1 つの AWS アカウントに API Gateway API、もう 1 つのアカウントに Lambda オーソライザー関数が設定されていることを前提としています。

## API Gateway コンソールを使用して クロスアカウント Lambda オーソライザーを設定する
<a name="apigateway-cross-account-lambda-auth-configure-cross-account-authorizer"></a>

API を設定しているアカウントで Amazon API Gateway コンソールにサインインし、以下の操作を行います。

1. API を選択し、メインナビゲーションペインで **[オーソライザー]** を選択します。

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

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

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

1. **[Lambda 関数]** で、2 番目のアカウントで作成した Lambda オーソライザー関数の完全な ARN を入力します。
**注記**  
Lambda コンソールのコンソールウィンドウの右上隅で、関数の ARN を検索できます。

1. `aws lambda add-permission` コマンド文字列を含む警告が表示されます。このポリシーは、API Gateway にオーソライザー Lambda 関数を呼び出すアクセス許可を付与します。後ほど使用するために、コマンドをコピーして保存しておきます。コマンドは、オーソライザーの作成後に実行します。

1. **[Lambda イベントペイロード]** には、`TOKEN` オーソライザーの **[トークン]**、または `REQUEST` オーソライザーの **[リクエスト]** を選択します。

1. 前のステップの選択内容に応じて、次のいずれかを実行します。

   1.  **[トークン]** オプションで、以下の操作を行います。
      + **[トークンソース]** に、認可トークンを含むヘッダー名を入力します。認可トークンを Lambda オーソライザーに送信するには、この名前のヘッダーが API クライアントに含まれている必要があります。
      + オプションで、**[トークンの検証]** に RegEx ステートメントを入力します。API Gateway は、この式に対して、入力トークンの初期検証を実行し、認証が成功するとオーソライザーを呼び出します。これにより API への呼び出しを減らすことができます。
      + オーソライザーが生成した認可ポリシーをキャッシュするには、**[認可のキャッシュ]** をオンのままにします。ポリシーのキャッシュが有効の場合、[**TTL**] 値を変更できます。**[TTL]** を 0 に設定すると、ポリシーのキャッシュは無効になります。ポリシーのキャッシュが有効の場合、**[トークンのソース]** で指定されているヘッダー名はキャッシュキーになります。リクエストでこのヘッダーに複数の値が渡された場合、すべての値がキャッシュキーになり、順序は保持されます。
**注記**  
デフォルトの [**TTL**] 値は 300 秒です。最大値は 3600 秒で、この制限値を増やすことはできません。

   1. [**リクエスト**] オプションで、以下の操作を行います。
      + **[ID ソースタイプ]** では、パラメータタイプを選択します。サポートされているパラメータタイプは、`Header`、`Query string`、`Stage variable`、および `Context` です。ID ソースをさらに追加するには、**[パラメータを追加]** を選択します。
      + オーソライザーが生成した認可ポリシーをキャッシュするには、**[認可のキャッシュ]** をオンのままにします。ポリシーのキャッシュが有効の場合、[**TTL**] 値を変更できます。**[TTL]** を 0 に設定すると、ポリシーのキャッシュは無効になります。

        API Gateway では、リクエストオーソライザーのキャッシングキーとして、指定された ID ソースを使用します。キャッシュが有効の場合、API Gateway は、指定されているすべての ID ソースがランタイムに存在していることを確認できた場合のみ、Lambda 関数を呼び出します。指定された ID ソースが欠落しているか、null、または空の場合、API Gateway は、`401 Unauthorized` レスポンスを返します。オーソライザーの Lambda 関数を呼び出すことはありません。

        複数の ID ソースが定義されている場合、それらはすべて、オーソライザーのキャッシュキーを取得するために使用されます。キャッシュキー部分のいずれかを変更すると、オーソライザーは、キャッシュされたポリシードキュメントを破棄し、新しいドキュメントを作成します。リクエストで複数の値を含むヘッダーが渡された場合、すべての値がキャッシュキーの一部になり、順序は保持されます。
      + キャッシングがオフの場合は、ID ソースを指定する必要はありません。
**注記**  
 キャッシングを有効にするには、認証は API 全体のすべてのメソッドに適用されるポリシーを返す必要があります。メソッド固有のポリシーを適用するには、**[認可のキャッシュ]** をオフにします。

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

1. 前のステップでコピーした `aws lambda add-permission` コマンド文字列を、2 番目のアカウント用に設定された AWS CLI ウィンドウに貼り付けます。`AUTHORIZER_ID` をユーザーのオーソライザー ID に置き換えます。これにより、最初のアカウントから 2 番目のアカウントの Lambda オーソライザー関数へのアクセスが許可されます。