IAM 認証を Amazon API Gateway で作成された API に実装するにはどうすればよいですか?

最終更新日: 2016 年 8 月 31 日

Amazon API Gateway で API を作成しました。この API にアクセスするための IAM 認証を実装しようと思います。どうすればよいですか?

簡単な説明

Amazon API Gateway では、API Gateway コンソール、AWS CLI、API Gateway コントロールサービスの REST API、およびプラットフォーム固有または言語固有の SDK を使用して API を作成することができます。この記事では、Build and Test an API Gateway API from an Example で説明されている通り、Amazon API Gateway コンソールで作成した例を紹介します。IAM コンソールを使用して、Amazon API Gateway API の IAM 認証を実装する方法を説明します。

解決策

設定の準備

  1. まだ AWS アカウントを持っていない場合は、Get Ready to Use Amazon API GatewayからSign Up for AWSに移動します。
  2. Create an IAM User, Group or Role in Your AWS Account の説明に従って IAM ユーザーを作成します。この IAM ユーザーをルート認証情報の代わりに使用して、他の IAM ユーザーの IAM 認証を指定することができます。
  3. Grant IAM Users Permissions to Access API Gateway Control and Execution Services の手順を完了して、この IAM ユーザーに対し、他の IAM ユーザーの IAM 認証を指定するために必要な権限を付与します。
  4. IAM ユーザーに対し API Gateway への適切なアクセス許可を付与した後で、Amazon API Gateway コンソールにその IAM ユーザーとしてサインインします。まだ API Gateway API を作成していない場合は、Build and Test an API Gateway API from an Exampleの手順に従ってください。

API の承認を有効にする

  1. API のリストから API を選択し、[リソース] を選択します。
  2. API の API リソースでリストの上部に表示されているPOST メソッドを選択します。
  3. 右側のペインから [メソッドリクエスト] を選択します。サンプル API の説明を使用して API を作成した場合、[メソッドリクエスト] の [認可] 設定については、デフォルトで [なし] に設定されています。
  4. "認可: なし" のすぐ横に表示されているアイコンを選択します。これは、API POST メソッドリクエストの認可設定を [なし] から [AWS_IAM] へと変更する際に使用するドロップダウンボックスを意味しています。
  5. AWS_IAMを選択し、右側のチェックボックスをオンにして選択内容を確認します。API POST メソッドリクエストの認可設定を [なし] から [AWS_IAM] に変更した後、明示的に IAM ポリシーにより API へユーザーアクセス権限を明示的に付与する必要があります。
  6. API コンソールの [リソース] ペイン中央に表示されている新しく変更された [POST] メソッドを選択し、中央のパネル上部で [アクション] を選択し、ドロップダウンボックスを表示します。
  7. [アクション] で、[API のデプロイ] を選択します。これによりリソースに行われた変更がデプロイされ、更新した認可設定が適用されます。

API 認可をポリシーで IAM ユーザーに付与する

API へのユーザーアクセス権限は個々の IAM ユーザーレベルで付与することが可能ですが、Amazon API Gateway API へのアクセスは IAM グループレベルで付与することを推奨します。

  1. AWS IAM コンソールを開き、[グループ] を選択します。
  2. 既存のグループ名を選択するか、または新しいグループを作成してグループ名を選択し、[グループの概要] ページを表示します。[グループの概要] ページで [ユーザー] タブが選択されていることを確認し、[グループにユーザーを追加] を選択して IAM ユーザーを一覧表示します。API へのアクセス権が、このグループに追加した IAM ユーザーに付与されます。
  3. グループに追加する IAM ユーザーを 1 名または複数選択し、[ユーザーの追加] を選択します。[グループの概要] ページが再表示されます。
  4. [アクセス許可] タブで、[ポリシーのアタッチ] を選択します。
  5. AmazonAPIGatewayInvokeFullAccess ポリシーを選択し、[ポリシーのアタッチ] を選択します。

このグループの各メンバーが AWS_IAM 認可設定を実装するAmazon API Gateway の API を使用できるようになりました。グループのメンバーではない IAM ユーザーは認可設定が [なし] のままで引き続き API にアクセスできますが、AWS_IAM 認可を必要とするメソッドで API のリソースへのリクエストを試みた場合、{"message":"Missing Authentication Token"} というエラーメッセージを受信します。

認可設定を承認する

  1. Amazon API Gateway コンソールで、API を選択します。
  2. 左ペインの API の下に表示されるカテゴリから [ステージ] カテゴリを選択します。
  3. API Gateway コンソールの中央ペインで、API のステージ上部の横にある三角形を選択し、API のメソッド階層およびオプションを展開します。サンプル API を作成した場合、階層の最下位の /pets/{petId} ステージ下の GET メソッドを選択します。

このページの上部に表示される Invoke URL をメモしておきます。Amazon API Gateway の API サンプルを作成した場合、この URL は次のようになります。

https://uid.execute-api.regionidentifier.amazonaws.com/test/pets/{petId}

この URL は、ブラウザを開き、/pets/555 などのように整数値を{petId} と置き換えることによって サンプル API 内で/pets/{petId} リソースを呼び出す際に使用することができます。

AmazonAPIGatewayInvokeFullAccess ポリシーがアタッチされたグループのメンバーである IAM ユーザーからの IAM 認証情報を使用して、URL に対し SigV4 署名済みリクエスト (AWS Signature Authorization タイプを使用する Postman アプリケーション経由など) を行い、AWS_IAM 認可設定が有効になっていることを確認します。エラーなしで URL に接続できることを確認したら、Invoke URL に対し別の署名なしリクエスト (IAM 認証情報なし) を行います。