フロントエンドにAWS認証情報を保存する

ウィルヘルム・ソルバン

JavaScriptフロントエンドアプリケーションから、S3から画像オブジェクトを取得しようとしています。

ドキュメントによると、必要な手順は次のとおりです。

import * as AWS from "aws-sdk";

AWS.config.update({accesKeyId, secretAccesKey, region});

let s3 = new AWS.S3();

そして、次のようなオブジェクトを取得できます。

function listObjects(bucketName, folderName) {
  return new Promise((resolve) => {
    s3.listObjects({Bucket: bucketName, Prefix: folderName}).promise()
      .then((data) => {
        resolve(data.Contents);
      })
  });
}

すべてが正しく機能しているように見えますが、心配なのは、バケットにアクセスするために、フロントエンドアプリケーションでaccessKeyIdとsecretAccessKeyも保持する必要があることです。

バケットを保護する方法、またはこれらの機密データを提供せずにオブジェクトにアクセスする方法を教えてください。

ダニエルファレル

あなたは心配する権利があります。誰でもアプリから認証情報を取得できるようになります。これにはいくつかのアプローチがあります。

  • オブジェクトが実際に機密性を持たない場合、資格情報がすべての人に許可したいアクションのみを実行できれば、何も失われませんさらに言えば、バケットにアクセス許可を適切に設定すれば、資格情報の必要性をすべてまとめて取り除くことができるはずです。必要に応じて、リストのアクセス許可も含まれていると思います。

  • オブジェクト機密である場合、ユーザー用の何らかの認証システムがすでにあります。Oauthアカウントを使用して認証(google、amazon、facebookなど)を行っている場合は、AWS Cognitoを使用して、そのユーザーに関連付けられた短期間のAWS認証情報を生成できます。これにより、ユーザー間の権限を区別できます。すでにoauthを使用している場合は、かなり滑らかでぴったりです。oauthを使用していない場合は、使用する必要があるかどうかを検討してください。ユーザーに独自の認証資格情報レイヤーを渡すよりもはるかに安全です。https://aws.amazon.com/cognito/

  • cognitoを使用したくない、または使用できない場合でも、バックエンドからAWSの役割を引き受け、15分から1時間以上で自動的に期限切れになる一時的な認証情報を生成して、それらの認証情報をフロントエンドに渡すことができます。私はそれを「貧乏人のコグニート」と呼んでいますが、サービスを提供するためにインフラストラクチャを実行する方が、コグニートのコストよりも実際にはおそらく費用がかかると思います。

  • または、@ Tomasz Swinderが示唆しているように、アプリケーションを介してリクエストをプロキシし、ユーザーがリクエストしたアセットをs3リソースに解決し、バックエンドにプルしてからユーザーに提供するだけです。サーバーはs3のエンドポイントよりもエンドユーザーから離れているため、これはほとんどの場合劣ったソリューションです。また、プロキシするインフラストラクチャを実行する必要があります。しかし、そうは言っても、それはその場所です。

  • 最後に、事前に署名されたs3URLがアプリケーションに適している場合があります。通常、バックエンドは、ユーザーに提供する前にs3URLに直接署名します。署名は操作(PUTまたはGET)を承認するのに十分ですが、署名に使用される秘密鍵は含まれていません。つまり、事前署名されたURLは承認されたURLを提供しますが、承認に使用される資格情報は提供しません。 'は、s3にアドホック認証を提供するための優れた方法です。

全体として、バックエンドのないアプリケーションがあることは本当に素晴らしいことです。そのためには、サードパーティの認証とcognitoのようなものが必要になります。ただし、使用を開始すると、あらゆる種類のawsサービスを使用して、バックエンドで実行されるものを提供できます。許可に注意してください。awsはすべて有料であり、通常、サービスへの呼び出しを制限して、残酷なインターネットユーザーが一時的なクレジットを使用して大量の呼び出しを行うことでAWSの請求額を引き上げようとする機能はありません。それらを提供しました。これに対する注目すべき例外の1つは、API Gatewayです。これは、ユーザーごとのレート制限を許可するため、認識認証されたサーバーレスバックエンドに最適です。

また、s3オブジェクトのリストはs3オブジェクトのGETよりもはるかに遅く、はるかに高価である(操作ごとに安価ですが、10倍)ため、通常は可能な限りlISTを呼び出さないようにするのが最善です。私はただそれをそこに投げています、私はあなたがs3接続をテストするためにそれをしているのではないかと思います。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

AWS Cloudwatchログクライアントに認証情報を指定する

分類Dev

コマンドラインからGCP認証情報をエアフローに追加する

分類Dev

Dockerコンテナーで実行されているコードにAWS認証情報(IAMロール認証情報)を渡す

分類Dev

Chromeアプリにログイン認証情報を保存する

分類Dev

Reactフロントエンドに認証トークンを安全に保存する

分類Dev

Djangoサーバーのフロントエンドボタンに関する情報を保存するにはどうすればよいですか?

分類Dev

サービスアカウントの認証情報を使用してGoogleドライブにファイルをアップロードする方法

分類Dev

Rubyクライアントスクリプトに認証資格情報を安全に保存する方法は?

分類Dev

Spotify Auth +フロントエンドJavaScript +クライアント認証情報フロー

分類Dev

FirebaseAuthがサインインできるように認証情報をローカルストレージに保存する方法

分類Dev

AWS認証情報プロバイダーからセキュリティトークンを取得する

分類Dev

フロントエンドごとに基本認証を指定する方法

分類Dev

認証トークンにサインオンする情報

分類Dev

「認証資格情報が提供されませんでした」を取得するDRFAPIエンドポイント

分類Dev

特定のプロファイルでaws認証情報を設定するためのシェルコマンドはありますか

分類Dev

別のアカウントにアクセスするために、実行中のCLI GoプログラムからAWS認証情報を更新する

分類Dev

IAMロール認証情報を使用してPythonでS3にアンロードする

分類Dev

AWS CLI構成と認証情報ファイルの行をコメントアウトするにはどうすればよいですか?

分類Dev

AWS CLI構成と認証情報ファイルの行をコメントアウトするにはどうすればよいですか?

分類Dev

AWS CLI構成と認証情報ファイルの行をコメントアウトするにはどうすればよいですか?

分類Dev

Angular2 フロントエンドから Spring バックエンドに資格情報を渡すにはどうすればよいですか (Spring Security を使用した基本認証)

分類Dev

サーバー側からフロントエンド側に情報を取得する

分類Dev

リクエストせずにAWS認証情報が存在するかどうかを確認します

分類Dev

EC2インスタンスにAWS認証情報をロードできません

分類Dev

Ruby PayPal SDK、認証コードからトークン情報を取得すると400エラーがスローされます

分類Dev

自動化されたAndroidテストにログイン認証情報を提供する方法は?

分類Dev

エラー:setSecret:AWSで認証情報ローテーションを設定するときに、以前、現在、または保留中のシークレットでデータベースにログインできません

分類Dev

AWS認証情報をDockerに渡す

分類Dev

ホストのAWSEC2インスタンスプロファイルではなくAWS共有認証情報を使用するようにTerraformCLIに依頼する方法

Related 関連記事

  1. 1

    AWS Cloudwatchログクライアントに認証情報を指定する

  2. 2

    コマンドラインからGCP認証情報をエアフローに追加する

  3. 3

    Dockerコンテナーで実行されているコードにAWS認証情報(IAMロール認証情報)を渡す

  4. 4

    Chromeアプリにログイン認証情報を保存する

  5. 5

    Reactフロントエンドに認証トークンを安全に保存する

  6. 6

    Djangoサーバーのフロントエンドボタンに関する情報を保存するにはどうすればよいですか?

  7. 7

    サービスアカウントの認証情報を使用してGoogleドライブにファイルをアップロードする方法

  8. 8

    Rubyクライアントスクリプトに認証資格情報を安全に保存する方法は?

  9. 9

    Spotify Auth +フロントエンドJavaScript +クライアント認証情報フロー

  10. 10

    FirebaseAuthがサインインできるように認証情報をローカルストレージに保存する方法

  11. 11

    AWS認証情報プロバイダーからセキュリティトークンを取得する

  12. 12

    フロントエンドごとに基本認証を指定する方法

  13. 13

    認証トークンにサインオンする情報

  14. 14

    「認証資格情報が提供されませんでした」を取得するDRFAPIエンドポイント

  15. 15

    特定のプロファイルでaws認証情報を設定するためのシェルコマンドはありますか

  16. 16

    別のアカウントにアクセスするために、実行中のCLI GoプログラムからAWS認証情報を更新する

  17. 17

    IAMロール認証情報を使用してPythonでS3にアンロードする

  18. 18

    AWS CLI構成と認証情報ファイルの行をコメントアウトするにはどうすればよいですか?

  19. 19

    AWS CLI構成と認証情報ファイルの行をコメントアウトするにはどうすればよいですか?

  20. 20

    AWS CLI構成と認証情報ファイルの行をコメントアウトするにはどうすればよいですか?

  21. 21

    Angular2 フロントエンドから Spring バックエンドに資格情報を渡すにはどうすればよいですか (Spring Security を使用した基本認証)

  22. 22

    サーバー側からフロントエンド側に情報を取得する

  23. 23

    リクエストせずにAWS認証情報が存在するかどうかを確認します

  24. 24

    EC2インスタンスにAWS認証情報をロードできません

  25. 25

    Ruby PayPal SDK、認証コードからトークン情報を取得すると400エラーがスローされます

  26. 26

    自動化されたAndroidテストにログイン認証情報を提供する方法は?

  27. 27

    エラー:setSecret:AWSで認証情報ローテーションを設定するときに、以前、現在、または保留中のシークレットでデータベースにログインできません

  28. 28

    AWS認証情報をDockerに渡す

  29. 29

    ホストのAWSEC2インスタンスプロファイルではなくAWS共有認証情報を使用するようにTerraformCLIに依頼する方法

ホットタグ

アーカイブ