Ссылка на файл хранилища Google общедоступна, хотя и не общедоступна? - PullRequest
0 голосов
/ 30 октября 2018

Я играл с Google Bucket. Ведро не является публичным. Файлы также не являются общедоступными.

После того, как я загрузил файл .csv. Я нажимаю на него, и он показывает файл с более сложной URL-ссылкой в ​​браузере в Google Chrome.

Теперь, если я воспользуюсь этой ссылкой и открою в другом браузере, например IE, в котором нет аккаунта Google, я не могу войти в данные. Это недостаток? Команда Google говорит, что это проблема с разрешениями. Я попробовал это, удалив все разрешения, но файл все еще доступен. Вы видите ту же проблему с вашими ведрами.

1 Ответ

0 голосов
/ 31 октября 2018

Далее предполагается, что имя сегмента равно xtest, а имя объекта - test.txt.

Этот длинный сложный URL-адрес содержит подпись, которая предоставляет разрешения на доступ к объекту.

Если URL-адрес выглядит очень сложным и выглядит не так, то, вероятно, он имеет подпись как часть URL-адреса.

http://xtest.storage.googleapis.com/test.txt

OR

http://storage.googleapis.com/xtest/test.txt

Если URL-адрес не содержит подписи, которая позволяет кому-либо получить доступ к объекту корзины, то следующие шаги должны выяснить, какие разрешения были применены, которые разрешают анонимный доступ.

Выясните, какие разрешения применяются к корзине и объекту.

Я предпочитаю использовать CLI gsutil, чтобы у меня был точный JSON, описывающий все разрешения.

Существует два метода предоставления доступа к контейнерам и объектам. Bucket ACL и политики Bucket IAM.

ЧАСТЬ 1 - ACL-списки

Получить ACL Bucket.

gsutil acl get gs://xtest

Это вернет JSON-ответ. Если ACL ведра содержит одну из следующих записей, ваше ведро выставлено.

[
  {
    "entity": "allUsers",
    "role": "READER"
  },
  {
    "entity": "allAuthenticatedUsers",
    "role": "READER"
  }
]

Удалить публичные разрешения.

Сущность allUsers разрешает кому-либо разрешения, указанные в role. Субъект allAuthenticatedUsers позволяет любому, имеющему учетную запись Google, права доступа, указанные в role.

Эта команда удалит allUsers из списка ACL.

gsutil acl ch -d allUsers gs:/xtest

Эта команда удалит allAuthenticatedUsers из списка ACL.

gsutil acl ch -d allAuthenticatedUsers gs:/xtest

При изменении списков ACL для группы или файла вступление в силу может занять около минуты.

Повторите процесс для объекта:

gsutil acl get gs://xtest/test.txt

Использование аналогичных команд для удаления любых общедоступных списков ACL:

gsutil acl ch -d allUsers gs://xtest/test.txt

gsutil acl ch -d allAuthenticatedUsers gs://xtest/test.txt

Повторите проверку, что публичные ACL были удалены.

gsutil acl get gs://xtest

gsutil acl get gs://xtest/test.txt

Часть 2 - Bucket IAM Policies

Получить Bucket IAM Policy.

gsutil iam get gs://xtest

Это вернет ответ JSON. Если политика IAM корзины содержит одну из следующих записей, ваша корзина открыта.

{
  "bindings": [
    {
      "members": [
        "allUsers"
      ],
      "role": "roles/storage.legacyBucketReader"
    },
    {
      "members": [
        "allAuthenticatedUsers"
      ],
      "role": "roles/storage.objectViewer"
    }
  ],
  "etag": "CBM="
}

Удалить публичные разрешения.

Сущность allUsers разрешает любому пользователю разрешения, указанные в роли. Сущность allAuthenticatedUsers позволяет любому пользователю с учетной записью Google получать разрешения, указанные в роли.

Эта команда удалит всех пользователей из стандартной политики IAM.

gsutil iam ch -d allUsers gs://xtest

Эта команда удалит все AuthenticatedUsers из политики IAM корзины.

gsutil iam ch -d allAuthenticatedUsers gs://xtest

Повторите процесс для объекта:

gsutil iam get gs://xtest/test.txt

Использование похожих команд для удаления любых политик IAM открытого объекта:

gsutil iam ch -d allUsers gs://xtest/test.txt

gsutil iam ch -d allAuthenticatedUsers gs://xtest/test.txt

Повторите проверку, что публичные политики IAM были удалены.

gsutil iam get gs://xtest

gsutil iam get gs://xtest/test.txt

...