Я играл с Google Bucket. Ведро не публичное. Файлы также не являются общедоступными.
После того, как я загружу файл .csv. Я нажимаю на нее, и в браузере в google chrome отображается файл с очень сложной URL-ссылкой.
Теперь, если я возьму эту ссылку и открою в другом браузере, например IE, в котором нет учетной записи Google, я могу получить доступ к данным. Это недостаток? Команда Google говорит, что это проблема с разрешениями. Я попробовал, удалив все разрешения, но файл все еще доступен. Вы наблюдаете ту же проблему со своими ведрами?
Далее предполагается, что имя сегмента - xtest
, а имя объекта - test.txt
.
Этот длинный сложный URL-адрес содержит подпись, которая предоставляет разрешения на доступ к объекту.
Если URL-адрес выглядит очень сложным и не похож на этот, то, вероятно, он имеет подпись как часть URL-адреса.
http://xtest.storage.googleapis.com/test.txt
ИЛИ
http://storage.googleapis.com/xtest/test.txt
Если URL-адрес не содержит подписи, которая позволяет любому получить доступ к объекту корзины, то следующие шаги - выяснить, какие разрешения были применены, разрешая анонимный доступ.
Выясните, какие разрешения применяются к корзине и объекту.
Я предпочитаю использовать CLI gsutil
, чтобы иметь точный JSON, описывающий все разрешения.
Есть два метода предоставления доступа к сегментам и объектам. ACL сегментов и политики IAM сегментов.
ЧАСТЬ 1 - ACL сегментов
Получите список ACL для сегмента.
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
При изменении списков управления доступом к корзине или файлу может потребоваться около минуты, чтобы вступить в силу.
Повторите процесс для объекта:
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 - Политики сегмента IAM
Получите политику сегмента IAM.
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
Эта команда удалит всех аутентифицированных пользователей из политики 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
Дай мне знать, что ты узнал. Я пишу статьи о Google Cloud Authentication, учетных данных и токенах доступа. Я также планирую заняться предоставлением временных объектов (URL). Ссылка: jhanley.com
Длинная сложная ссылка на самом деле является временной ссылкой, срок действия которой истекает через несколько минут. Но я проверяю в Google, как мы можем ограничить еще больше.