Amazon S3の署名バージョンについて

0

お世話になっております。

サーバーアクセスログ取得で、署名バージョンを確認したところ署名バージョンの箇所で「-」と記載されていました。
調べたところ、署名バージョンの箇所での「-」は認証されていないリクエストの場合に表示されるとのことでした。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;
ncd-aws
質問済み 5年前302ビュー
2回答
0

SDK の実装を参考にするのが一番良いかもしれません。

https://github.com/aws/aws-sdk-php/blob/master/src/Signature/SignatureV4.php#L137

サーバが返した情報($resultArray)をそのまま使って

X-Amz-SignedHeaders は別途指定しているのでしょうか。

semnil
回答済み 5年前
0

ご回答いただきまして、ありがとうございました。

下記の記事にありますように、仕様が変更になり、2020年6月までに作成された
バケットについてはSigV2 署名付きリクエストがサポートされるようなので、
この質問については完了とさせて頂きます。
https://aws.amazon.com/jp/blogs/news/amazon-s3-update-sigv2-deprecation-period-extended-modified/

ncd-aws
回答済み 5年前

ログインしていません。 ログイン 回答を投稿する。

優れた回答とは、質問に明確に答え、建設的なフィードバックを提供し、質問者の専門分野におけるスキルの向上を促すものです。

質問に答えるためのガイドライン