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
gefragt vor 5 Jahren314 Aufrufe
2 Antworten
0

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

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

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

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

semnil
beantwortet vor 5 Jahren
0

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

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

ncd-aws
beantwortet vor 5 Jahren

Du bist nicht angemeldet. Anmelden um eine Antwort zu veröffentlichen.

Eine gute Antwort beantwortet die Frage klar, gibt konstruktives Feedback und fördert die berufliche Weiterentwicklung des Fragenstellers.

Richtlinien für die Beantwortung von Fragen