クロスアカウントの API Gateway Lambda オーソライザーを設定する
AWS Lambda 関数は、API オーソライザー関数とは異なる AWS アカウントからも使用できるようになりました。各アカウントは、Amazon API Gateway を利用できるリージョンであればどのリージョンでもかまいません。Lambda オーソライザー関数では、OAuth や SAML などのべアラートークン認証戦略を使用できます。これにより、複数の API Gateway API 間で簡単に一元管理し、主要な Lambda オーソライザー関数を共有できるようになります。
このセクションでは、Amazon API Gateway コンソールを使用してクロスアカウント Lambda オーソライザー関数を設定する方法を示します。
これらの手順は、AWS アカウントに API Gateway API、別のアカウントに Lambda オーソライザー関数が設定されていることを前提としています。
API Gateway コンソールを使用して クロスアカウント Lambda オーソライザーを設定する
API を設定しているアカウントで Amazon API Gateway コンソールにサインインし、以下の操作を行います。
-
API を選択し、メインナビゲーションペインで [オーソライザー] を選択します。
-
[オーソライザーの作成] を選択します。
-
[オーソライザー名] で、オーソライザー名を入力します。
-
[オーソライザータイプ] には Lambda を選択します。
-
[Lambda 関数] で、2 番目のアカウントで作成した Lambda オーソライザー関数の完全な ARN を入力します。
注記
Lambda コンソールのコンソールウィンドウの右上隅で、関数の ARN を検索できます。
-
aws lambda add-permission
コマンド文字列を含む警告が表示されます。このポリシーは、API Gateway にオーソライザー Lambda 関数を呼び出すアクセス許可を付与します。後ほど使用するために、コマンドをコピーして保存しておきます。コマンドは、オーソライザーの作成後に実行します。 -
[Lambda 呼び出しロール] を空白のままにすると、API Gateway コンソールでリソースベースのポリシーが設定されます。ポリシーは、API Gateway に認可の Lambda 関数を呼び出すアクセス許可を付与します。また、IAM ロールを入力して、API Gateway でオーソライザーの Lambda 関数を呼び出せるようにします。このようなロールの例については、「引き受け可能な IAM ロールを作成する」を参照してください。
-
[Lambda イベントペイロード] には、
TOKEN
オーソライザーの [トークン]、またはREQUEST
オーソライザーの [リクエスト] を選択します。 -
前のステップの選択内容に応じて、次のいずれかを実行します。
-
[トークン] オプションで、以下の操作を行います。
-
[トークンソース] には、認証トークンを含むヘッダー名を入力します。認証トークンを Lambda オーソライザーに送信するには、この名前のヘッダーが API クライアントに含まれている必要があります。
-
オプションで、[トークンの検証] に RegEx ステートメントを入力します。API Gateway は、この式に対して、入力トークンの初期検証を実行し、認証が成功するとオーソライザーを呼び出します。これにより API への呼び出しを減らすことができます。
-
オーソライザーが生成した認証ポリシーをキャッシュするには、[認証キャッシュ] をオンのままにします。ポリシーのキャッシュが有効の場合、[TTL] 値を変更できます。[TTL] を 0 に設定すると、ポリシーのキャッシュは無効になります。ポリシーのキャッシュが有効の場合、[トークンのソース] で指定されているヘッダー名はキャッシュキーになります。リクエストでこのヘッダーに複数の値が渡された場合、すべての値がキャッシュキーになり、順序は保持されます。
注記
デフォルトの [TTL] 値は 300 秒です。最大値は 3600 秒で、この制限値を増やすことはできません。
-
-
[リクエスト] オプションで、以下の操作を行います。
-
[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 全体のすべてのメソッドに適用されるポリシーを返す必要があります。メソッド固有のポリシーを適用するには、[認証キャッシュ] をオフにします。
-
-
[オーソライザーの作成] を選択します。
-
前のステップでコピーした
aws lambda add-permission
コマンド文字列を、2 番目のアカウント用に設定された AWS CLI ウィンドウに貼り付けます。AUTHORIZER_ID
をユーザーのオーソライザー ID に置き換えます。これにより、最初のアカウントから 2 番目のアカウントの Lambda オーソライザー関数へのアクセスが許可されます。