S3のプライベートバケット上の画像に時限付きURLでアクセスする
今回はローカルPCとしてはmacを使用してS3のプライベートバケット上にある画像を時限付きのURLを発行してアクセスする手順を記載します。(デフォルトのクレデンシャル情報としてセットしておきます)
AWS SDK for PHPを使用してスクリプトを書いていきます。
事前作業としてはS3FullAccess権限のついたIAMユーザをローカルにセッティングし、composerのインストールも実施しておきます。
参考サイトは以下の公式サイトです。それでは手順にうつります。
作業手順
以下の作業手順の1.2は今回も同様になります。
1は作業用のディレクトリ作成および移動、2はAWS SDK for PHPのインストールです。
1. S3プライベートバケット作成および画像配置
以下の通りS3バケットを作成します。
名前は今回は「s3-private-test-bucket」にします。
パブリックアクセスをブロックした状態で、バケット作成時にファイルをアップロードしておきます。
2. アクセス確認(Deny)
この状態でオブジェクトのエンドポイント(URL)にアクセスしても、パブリックアクセスをブロックしているため、アクセスできません。
▼ エンドポイント
▼ アクセスDeny
3. 期限付きURLを発行するスクリプト作成
先ほどアップロードしたファイルにアクセス出来るように期限付きの URL を生成してみます。
SDK をインストールしたディレクトリと同じディレクトリに test2.php というファイルを作成します。
▼ test2.phpの内容
<?php require './vendor/autoload.php'; use Aws\S3\S3Client; use Aws\Exception\AwsException; $s3Client = new Aws\S3\S3Client([ 'profile' => 'default', 'region' => 'ap-northeast-1', 'version' => '2006-03-01', ]); $cmd = $s3Client->getCommand('GetObject', [ 'Bucket' => 's3-private-test-bucket', 'Key' => 'test.png' ]); $request = $s3Client->createPresignedRequest($cmd, '+20 minutes'); $presignedUrl = (string)$request->getUri(); print $presignedUrl;
スクリプトの内容としては、デフォルトのクレデンシャル情報を見にいきます。
バケット名(s3-private-test-bucket)、ファイル名(test.png)、期限(時間)(20 minutes)を指定します。
test2.php を以下のように実行します。
$ php test2.php
そうするとこのような長い期限付きURLが表示されます。
このURLにアクセスすると、以下の通り、見れなかった画像が見れるようになります!!
この事前付きURLは20分で設定しているので、20分後、同じURLでアクセスして見れるか確認してみます。
無事、20分後は見れなくなりました!
今日もお疲れ様でした。