「翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。」
Amazon S3バージョン 3 での の署名付き URLAWS SDK for PHP
Authorization HTTP ヘッダーを使用する代わりに、必要な情報をクエリ文字列パラメーターとして渡すことで、特定の種類のリクエストを認証できます。これは、サードパーティのブラウザで、リクエストをプロキシに委任せずに、プライベートの Amazon S3 データに直接アクセスできるようにするときに便利です。これを行うには、「署名付き」のリクエストを作成し、エンドユーザーのブラウザが取得できる URL としてエンコードします。さらに、署名付きのリクエストは、有効期限を指定することで制限できます。
以下の例では、次の方法を示しています。
-
署名付き URL を作成し、 を使用して S3 オブジェクトを取得しますcreatePresignedRequest。
AWS SDK for PHPバージョン 3 用のすべてのサンプルコードは で入手できますGitHub。
Credentials
サンプルコードを実行する前に、「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 の作成
コマンドオブジェクトを作成するためのURLsメソッドを使用して任意の Amazon S3 オペレーション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 はバケットまたはキーが必ず存在することを検証しません。またこのメソッドではオブジェクトが認証されていないアクセスを許可することも保証されません。