2017-01-25 4 views
2

私は、フロントエンドのjavascriptアプリケーションによってアクセスされるapiゲートウェイを持っています。そのことを念頭に置いて、私たちはapi鍵へのアクセスを実現可能に制限することはできません(私は思っていませんか?)ので、私は本当にIPアドレスで制限したいと思います...しかし、私はそれを行う方法を見つけることができません。実際にサーバーから来ていないので、それは可能ですか?パブリックAPIゲートウェイを特定のIPに限定する

このサイトはCloudfrontフロントのS3でホストされています。 APIゲートウェイはいくつかのキーを受け取り、ラムダスクリプトに当たってdynamodbに保存されます。もし誰かが欲しがっているのであれば、値を使って迷惑を掛けることができます。私は、Webアプリがそれに話すことができるようにしたい。私はまだたくさんのAWSを学んでいます!私はShieldやWAFを使うことができたと思っていたが、それは無事だったようだ。助言がありますか?

答えて

3

もちろん、自分のアプリでクレデンシャルやAPIキーをハードコードすることはお勧めしません。ほとんどの場合、WebフェデレーションIDプロバイダを使用してAPIを認可する方法を説明する記事がありますAPI Gateway(Setting Credentials in a Web Browser参照)を介して呼び出しますが、CloudFrontを使用しているため、もう1つの回避策があります。

S3の別のファイルにAPIキー(またはIAM資格情報)を格納できますが、特定のIPアドレスへのアクセスを制限することで、スクリプトがキーを取得してAPI呼び出しを行うことができます。他のすべてのIPアドレスはAPIキーを取得できません。したがって、APIメソッドを呼び出すことはできません。

  1. ユーザーにCloudFrontを介してのみコンテンツへのアクセスを要求します。参照:Using an Origin Access Identity to Restrict Access to Your Amazon S3 Contentこの方法では、S3 URLを使用してAPIキーを取得することはできません。
  2. 署名付きURLの作成に使用するAWSアカウントを指定します。参照:Specifying the AWS Accounts That Can Create Signed URLs and Signed Cookies (Trusted Signers)
  3. 長期有効期限のカスタムポリシーを使用して署名付きURLを作成します。参照:Creating a Signed URL Using a Custom Policy。缶詰のポリシーとは対照的に、カスタムポリシーを使用すると、コンテンツにアクセスできるユーザーのIPアドレスまたはIPアドレスの範囲を指定できます。 この署名付きURLは、APIメソッドを呼び出すたびに使用されます。
  4. CloudFrontの中にあなたのディストリビューションを選択して、あなたのAPIキーファイルを指すパスパターン、例えば、api-key.json行動を追加します。 ビューアアクセスの制限は、はいに設定されていることを確認してください。 優先度がのデフォルトの動作よりも優先されていることを確認してください(優先度は0です)。
  5. ビューアアクセスは、上記のAPIキーファイルを除いて、あなたのコンテンツの公共のすべてを行いますデフォルトキャッシュ動作のためにませんに設定されている制限することを確認してください。

:あなたが署名したURLが確実に特定の格納されていると誰もがそれへのアクセス権を持っていない場合は、IPアドレスをチェックするために冗長になるため、カスタムポリシーからIPアドレスの要件を削除することができますこの場合。もちろん、これにより、代わりに缶詰のポリシーを使用することができます。

+0

ボックスの外側にあります。私はそれが好きです。 –

+0

ありがとうございます。私は実際には、これまたは任意のソリューションが、この設定では動作するかどうかは確かではありません。アプリケーションはフロントエンドなので、サーバーのIPは決して送信することができません、私はないと思いますか? –

+0

フロントエンドのアプリケーションは静的なので、クライアント側のスクリプトはローカルマシンで実行されます。したがって、このコンテキストのIPアドレスは、S3/CloudFrontではなく* YOUR * IPです。あなたの場所に静的IPがない場合は、署名されたURLを保存し、APIキーファイルを取得するためにパラメータとして受け入れるようにアプリを設定するだけです。私はそのアプローチが今や明らかであることを望む。 –

関連する問題