🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
AWS Amplify

AWS Amplifyとは、AWSを用いたWebアプリケーション向けのJavaScriptライブラリです。サインアップ/サインイン、MFA、コンテンツ管理、さらにサーバーレスなバックエンドの自動構築などの実装が容易にできます。

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

解決済

1回答

3357閲覧

AWS AmplifyからのリクエストのみAPIのアクセスを許可したい

退会済みユーザー

退会済みユーザー

総合スコア0

AWS Amplify

AWS Amplifyとは、AWSを用いたWebアプリケーション向けのJavaScriptライブラリです。サインアップ/サインイン、MFA、コンテンツ管理、さらにサーバーレスなバックエンドの自動構築などの実装が容易にできます。

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

0クリップ

投稿2020/12/03 23:20

前提・実現したいこと

お世話になっております。
AWS Amplify -> Webサーバー(Nginx: port80) -> APIサーバー(port: x000)の構成で設計しております。
APIは外部(例えばcurlなど)から叩けるようにしたくないので、AWS Amplifyからのリクエストのみを許可したいです。
しかし、下記の①・②の手法で検討しましたが、AWS Amplifyの特性上実現することができません。

発生している問題・エラーメッセージ


AWS AmplifyにはIPアドレスを識別する方法がなく、Nginxでブロックすることができません
AWS Amplifyにホスト名はあるのですが、Nginxの設定ではパフォーマンスの関係からホスト名を識別してブロックするのはできないようです
https://stackoverflow.com/questions/4246631/how-to-allow-from-hostname-in-nginx-config
やりたかった設定:

location / { allow xxx.xxxx.xxx.xxx; deny all; }


AWSのセキュリティグループ側でhogehoge_securiyに属するグループのみ、port80を許可させるにしても、AWS Amplifyとセキュリティグループを紐付けられないため、こちらの手法もとることができません。

上記設計の場合、どのようにしてAWS Amplifyのリクエストのみを許可することができますでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

plasticgrammer

2020/12/04 01:18

AWS Amplify をどのように利用しているのか、もう少し補足をお願いします。 まず、AWS Amplify のJSライブラリを使っているという理解なのですが、 各種モジュール (Auth、Analytics、Storage、API、Caching)のうち、「API」利用時の問題という理解で正しいでしょうか。
退会済みユーザー

退会済みユーザー

2020/12/04 01:51

ご返信ありがとうございます。 今回はVueを使用しており、API(REST)利用時の問題でございます。 下記を読む限りですと、LambdaやDynamoDBが対象であり、RailsやDjangobのようなAPIの利用には適さないのでしょうか。 https://docs.amplify.aws/lib/restapi/getting-started/q/platform/js
plasticgrammer

2020/12/04 04:12

回答ありがとうございます。もう少し質問させてください。 単純なAWS以外へのRESTリクエストを扱うだけであれば、Amplifyは大きすぎる気がするのですが、使用する理由はどのようなものでしょうか。 Auth(Cogitoによる認証)も使っていたりするのでしょうか。
yu_1985

2020/12/04 04:28

> AWS Amplifyにホスト名 ここがちょっとわからないのですが、AmplifyのJSフレームワークを使ってフロントを構築したというだけという認識なので、結局そのフロントにアクセスできる任意のクライアントからのリクエストが飛んでくると思うのですが、これはそもそもの接続元を限定したい、という話ですか?
退会済みユーザー

退会済みユーザー

2020/12/04 09:36

> 使用する理由はどのようなものでしょうか。 GitHubと連携したデプロイが簡単なので使用しています。 分析や認証など使用しないので、仰るように使うには大きい気がしますが、他の方が選定しているので使っている状況でございます。 > Auth(Cogitoによる認証)も使っていたりするのでしょうか。 使っておりません。 > AmplifyのJSフレームワークを使ってフロントを構築したというだけという認識なので、結局そのフロントにアクセスできる任意のクライアントからのリクエストが飛んでくると思うのですが、これはそもそもの接続元を限定したい、という話ですか? フロントには任意のIPからリクエストが飛びます。 今回実現したいのは、AWS Amplify -> Webサーバーの経路のみ許可して、AWS Amplifyを介さないリクエストを制限したいです。
guest

回答1

0

ベストアンサー

「Amplifyのリクエスト」ということを保証する方法がない(知らないだけであったらすいません)と、難しいのでは…。

JSフレームワークである以上、結局クライアントのものにそのソースが渡るわけで、リクエストを送ってくるのはクライアントでしょう。
なので、Amplifyどうのこうのではなくクライアントの制限をしなければいけないのではと思います。
curlだろうがAmplify Frameworkだろうがなんだろうが、結局送られてくるのはHTTPリクエストなので。
UserAgentとかは容易に偽装可能なのと、結局ブラウザのUserAgentになるので意味ないですね。
Amplifyを使ったら経路が限定されるわけではないですし、対象のソースはそもそもクライアントに配信されるものなのでそこで絞るのは非現実的でしょう。

やりたいことを照らし合わせると、サイト全体に認証を挟むのが手っ取り早いと思います。
もしそもそも接続元が限定されているのであればALBを挟んでWAFと連携させて想定しない接続元を弾く、ということが出来ますが…。

ちなみに、本文中に書いてあるホスト名を識別して云々はnginxに限らず通常そんなことは出来ないです。
なんらかで名前解決してやれば行けるかもしれませんが、アクセスの都度DNSにクエリを投げるのはさすがに酷い実装(※)だと思いますし、じゃあhostsに書けば…と言っても、それだったらドメインで指定しないで最初からIPで書けばいいですよね。
※自サービスだけではなく、クエリを受け付けるDNSに無駄なリクエストが発生する

リクエストのヘッダに含まれるホスト名を識別したとしてもそれは接続元ではなく、向こうが送ってくるリクエストの内容がそうなっているというだけで、分かるのはIPですし、ルール設定も基本的にIPです。

投稿2020/12/04 11:22

yu_1985

総合スコア7588

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/12/06 01:43

遅くなりました。 丁寧にご回答いただきましてありがとうございました。 Amplify使うメリットとしては、サーバーやDB無しで認証や分析・NoSQLでのデータ保存・Lambdaでのバックエンドコード実行ができるわけであって、サーバー・DBがある状況だと使用するメリットがあまりないように感じました。
yu_1985

2020/12/06 15:51

サーバレスの文脈外だと確かにAmplifyのメリットが死んでしまいますね。 このあたりはそもそもの設計の話になります。 もっとも、今回の問題はそこではないのですが…。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問