AWS SDK for PHP バージョン 3 での Amazon S3 の署名付き URL - AWS SDK for PHP

AWS SDK for PHP バージョン 3 での Amazon S3 の署名付き URL

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

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

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

AWS SDK for PHP バージョン 3 用のすべてのサンプルコードは GitHub で入手できます。

認証情報

サンプルコードを実行する前に、「AWS SDK for PHP バージョン 3 の認証情報」の説明に従って AWS 認証情報を設定します。次に、「AWS SDK for PHP バージョン 3 の基本的な使用パターン」の説明に従って AWS SDK for PHP をインポートします。

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

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

最も一般的なシナリオは、オブジェクトを GET するために、署名付き URL を作成します。

インポート

require 'vendor/autoload.php'; use Aws\S3\S3Client; use Aws\Exception\AwsException;

サンプルコード

$s3Client = new Aws\S3\S3Client([ 'profile' => 'default', 'region' => 'us-east-2', 'version' => '2006-03-01', ]); $cmd = $s3Client->getCommand('GetObject', [ 'Bucket' => 'my-bucket', 'Key' => 'testKey' ]); $request = $s3Client->createPresignedRequest($cmd, '+20 minutes');

署名付き URL の作成

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

サンプルコード

//Creating a presigned URL $cmd = $s3Client->getCommand('GetObject', [ 'Bucket' => 'my-bucket', 'Key' => 'testKey' ]); $request = $s3Client->createPresignedRequest($cmd, '+20 minutes'); // Get the actual presigned-url $presignedUrl = (string)$request->getUri();

オブジェクトの URL の取得

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

サンプルコード

//Getting the URL to an object $url = $s3Client->getObjectUrl('my-bucket', 'my-key');
重要

このメソッドから返された URL はバケットまたはキーが必ず存在することを検証しません。またこのメソッドではオブジェクトが認証されていないアクセスを許可することも保証されません。