お世話になっております。
下記の通り、Amazon S3で署名バージョン2が2019年6月23日に使用できなくなる件の改修方法について
質問させていただきます。
https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/dev/UsingAWSSDK.html#UsingAWSSDK-sig2-deprecation
現在業務では、AWSPHPSDKv2 を使用しており、バージョンアップは難しいため、
PHP SDK v2 用の Amazon S3 サービスクライアントを構築する場合は、signature パラメータを v4 に設定する設定を取り入れようとしております。
ただ、サーバ側からではなく、クライアント側から直接下記のようにS3へファイルをアップロードする処理があります。
1.画面から対象のZIPファイルを選択し、選択されたZIPファイルの情報をサーバに送る
2.サーバがクライアントの認証及びS3へアクセスするためのトークンを発行する
3.サーバからもらったポリシーとシグニチャと一緒に選択されたZIPファイルをS3に送る
上記の処理のうち、2でS3へアクセスするためのトークンを発行しているのですが、
署名バージョンを指定する設定が既存の処理に既に組み込まれており、署名バージョン4を明記する
ためにどこを改修を行えばよいかがわかりません。
下記にトークン作成処理を記述します。
$expiration = gmdate ( "Y-m-d\TH:i:s\Z", strtotime ( 20 ) ); // Policy Limit
$acl = 'private'; // set acl (private | public-read | public-read-write | authenticated-read | bucket-owner-read | bucket-owner-full-control)
$status = '200'; // return this status code when upload success.
$maxSize = 1024;
$policy = <<<EOS
{
"expiration": "$expiration",
"conditions": \[
{"bucket": "接続先バケット名"},
\["starts-with", "\$key", "$imageDir/"],
{"acl": "$acl"},
{"success_action_status": "$status"},
\["starts-with", "\$Content-Type", ""],
\["content-length-range", 0, $maxSize]
]
}
EOS;
$signature = hash_hmac ( "sha1", base64_encode ( $policy ), AWSセレクトキー, true );←ここで署名を作成している
$resultArray = array(
'url' => 'https://' . 接続先バケット名 . '.s3.amazonaws.com/',
'form' => array (
'key' => ファイルディレクトリパス,
'AWSAccessKeyId' => AWSキー,
'acl' => $acl,
'success_action_status' => $status,
'policy' => base64_encode ( $policy ),
'signature' => base64_encode ( $signature ),
'Content-Type' => 'application/zip'
)
);
署名バージョン4を使用するように明記するにはどのように設定すればよいのか、アドバイスの程お願いいたします。
参考URL:https://qiita.com/supertaihei02/items/a4f663d837e51f2f72b0