お世話になっております。
サーバーアクセスログ取得で、署名バージョンを確認したところ署名バージョンの箇所で「-」と記載されていました。
調べたところ、署名バージョンの箇所での「-」は認証されていないリクエストの場合に表示されるとのことでした。https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/dev/LogFormat.html
こちらも2019年6月23日以降、署名バージョン2と同様にs3へのリスクエストが失敗し、使用できなくなってしまうのでしょうか。
処理は下記の通りです。
サーバが返した情報($resultArray)をそのまま使ってFormDataを作り、ajaxでPOST通信しております。
$params = array(
'access_key' => AWSAccessKeyId,
'secret_key' => AWSSecretAccessKey,
'bucket_name' => バケット名,
'region' => リージョン名,
'allowed_file_size' => $maxSize, // eg: 1073741824 (1 GB)
);
$dates = array(
'short' => gmdate('Ymd'),
'iso' => gmdate('Ymd\THis\Z'),
'expiry' => 3600,
);
// ポリシー作成
$policy = base64_encode(json_encode(array(
'expiration' => gmdate('Y-m-d\TG:i:s\Z', strtotime(300)),
'conditions' => array(
array('bucket' => $params\['bucket_name']),
array('starts-with', '$key', $imageDir.'/'),
array('starts-with', '$Content-Type', ''),
array('success_action_status' => $status),
array('x-amz-credential' => implode('/', array($params\['access_key'], $dates\['short'] , $params\['region'], 's3', 'aws4_request'))),
array('x-amz-algorithm' => 'AWS4-HMAC-SHA256'),
array('content-length-range', 0, $params\['allowed_file_size']),
array('x-amz-date' => $dates\['iso']),
array('x-amz-expires' => '' . $dates\['expiry'] . ''),
),
)));
//署名計算
$signature = hash_hmac('sha256', $dates\['short'], 'AWS4' . $params\['secret_key'], true);
$signature = hash_hmac('sha256', $params\['region'], $signature, true);
$signature = hash_hmac('sha256', 's3', $signature, true);
$signature = hash_hmac('sha256', 'aws4_request', $signature, true);
$signature = hash_hmac('sha256', $policy, $signature);
//リクエストに追加する
$resultArray = array(
'url' => 'https://' . $params\['bucket_name'] . '.s3-'. $params\['region'] .'.amazonaws.com/',
'form' => array (
'key' => $imageDir."/".$imageFileName,
'success_action_status' => '200',
'policy' => $policy,
'Content-Type' => '',
'x-amz-algorithm' => 'AWS4-HMAC-SHA256',
'x-amz-credential' => implode('/', array($params\['access_key'], $dates\['short'], $params\['region'], 's3', 'aws4_request')),
'x-amz-date' => $dates\['iso'],
'X-amz-expires' => $dates\['expiry'],
'X-amz-signature' => $signature
)
);
return $resultArray;