2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【AWS】IAM認証を使用したREST APIの呼び出し

Last updated at Posted at 2022-05-29

はじめに

APIGatewayにはIAM認証機能といったものがあるのですがご存じでしょうか。
この機能を使用するとIAM認証情報(アクセスキー・シークレットアクセスキー)を指定しなければAPIを呼び出せないように制限をかけることができます。

ということでIAM認証を使用したAPIの呼び出しを検証したので、設定方法を記事にまとめてました。

目次

アクセスキー・シークレットアクセスキーとは

そもそもなんやねんそれって方に向けて軽く説明します。
AWSのコンソールにログインして何か操作を行うとき、IAMユーザが実行可能なアクションはユーザに関連付けられたIAM Roleによって定義されています。
AWSコンソール内でリソースを操作するにはIAMユーザとしてログインすればいいですが、コンソールにログインせず、リソースを操作したい(AWS CLIやプログラムからリソースを操作したい)場合はどのようにすればいいでしょうか。
このような時にアクセスキーとシークレットアクセスキーを使用します。

アクセスキー・シークレットアクセスキーはIAMユーザから作成され、
このキー情報(IAM認証情報)を使用したリクエストは、作成元のIAMユーザと同一の権限を有しているとみなされます。

例えば「EC2の起動・停止」をプログラムで操作したい場合は、「EC2の起動・停止」の権限を有したIAMユーザからアクセスキー・シークレットアクセスキーを生成し、プログラムに埋め込むことでEC2の操作ができるようになります。
今回の検証ではAPIの呼び出し許可ポリシーを付与したIAMユーザからキーを生成し、生成したキーをリクエストに埋め込んで使用します。

IAMユーザの作成

APIの実行権限を付与したIAMユーザを作成します。
IAMユーザ作成時に、「アクセスキー・プログラムによるアクセス」を指定します。
image.png
ポリシーは「AmazonAPIGatewayInvokeFullAccess」で作成します。
image.png
image.png

アクセスキーとシークレットキーをダウンロードする

シークレットアクセスキーはこの画面でしか確認することができません。
必ずcsvファイルのダウンロードを行ってください。
image.png
ダウンロードしたcsvファイルの中身は以下のようになっています。
image.png

WEBサーバの作成

以下の記事で紹介したCloudFormationテンプレートを使用することで、セッションマネージャによる接続が可能なEC2を起動することができます。

内部NLBの作成

APIGatewayとプライベートサブネットをつなげるために内部NLBをプライベートサブネット内に作成します。
image.png
NLBのターゲットグループにプライベートサブネットに起動したEC2を指定しています。
image.png

VPCリンクの作成

APIGatewayでVPCリンクを作成し内部NLBと接続します。
今回はRESTAPIの呼び出しを行うので、「REST APIのVPCリンク」を指定し、先ほど作成した内部NLBをターゲットに指定します。
image.png
作成完了まで数分かかりますが、成功すると以下のようになります。
image.png

APIの作成

画像のようにパブリックREST APIを作成します。
image.png
image.png
image.png
メソッドを作成したら、統合タイプに「VPCリンク」を指定し、エンドポイントに「NLBのDNS名」を指定します。
image.png

IAM認証を有効化する

メソッドリクエストの「認可」に「AWS IAM」を設定します。
image.png

APIのテスト

テストを実行し、HTTSステータス200が返ってくることを確認します。
image.png

APIをデプロイ

テストでステータス「200」が返ってきたことを確認したらAPIをデプロイします。
※デプロイ前にリソースポリシーが定義されている必要があります。今回はステージ名を「public」としてデプロイしました。
image.png

APIを呼び出してみる

Postmanを使用してAPIの呼び出しを行います。(Postmanの使い方については割愛します。
まずはアクセスキーを指定せず、APIを呼び出してみます。
image.png
「{"message":"The security token included in the request is invalid."}」と表示され呼び出すことができませんでした。
つぎにアクセスキーとシークレットアクセスキーを指定して呼び出してみます。
image.png
今度はうまく表示されました!!

さいごに

呼び出し元のアクセスキーに関する制御を行わなかったので、ポリシーの作り込み等が必要になるかと思いますが、大体の仕組みは理解できました。
やっぱ誰かの記事を読むだけじゃなくて、実際に動かさないと見えてこない課題ってありますね。。。
自分の場合、内部NLBとVPCリンクを使用した構築が初めてでしたので、非常に勉強になりました。
あと、API呼び出しに使用したpostmanってナニ?って感じでしたが、めちゃくちゃ便利だったので今後の検証でも重宝しそうです(笑)

今回の検証ではいじりませんでしたが、統合レスポンス・メソッドレスポンスのマッピングテンプレートの理解が浅いので別の機会で検証してみたいと思ってます。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?