AWS SDK for PHP バージョン 3 で署名された Amazon S3 URL - AWS SDK for PHP

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

AWS SDK for PHP バージョン 3 で署名された Amazon S3 URL

認証HTTPヘッダーを使用する代わりに、必要な情報をクエリ文字列パラメータとして渡すことで、特定のタイプのリクエストを認証できます。これは、サードパーティーのブラウザで、リクエストのプロキシを行わずにプライベートの Amazon S3 データに直接アクセスさせる場合に便利です。アイデアは、「署名付き」リクエストを構築し、エンドユーザーのブラウザURLが取得できる としてエンコードすることです。さらに、署名付きのリクエストは、有効期限を指定することで制限できます。

以下の例では、次の方法を示しています。

  • を使用して S3 オブジェクトを取得するURLには、署名付き を作成しますcreatePresignedRequest

のすべてのサンプルコード AWS SDK for PHP は、 で GitHub入手できます。

認証情報

サンプルコードを実行する前に、「」の説明に従って AWS 認証情報を設定します認証情報。次に AWS SDK for PHP、「」で説明されているように、 をインポートします基本的な使用法

署名付きリクエストの作成

Aws\S3\S3Client::createPresignedRequest() メソッドを使用して、Amazon S3 オブジェクトURLへの署名を取得できます。このメソッドでは、Aws\CommandInterface オブジェクトと期限切れタイムスタンプを受け付け、署名付き Psr\Http\Message\RequestInterface オブジェクトを返します。リクエストURLの getUri()メソッドを使用して、オブジェクトの署名付き を取得できます。

最も一般的なシナリオは、オブジェクトURLに事前署名された を作成するGETことです。

インポート

use Aws\Exception\AwsException; use AwsUtilities\PrintableLineBreak; use AwsUtilities\TestableReadline; use DateTime; require 'vendor/autoload.php';

サンプルコード

$command = $s3Service->getClient()->getCommand('GetObject', [ 'Bucket' => $bucket, 'Key' => $key, ]);

署名付き の作成 URL

コマンドオブジェクトを作成するための getCommandメソッドを使用して、任意の Amazon S3 オペレーションURLsの事前署名を作成し、 コマンドを使用して createPresignedRequest()メソッドを呼び出します。最終的にリクエストを送信するときは、返すリクエストと同じメソッドと同じヘッダーを必ず使用します。

サンプルコード

try { $preSignedUrl = $s3Service->preSignedUrl($command, $expiration); echo "Your preSignedUrl is \n$preSignedUrl\nand will be good for the next 20 minutes.\n"; echo $linebreak; echo "Thanks for trying the Amazon S3 presigned URL demo.\n"; } catch (AwsException $exception) { echo $linebreak; echo "Something went wrong: $exception"; die(); }

オブジェクトURLへの の取得

Amazon S3 バケットに保存されているオブジェクトURLに対してパブリックのみが必要な場合は、 Aws\S3\S3Client::getObjectUrl()メソッドを使用できます。このメソッドは、指定されたバケットとキーURLに署名されていない を返します。

サンプルコード

$preSignedUrl = $s3Service->preSignedUrl($command, $expiration);
重要

このメソッドによってURL返された は、バケットまたはキーが存在することを確認するために検証されません。また、このメソッドは、オブジェクトが認証されていないアクセスを許可することを保証しません。