1

'ChangeResourceRecordSetsRequest'Amazon route53 の APIを呼び出そうとしていますが、毎回「Missing Authentication Error」が発生します。ここで何が間違っているのかわかりません。どなたか見ていただけませんか?以下は私のコードです:

    $AWSAccessKeyId = "##########";
    $SecretAccessKey = "#################";
    $Timestamp = gmdate('D, d M Y H:i:s') . ' GMT';

    $Signature = base64_encode(hash_hmac("sha256",$Timestamp,$SecretAccessKey));
    $AuthenticationToken = "AWS3-HTTPS AWSAccessKeyId=".$AWSAccessKeyId.", Algorithm=HmacSHA256,Signature=".$Signature;
       $headers = array(
          'X-Amzn-Authorization: $AuthenticationToken',
          'x-amz-date: $Timestamp',
          'Content-Type: text/xml;charset=utf-8',
        );

    $endpoint = 'https://route53.amazonaws.com/2012-12-12/hostedzone/######/rrset';

    $session  = curl_init($endpoint);                       // create a curl session
    curl_setopt($session, CURLOPT_POST, true);              // POST request type
    curl_setopt($session, CURLOPT_POSTFIELDS, $xmlRequest); // set the body of the POST
    curl_setopt($session, CURLOPT_RETURNTRANSFER, true);    // return values as a string - not to std out
    curl_setopt($session, CURLOPT_HTTPHEADER, $headers);
    $responseXML = curl_exec($session);
4

1 に答える 1

1

に余分なスペースがあるようです$AuthenticationToken。コンマと「アルゴリズム」の間に 1 つがあってはなりません。それ以外には、見た目がおかしいものは見当たりません。

ただし、AWS SDK for PHP によって提供される Route53 クライアントを使用することをお勧めします。これは、認証スキームが既に実装およびテストされており、サービスの認証スキームが将来変更された場合でも最新の状態を維持できるためです。

于 2013-12-02T08:09:39.963 に答える