копия gsutil, возвращающая «AccessDeniedException: 403 Недостаточное разрешение» от GCE


90

Я вошел в экземпляр GCE через SSH. Оттуда я хотел бы получить доступ к Хранилищу с помощью учетной записи службы:

GCE> gcloud auth list
Credentialed accounts:
 - 1234567890-compute@developer.gserviceaccount.com (active)

Сначала я убедился, что эта учетная запись службы отмечена флажком «Может редактировать» в разрешениях проекта, над которым я работаю. Я также удостоверился, что предоставил ему ACL записи в корзине, я бы хотел, чтобы он скопировал файл:

local> gsutil acl ch -u 1234567890-compute@developer.gserviceaccount.com:W gs://mybucket

Но тогда следующая команда не работает:

GCE> gsutil cp test.txt gs://mybucket/logs

(Я также убедился, что «журналы» создаются в «mybucket»).

Я получаю следующее сообщение об ошибке:

Copying file://test.txt [Content-Type=text/plain]...
AccessDeniedException: 403 Insufficient Permission               0 B  

Что мне не хватает?


7
Была ли создана виртуальная машина GCE с полным контролем или с областью действия GCS для чтения и записи?
jterrace 03

1
Спасибо, что указали на это. Я действительно не знал об этом варианте. Я воссоздал экземпляр с включенной опцией, и он сработал. Если бы вы могли предложить включить флаг в качестве ответа, я бы с радостью отметил его.
Christophe

Ответы:


136

Еще одна вещь, на которую следует обратить внимание, - это убедиться, что вы настроили соответствующие области при создании виртуальной машины GCE. Даже если к виртуальной машине подключена учетная запись службы, для доступа к GCS ей должны быть назначены области хранилища разработки.

Например, если вы создали свою виртуальную машину с devstorage.read_onlyобластью действия, попытка записи в корзину завершится ошибкой, даже если ваша учетная запись службы имеет разрешение на запись в корзину. Вам понадобится devstorage.full_controlили devstorage.read_write.

Дополнительные сведения см. В разделе « Подготовка экземпляра к использованию учетных записей служб» .

Примечание: учетная запись службы вычислений по умолчанию имеет очень ограниченные области (включая доступ только для чтения к GCS). Это сделано потому, что учетная запись службы по умолчанию имеет разрешения IAM редактора проекта. Если вы используете какую-либо учетную запись службы пользователя, это обычно не проблема, поскольку учетные записи служб, созданные пользователем, по умолчанию получают доступ ко всей области действия.

После добавления необходимых областей в виртуальную машину, gsutilвозможно, все еще будут использоваться кэшированные учетные данные, для которых нет новых областей. Удалите ~/.gsutilперед повторной попыткой использования команд gsutil. (Спасибо @mndrix за указание на это в комментариях.)


1
Я воссоздал свой экземпляр с разрешениями, и теперь все работает. Спасибо
Syclone

33
На данный момент вы можете редактировать области. Остановите машину - отредактируйте - затем измените области доступа Cloud API. Я считаю, что это доступно только около месяца.
Уоррен

146
После добавления необходимых областей действия к виртуальной машине, gsutilвозможно, все еще будут использоваться кэшированные учетные данные, для которых нет новых областей. Удалите ~ / .gsutil перед повторной попыткой выполнения gsutilкоманд.
mndrix

2
Большое вам спасибо, mndrix!
Гильермо

2
@mndrix спасает положение
Ben Guild

51

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

gcloud auth login

1
Не забудьте оформить gcloud auth revoke <email-account>после того, как закончите.
ssasa

51

gsutil config -b

Затем перейдите по указанному URL, [НАЖМИТЕ Разрешить]

Затем скопируйте проверочный код и вставьте в терминал.


Обратите внимание, что это не работает, если вы бежите gsutilиз ssh.
bfontaine

3
Он «не работает» постольку, поскольку не открывает ваш браузер. Вместо этого он предоставляет URL-адрес, который вы можете вручную скопировать и вставить.
BuvinJ 08

6
Это также отлично работает для всех остальных, если вы уроните-b . Это не откроет браузер, а просто выдаст URL-адрес, который можно открыть за пределами оболочки.
oligofren

9
  1. Остановить ВМ
  2. получил -> Сведения об экземпляре ВМ.
  3. в «Области доступа к Cloud API» выберите «Разрешить полный доступ ко всем Cloud API», затем нажмите «Сохранить».
  4. перезапустите виртуальную машину и удалите ~ / .gsutil.


8

Я написал ответ на этот вопрос, так как не могу оставлять комментарии:

Эта ошибка также может возникать, если в некоторых случаях вы запускаете gsutilкоманду с sudoпрефиксом.


3
Это действительно комментарий, а не ответ. Если немного больше репутации, вы сможете публиковать комментарии .
Lece

1
Я дал ответ (+1), чтобы @TheLoneDeranger по репутации был ближе к привилегии «Публиковать комментарии».
Ранн Лифшиц

3
  1. После того как вы создали корзину, перейдите на вкладку разрешений, добавьте свой адрес электронной почты и установите разрешение администратора хранилища .

снимок экрана

  1. Получите доступ к экземпляру виртуальной машины через команду SSH >> run: gcloud auth loginи следуйте инструкциям.

Ссылка: https://groups.google.com/d/msg/gce-discussion/0L6sLRjX8kg/kP47FklzBgAJ


2

Итак, я попробовал кучу вещей, пытаясь скопировать из корзины GCS на мою виртуальную машину. Надеюсь, этот пост кому-то поможет.

Через соединение SSHed: введите описание изображения здесь

и следуя этому сценарию:

sudo gsutil cp gs://[BUCKET_NAME]/[OBJECT_NAME] [OBJECT_DESTINATION_IN_LOCAL]

Получил эту ошибку:

AccessDeniedException: 403 Доступ не настроен. Перейдите в консоль Google Cloud Platform ( https://cloud.google.com/console#/project ) для своего проекта, выберите API и аутентификацию и включите Google Cloud Storage JSON API.

Это было исправлено после раздела «Активация API», упомянутого в этой ссылке - https://cloud.google.com/storage/docs/json_api/

введите описание изображения здесь

Как только я активировал API, я аутентифицировался в окне SSHed через

gcloud auth login

После процедуры аутентификации я наконец смог загрузить из Google Storage Bucket на мою виртуальную машину.

PS

Я позаботился:

  1. Убедитесь, что на моем экземпляре виртуальной машины установлен gsutils.
  2. Перейдите в мою корзину, перейдите на вкладку разрешений и добавьте нужные учетные записи служб и установите разрешение / роль администратора хранилища. введите описание изображения здесь

    3.Убедитесь, что у моей виртуальной машины есть подходящие области доступа к Cloud API: введите описание изображения здесь

введите описание изображения здесь


1

Из документов: https://cloud.google.com/compute/docs/access/create-enable-service-accounts-for-instances#changeserviceaccountandscopes

Вам нужно сначала остановить экземпляр -> перейти на страницу редактирования -> перейти в «Области доступа к облачному API» и выбрать «полный доступ к хранилищу или чтение / запись или что-то еще, для чего вам это нужно».

Изменение учетной записи службы и областей доступа для экземпляра.Если вы хотите запустить виртуальную машину как другое удостоверение или вы определяете, что экземпляру требуется другой набор областей для вызова необходимых API, вы можете изменить учетную запись службы и области доступа. существующего экземпляра. Например, вы можете изменить области доступа, чтобы предоставить доступ к новому API, или изменить экземпляр так, чтобы он работал как созданная вами учетная запись службы вместо учетной записи службы по умолчанию Compute Engine.

Чтобы изменить учетную запись службы и области доступа экземпляра, экземпляр необходимо временно остановить. Чтобы остановить свой экземпляр, прочтите документацию по Остановке экземпляра. После изменения учетной записи службы или областей доступа не забудьте перезапустить экземпляр. Используйте один из следующих методов для изменения учетной записи службы или доступа к областям остановленного экземпляра.


0

Измените права доступа к ведру.

Добавьте пользователя для «Все пользователи» и предоставьте доступ «Администратору хранилища».

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.