メインコンテンツへスキップ
この機能ではデリゲーションを使用します。デフォルトでは、2017年6月8日時点でアドオンを使用していないテナントでは、デリゲーションは無効化されています。現在デリゲーションを必要とするアドオンを使用しているレガシーテナントは、この機能を引き続き利用できます。今後、デリゲーション機能が変更またはサービスから削除される場合は、現在利用中のお客様に事前に通知し、移行のための十分な期間が設けられます。さらに、デリゲーションはカスタムドメインの使用をサポートしていないため、これに依存する機能はカスタムドメインと併用した場合に完全には動作しない可能性があることに注意してください。

ステップ 2 - Amazon API Gateway を保護してデプロイする

API が稼働したので、次はセキュリティを追加します。このステップでは、次の作業を行います。
  • 更新 API を保護し、特定の AWS IAM ロールを持つ認証済みユーザーのみにアクセスを制限する。
  • Auth0 デリゲーションを設定して、AWS IAM フェデレーション機能を利用する。
  • AWS IAM ロールを使用する AWS の を取得する。
API の保護が完了したら、サーバーレスのシングルページアプリケーション (SPA) を構築します。この SPA は、どのユーザーにアクセスを許可するかを判断するために、ID フェデレーションを利用します。AWS Gateway API 向けの AWS IAM Integration、 向けの AWS IAM Identity Federation、さらに AWS 向け Auth0 デリゲーション を組み合わせることで、Social Provider や Enterprise 接続を含むさまざまなソースのユーザーが API にアクセスできるようになります。次の図は、SAML ベースの と AWS 向け Auth0 SAML Federation および デリゲーション を使用するサンプルフローを示しています。 このフローを実装する方法は 2 つあります。
  1. AWS IAM で Auth0 デリゲーション を使用する。
  2. ID トークンを追加して、Lambda 関数にアイデンティティを渡す。
デリゲーションを使用すると、アプリケーションで AWS のサービスにアクセスするためのトークンを AWS から簡単に取得できます。

Amazon API Gateway を保護する方法

AWS API Gateway では、API を保護するための方法がいくつか提供されています。
  1. API キー;
  2. IAM;
  3. Amazon Cognito.
通常、API キーの使用は、以下に示すようなサービス間連携に適しています。ただし、このアプローチにはいくつかの欠点があります。
  • 長期間有効なシークレットをアプリケーションに組み込むのはリスクがあります (アプリケーションは侵害されやすいためです) 。
  • API キーを発行および管理するための基盤を構築するには、安全な実装が必要であり、開発が難しい場合があります。
このチュートリアルのこのセクションでは、API Gateway で API を保護するために IAM ロールとポリシーを使用しますが、Amazon Cognito のユーザープールを使用することもできます。AWS API の保護に関する詳細な手順については、Secure AWS API Gateway Using Cognito を参照してください。IAM ロールとポリシーの使用方法の詳細については、Amazon の記事 Control access to an API with IAM permissions を参照してください。Cognito のユーザープールの詳細については、Amazon Cognit user pool を参照してください。

ステップ 1. API Gateway との SAML 統合に向けて IAM と Auth0 を設定する

AWS トークンと交換する SAML トークンには、AWS IAM ロールを指定できます。その IAM ロールに付与された権限 (IDプロバイダーによって設定されます) に応じて、受け取るトークンにも同じ権限が付与されます。それぞれに固有の AWS IAM ロールを持つ異なる SAML トークンを発行することで、ユーザーごとのアクセス レベルを制御できます。 たとえば、IDプロバイダー (IdP) は、グループ メンバーシップ (Active Directory の管理者など) や認証元 (データベース接続や Facebook などのソーシャルプロバイダーなど) に基づいて IAM ロールを指定できます。この方法を使用すると、AWS IAM で保護された Amazon API Gateway メソッドに対するユーザーのアクセスを区別できます。

Auth0 を設定する

Auth0 アカウントにログインします。管理 Dashboard が表示されるので、ページ右上にある + New Application をクリックします。 新しいアプリケーションの名前を AWS API Gateway にし、アプリケーションの種類としてシングルページアプリケーションを指定します。Create をクリックします。 新しく作成したアプリケーションのアドオンタブに移動します。該当するトグルを使用して Amazon Web Services を有効にします。これにより、AWS デリゲーションが有効になります。

AWS を設定する

SAML を使用する委任アクセス向けに AWS を設定するには、How to Set Up AWS for Delegated Authentication チュートリアルの手順に従ってください。いくつか注意点があります。
  • リンク先のチュートリアルの手順ではなく、ロールにアクセス許可ポリシーをアタッチするには以下の手順に従ってください。
  • 作成する SAML プロバイダーの名前は auth0 にしてください。
  • AWS IAM ロールの名前は auth0-api-role にしてください。
IWS IAM ロールに権限ポリシーを設定する
AWS IAM ロールの設定が完了したら、API Gateway メソッドを実行できるようにするポリシーを auth0-api-role に追加します。この手順の詳細については、Amazon API Gateway のユーザーアクセス権限を参照してください。

Gateway API ARN の取得

始める前に、Gateway API の ARN を確認しておく必要があります。
  1. Amazon API Gateway Console に移動してログインします。
  2. 該当する API を選択します。
  3. API に関連付けられているいずれかの Method をクリックして、Method Execution ページを開きます。
  4. Method Execution ページでは、左上にある Method Request ボックスに API の ARN が表示されます。ただし、これには Method 名も含まれています。
arn:aws:execute-api:us-east-2:484857107747:97i1dwv0j4/*/POST/ API のベース ARN を取得するには、メソッド名を削除します。 arn:aws:execute-api:us-east-2:484857107747:97i1dwv0j4/* 上記の ARN のワイルドカード (*) を使うと、すべてのステージに対して API への権限を付与できますが、各ステージは個別にデプロイすることもできます (たとえば、development、test、production の順) 。 先ほど作成した auth0-api-role ロールを選択して、Summary ページを開きます。 Inline Policies を展開し、click here をクリックします。 Custom Policy を選択し、Select をクリックします。 ポリシードキュメントを編集します。Policy Name には任意の名前を設定できますが、api-gateway-policy のような名前を推奨します。このロールで API メソッドへのアクセスを有効にするには、ARN を自分の API のものに更新したうえで、次のポリシーを適用します。
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "execute-api:*"
            ],
            "Resource": [
                "arn:[{yourArn}]"
            ]
        }
    ]
}
Apply Policy をクリックします。 API Gateway はユーザーに代わってこのロールを引き受けるため、信頼ポリシーでこの操作を許可する必要があります。そのためには、ロールの Summary ページにあるこのタブに移動し、ロールの Trust Relationships を編集します。 最終的な信頼関係は、次のようになります。 この時点で、API Gateway の Authorization Settings を設定する必要があります。 Resources ビューで、/pets 配下の POST メソッドを選択します。 Method Request リンクをクリックします。 Authorization Type の横にある編集アイコンをクリックし、AWS_IAM を選択します。続いて、フィールドの横にある Check Button をクリックして設定を保存します。

ステップ 2. CORS を設定して API をデプロイする

このシングルページアプリケーション (SPA) は、ページとは異なるドメインから Web API メソッドにアクセスします。ブラウザーが AWS API Gateway へのアクセスを許可できるようにするには、Cross-Origin Resource Sharing の設定でこれを明示的に許可する必要があります。通常、ブラウザーはまず OPTIONS リクエストを送信し、そのサイトで許可されている操作を確認します。 Resources で /pets を選択し、Create Method をクリックします。ドロップダウンから OPTIONS を選択し、checkmark をクリックして設定を保存します。 Options メソッドは、ブラウザーが必要な HTTP ヘッダーを取得するために使用されますが、この関数にはさらに実行内容を指定する必要があります。OPTIONS Setup 画面で、次の変数/パラメーターを設定します。
  • Integration Type: Lambda Function;
  • Use Lambda Proxy Integration: チェックを入れない;
  • Lambda Region: リージョンを選択する;
  • Lambda Function: NoOp.
Save をクリックします。次のポップアップ画面で、Lambda 関数に必要な権限を付与します。 その後、自動的に OPTIONS Method Execution ページに移動します。Method Response ページを開きます。 HTTP Status バーの下にある 200 セクションを展開し、次のレスポンスヘッダーを追加します。
  • Access-Control-Allow-Headers;
  • Access-Control-Allow-Methods;
  • Access-Control-Allow-Origin.
次に、各レスポンスヘッダーに適切な値をマッピングします。Method Execution ページに戻ったら、Integration Response をクリックします。200 メソッドレスポンスステータスに対応する行を展開し、Header Mappings を展開して、次の mapping を適用します。
  • Access-Control-Allow-Headers: 'Content-Type,X-Amz-Date,Authorization,x-api-key,x-amz-security-token';
  • Access-Control-Allow-Origin: '*'
  • Access-Control-Allow-Methods: 'POST, GET, OPTIONS'
最後に、上記の手順を繰り返して、POST メソッドと GET メソッドでも CORS を有効にします。ただし、この 2 つのメソッドでは、Access-Control-Allow-Origin ヘッダーのみを追加し、その値を '*' に設定します。

API をデプロイする

API の Resources ビューに戻ります。Actions をクリックし、DEPLOY API を選択します。 Deploy State で New Stage を選択し、ステージ名に Test を指定します。Deploy ボタンをクリックします。 結果ページで SDK Generation に移動します。Platform として JavaScript を選択します。Generate SDK ボタンをクリックします。 ダウンロードした zip ファイルは、後で使用できるよう保存しておきます。