AWS не может подписывать URL-адреса CloudFront

Исключено: я хочу получить подписанные URL-адреса с помощью своего URL-адреса AWS CloudFront.

Что я сделал: я создал инстинкт AWS CloudFront и включил функцию " Ограничить доступ зрителя", " Доверенные подписчики" - это " Я".

Ниже приведен код PHP, который я хочу подписать URL

function getSignedURL()
{
    $resource = 'http://d2qui8qg6d31zk.cloudfront.net/richardcuicks3sample/140-140.bmp'; 
    $timeout = 300;       

    //This comes from key pair you generated for cloudfront
    $keyPairId = "YOUR_CLOUDFRONT_KEY_PAIR_ID";

    $expires = time() + $timeout; //Time out in seconds
    $json = '{"Statement":[{"Resource":"'.$resource.'","Condition":{"DateLessThan":{"AWS:EpochTime":'.$expires.'}}}]}';             

    //Read Cloudfront Private Key Pair
    $fp=fopen("private_key.pem","r"); 
    $priv_key=fread($fp,8192); 
    fclose($fp); 

    //Create the private key
    $key = openssl_get_privatekey($priv_key);
    if(!$key)
    {
            echo "<p>Failed to load private key!</p>";
            return;
    }

    //Sign the policy with the private key
    if(!openssl_sign($json, $signed_policy, $key, OPENSSL_ALGO_SHA1))
    {
            echo '<p>Failed to sign policy: '.openssl_error_string().'</p>';
            return;
    }

    //Create url safe signed policy
    $base64_signed_policy = base64_encode($signed_policy);
    $signature = str_replace(array('+','=','/'), array('-','_','~'), $base64_signed_policy);

    //Construct the URL
    $url = $resource.'?Expires='.$expires.'&Signature='.$signature.'&Key-Pair-Id='.$keyPairId;

    return $url;
}

За $keyPairId а также private_key.pemЯ вошел в свою учетную запись root и сгенерировал эти две переменные в разделе Security Credentials->CloudFront Key Pairs.

Если я получу доступ http://d2qui8qg6d31zk.cloudfront.net/richardcuicks3sample/140-140.bmp в браузере напрямую. Это будет ответ как

<Error>
  <Code>MissingKey</Code>
  <Message>
    Missing Key-Pair-Id query parameter or cookie value
  </Message>
</Error>

После того, как я запустил функцию, я получил длинный подписанный URL, проанализировал URL в браузере Chrome, он ответит как

<Error>
  <Code>InvalidKey</Code>
  <Message>Unknown Key</Message>
</Error>

Вопрос: У меня есть поиск по документу AWS и я много гуглю об этом. Может ли кто-нибудь сказать мне, почему это произошло или я что-то пропустил? Заранее спасибо!

4 ответа

$ Priv_key= Fread($ ∥f∥p,8192);

Если я понимаю, вы сгенерировали ключ. Если это так, похоже, вы устанавливаете размер ключа, который не поддерживается.

  • Пара ключей должна быть парой ключей SSH-2 RSA.
  • Пара ключей должна быть в формате PEM в кодировке base64.
  • Поддерживаемые длины ключей 1024, 2048 и 4096 бит

Документы: https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-trusted-signers.html

Я выбрал группы доверенных ключей и получил ошибку invalidkey/unknownkey, когда изначально думал, что идентификатор пары ключей совпадает с идентификатором ключа доступа в разделе «Мои учетные данные безопасности». Правильно использовать этот идентификатор из ваших открытых ключей (CloudFront> Управление ключами> Открытые ключи).

Спасибо @imperalix за ответ на этот вопрос.

Я решил эту проблему,

Вдохновленный этим сайтом, я обнаружил, что использовал неверный URL-адрес CloudFront для подписи.

До: http://d2qui8qg6d31zk.cloudfront.net/richardcuicks3sample/140-140.bmp

После: http://d2qui8qg6d31zk.cloudfront.net/140-140.bmp

Поскольку я создаю дистрибутив CloudFront для корзины richardcuicks3sample, поэтому не нужно включать это имя корзины в URL. После того, как я изменил URL, подписанный URL работает хорошо.

Мне удалось решить проблему, выполнив следующие действия:

  1. Перейти к раздаче Cloudfront
  2. Перейдите на вкладку "Поведение".
  3. Установите флажок и нажмите Редактировать.
  4. Выберите Trusted Signer в переключателе Trusted Key Groups или Trusted Signer.
  5. Нажмите кнопку "Сохранить".

https://www.lazydeveloper.tech/aws/aws-cloudfront-invalidkey-unknown-key-when-using-signed-urls/

Другие вопросы по тегам