2017-02-17 2 views
0

私は、Amazon S3でホストされているファイルへの無料(ただし一時的な)アクセスを提供するWordPressサイトで作業しています。これは、Amazon SDKのための単一の使用であるため、that functionのために、ライブラリ全体とその依存関係をサーバーに含めるのはかなり不合理だと思われます。cURL/PHPは、Amazon S3オブジェクトの予約済みURLをリモートからリクエストできますか?

cURL(PHP)を使用してサーバーから命令を渡し、他の方法でAmazonから予約済みURLをフェッチする方法はありますか?

+0

ディスク容量は安い – user2182349

+0

ポイントはディスク容量ではありません。それは私が最新の状態にしなければならない数千行のコードの管理者になりつつあります。 –

+0

Composerを使用する必要があります。これはコードを最新の状態に保ちます。バージョンコントロールからAWSコードを除外することができます。ほとんどの場合、利用可能なライブラリを使用する方が、特にAmazonのような複雑なサービスでは、独自のコードを記述するよりも優れています。 – user2182349

答えて

1

サービスから事前に署名されたURLを「フェッチ」するのはよくある誤解ですが、そうではありません。

これらはコード内(またはSDKコード内でローカル)に生成されています。あなたの秘密鍵は、URLが表す要求の正規表現のHMACダイジェストを生成するために使用されます。サービスがリクエストを受信すると(URLがクリックされたときなど)、サービスはリクエストを正規化し、あなたのシークレット(URLにはないが、あなたとサービスに知られている)からハッシュを生成し、 (要求されたアクセスキーIDが実際に要求を許可する許可を有することを保証するために)認可段階に進むことを許可されたとみなされる。結果が一致しない場合は、キーまたはシークレットが間違っているか、サイドの署名コードがエラーになっているか、署名されたURLが署名されてから変更されています。アクセスが拒否されました。

署名付きURLを返すサービスエンドポイントはありませんが、ラムダとAPIゲートウェイを使用して、サーバーが呼び出すためのものを比較的簡単に作成できます。たとえば、ノード用のLambdaには既にSDKがインストールされているため、HTTPS経由でURLを渡してURLを返すことができます。シンプルだが少しばかげている。もちろん、APIを必要とするため、ネイティブ認証を使用できないため、APIキーまたはシークレットヘッダーを使用してアプリケーションからのリクエストを認証する必要があります。 :)

署名入りURLを作成する独自のコードを生成することはそれほど難しくありません。プロセスはfully documentedですが、そのページでSDKを使用することをお勧めします。この理由は、アルゴリズムの独自の実装を書くためのコーディングに十分に熟練していなくても、侵入の障壁にならないということです。

私は自分自身でこの実装を書いています...実際には、以前のV2 signing algorithm(これは2014年以前からオンラインだったどの地域でも動作します)の実装をSQLで完全に書いたこともあります。 MySQLストアドファンクション(例:SELECT get_signed_url('/bucket/key');)は、GETオブジェクトに署名されたURLを返します。その資格は関数内に変数として格納されます)... SQLはおそらくこのような操作のために考えられる言語ではないと考えられます完全に。

自分で書くことができます。

しかし、メンテナンス上の理由からSDKを含むことへの反対は、間違っています。

AWSでは、サービスAPIに大きな変更はありません。

彼らはそうではありません。 S3がListObjectsアクションのバージョン2を導入したとき、V1は引き続き利用可能でした。 V2を使用することをお勧めしますが、V1はではなく、であり、削除されることはありません。

シグネチャバージョン4(前述)が導入されたとき、以前のすべてのリージョンに追加され、既に使用可能な場所にシグネチャバージョン2が残され、V4のみで新しいリージョンが展開されました。 Sig V2も推奨されていませんが、V4が推奨されています。S3でのオブジェクトのバージョン管理は、オブジェクトのバージョン管理を理解していないコードと100%後方互換性があるように書かれていました。リストは続く。

新しい機能を利用したい場合を除いて、あなたに影響する可能性のあるバグや、セキュリティに関連するバグ(ほとんどありそうもない)は、SDKの現在のバージョンをプロジェクトで置き換える必要はありません。サービス、または新しいAWS領域を使用することができます。これは、安定したプロジェクトで頻繁に起こることはありません。

+0

それは素晴らしい答えです、マイケル。 –

関連する問題