Облачное хранилище Google получило подпись от CDN npm - PullRequest
0 голосов
/ 20 сентября 2018

Я использую следующий код для создания подписанного URL для своего контента:

var storage = require('@google-cloud/storage')();
var myBucket = storage.bucket('my-bucket');
var file = myBucket.file('my-file');

//-
// Generate a URL that allows temporary access to download your file.
//-
var request = require('request');

var config = {
  action: 'read',
  expires: '03-17-2025'
};

file.getSignedUrl(config, function(err, url) {
  if (err) {
    console.error(err);
    return;
  }

  // The file is now available to read from the URL.

});

Это создает URL, начинающийся с https://storage.googleapis.com/my-bucket/

Если я размещу этот URLв браузере он доступен для чтения.

Тем не менее, я предполагаю, что URL является прямым доступом к файлу корзины и не проходит через мой настроенный CDN.

Я вижу это в документах (https://cloud.google.com/nodejs/docs/reference/storage/1.6.x/File#getSignedUrl) вы можете передать опцию cname, которая преобразует URL для замены https://storage.googleapis.com/my-bucket/ в мой CDN корзины.

ОДНАКО, когда я копирую результирующий URL, учетная запись службы или результирующий URL непохоже, у него есть доступ к ресурсу.

Я добавил учетную запись службы администрирования firebase в корзину, но все равно не получаю доступа.

Кроме того, из документов CDN, подписанный URL, кажетсямного отличается от подписанного через этот API. Можно ли создать из API URL-адрес со знаком CDN, или я должен вручную создать его, как описано в: https://cloud.google.com/cdn/docs/using-signed-urls?hl=en_US&_ga=2.131493069.-352689337.1519430995#configuring_google_cloud_storage_permissions?

Ответы [ 2 ]

0 голосов
/ 25 сентября 2018

Сеть доставки контента Cloud CDN работает с балансировкой нагрузки HTTP (S) для доставки контента вашим пользователям.Вы используете HTTPS Load Balancer для доставки контента своим пользователям?Вы можете увидеть этот прикрепленный документ [1] об использовании балансировки нагрузки Google Cloud CDN и HTTP (S) и вставке содержимого в кеш.

[1] https://cloud.google.com/cdn/docs/overview [2] https://cloud.google.com/cdn/docs/concepts

Какой код ошибки вы получаете?Можете ли вы использовать команду curl и отправить вывод с кодом ошибки для дальнейшего анализа.

Не могли бы вы подтвердить, что выполненная вами конфигурация соответствует требованию кешируемости, так как не все ответы HTTP кешируются?Google Cloud CDN кэширует только те ответы, которые удовлетворяют определенным условиям [3], пожалуйста, подтвердите.После подтверждения я проведу дальнейшее расследование и сообщу вам соответственно.

[3] Кешируемость: https://cloud.google.com/cdn/docs/caching#cacheability

Не могли бы вы предоставить мне вывод этих двух команд ниже, которые помогут мнепроверить, есть ли разрешение на эти объекты?Эти команды будут сбрасывать все текущие настройки прав доступа к объекту.

gsutil acl get gs: // [full_path_to_file_to_be_cached] gsutil ls -L gs: // [full_path_to_file_to_be_cached]

Подробнее об этомразрешения, обратитесь к этой документации GCP [4]

[4] Установка разрешений корзины: https://cloud.google.com/storage/docs/cloud-console#_bucketpermission

Нет, из API невозможно создать URL-адрес со знаком CDN

0 голосов
/ 20 сентября 2018

Для всех, кто интересуется кодом узла для этой подписи:

    var url = 'URL of the endpoint served by Cloud CDN';
    var key_name = 'Name of the signing key added to the Google Cloud Storage bucket or service';
    var key = 'Signing key as urlsafe base64 encoded string';
    var expiration = Math.round(new Date().getTime()/1000) + 600; //ten minutes after, in seconds

    var crypto = require("crypto");
    var URLSafeBase64 = require('urlsafe-base64');

    // Decode the URL safe base64 encode key
    var decoded_key = URLSafeBase64.decode(key);

    // buILD URL
    var urlToSign = url 
            + (url.indexOf('?') > -1 ? "&" : "?")
            + "Expires=" + expiration
            + "&KeyName=" + key_name;

    //Sign the url using the key and url safe base64 encode the signature
    var hmac = crypto.createHmac('sha1', decoded_key); 
    var signature = hmac.update(urlToSign).digest();
    var encoded_signature = URLSafeBase64.encode(signature);

    //Concatenate the URL and encoded signature
    urlToSign += "&Signature=" + encoded_signature;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...