はじめに
API Gatewayのオーソライザという機能、気になってたので使ってみました。
簡単に実際の動きを紹介したいと思います。
まずAPI Gatewayとは
公式ドキュメントより
Amazon API Gateway は、あらゆる規模の REST、HTTP、および WebSocket API を作成、公開、維持、モニタリング、およびセキュア化するための AWS のサービスです。
ちなみに、設定によっては誰でもアクセスできるパブリックAPIになりかねません。
なので最後にはセキュリティを強化する他の設定もいくつか紹介します。
1.設定方法
API Gatewayの左側メニューよりオーソライザーを選択。
その後、オーソライザーを作成をクリック。
オーソライザー名に「authTest」と付けて、Lambdaを選択。
そして呼び出すLambdaを設定。
Idソースタイプ : ヘッダー
キー : authTest
この設定をする事で、リクエスト内にヘッダー「authTest」が入っていないとアクセスできなくなります。
設定が終了すると、オーソライザーの一覧にこういった感じの内容が表示されます。
これでオーソライザー作成は完了です。
次にメソッドリクエストの編集ボタンからさっきのオーソライザーをメソッドリクエストに設定してあげます。
設定完了後は↓のように選択したオーソライザー名が表示されているはずです。
以上でAPI Gatewayの設定は完了です。
2.実際にAPIを叩いてみる
それでは実際にAPIを叩いてみましょう!
ちなみにオーソライザー設定前はauthTestヘッダー無しでアクセスできます。
↓でご確認ください。
レスポンスに「accessed denied!」とありますが、これは後続処理のLambdaがcurlコマンドをはじいているためです。
その次に続いてオーソライザー設定後の挙動もあります。
表示が「Unauthorized」に変わったのがおわかりでしょうか。
API Gatewayがアクセス拒否をした為です。
最後にこちらも2つ並べてみました。
authTestヘッダー有りと無しのパターンです。
ヘッダー無しだと先程と同じようにアクセス拒否され、ヘッダーを付与するとまたエラーが変わりました。
最終的にアクセス拒否されたのですが、これはオーソライザーとして呼び出したLambda内でcurlからのアクセスを拒否している為です。
3.まとめ
API Gatewayは便利な反面、適切な認証を設定しないとパブリックに公開されてしまうリスクがあります。
Cognito等のマネージドサービスも強力ですが、独自の認証ロジックを柔軟に実装したい場合は、今回のようなLambdaオーソライザーが非常に有効です。
他にもCloudFrontと連携して直接アクセスできないような設定も可能です。
私的にはこちらがわかりやすい記事だと思います。目を通してみてください。
おまけ
-
CORS設定:
Access-Control-Allow-Originにドメインを設定する
※完全一致でないとダメ -
APIキー
左側メニューよりAPIキーを選択し作成、その後使用量プランを作成しAPIキーと結びつける。
メソッドリクエストに結びつける事で、ヘッダーにAPIキーを含まないとアクセスできなくなる。
簡易的な利用量制限などに使いますが、重要な認証には今回のLambdaオーソライザーなどを組み合わせるのが定石。 -
クライアント認証
クライアントが持つ証明書を検証し、接続元が信頼できる端末・サーバーかを確認する方式。 -
JWT認証
JSON Web Tokenの署名を検証し、ユーザー属性や権限を含むトークンの正当性を確認する方式。 -
IAM認証
AWS独自の**IAMポリシーと署名(SigV4)**を利用し、AWSリソースへのアクセス権限を直接制御する方式。 -
IP アドレス制限
前もってIPアドレスがわかる場合、IAMポリシーの設定により制限できます。






