Копия gsutil, возвращающая "AccessDeniedException: 403 недостаточно прав" от GCE
Я вошел в 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
Что мне не хватает?
4 ответа
Еще одна вещь, которую нужно искать, это убедиться, что вы настроили соответствующие области при создании виртуальной машины GCE. Даже если к виртуальной машине присоединена учетная запись службы, ей необходимо назначить области devstorage для доступа к GCS.
Например, если вы создали свою виртуальную машину с devstorage.read_only
в области видимости попытка записи в корзину потерпит неудачу, даже если ваша учетная запись службы будет иметь разрешение на запись в корзину. Вам нужно devstorage.full_control
или же devstorage.read_write
,
Подробности смотрите в разделе " Подготовка экземпляра к использованию учетных записей служб".
Вы должны войти в систему с учетной записью, которая имеет разрешения, необходимые для этого проекта:
gcloud auth login
gsutil config -b
Затем перейдите по URL-адресу, который он предоставляет:
Затем скопируйте проверочный код и вставьте в терминал.
- Остановить ВМ
- получил -> Детали экземпляра ВМ.
- в "Области доступа к Cloud API" выберите "Разрешить полный доступ ко всем Cloud API", затем нажмите "Сохранить".
- перезапустите виртуальную машину и удалите ~/.gsutil .
Я написал ответ на этот вопрос, так как я не могу оставлять комментарии:
Эта ошибка также может возникнуть, если вы запускаете gsutil
команда с sudo
префикс в некоторых случаях.
- После того как вы создали корзину, перейдите на вкладку разрешений, добавьте адрес электронной почты и установите разрешение администратора хранилища.
- Получить доступ к экземпляру виртуальной машины через SSH >> запустить команду:
gcloud auth login
и следуйте инструкциям
Ссылка: https://groups.google.com/d/msg/gce-discussion/0L6sLRjX8kg/kP47FklzBgAJ
Итак, я пробовал кучу вещей, пытаясь скопировать из корзины GCS на мою виртуальную машину. Надеюсь, этот пост кому-то поможет.
Через соединение SSHed:
и следуя этому сценарию:
sudo gsutil cp gs://[BUCKET_NAME]/[OBJECT_NAME] [OBJECT_DESTINATION_IN_LOCAL]
Получил эту ошибку:
AccessDeniedException: 403 Доступ не настроен. Перейдите в консоль Google Cloud Platform ( https://cloud.google.com/console) для своего проекта, выберите API и аутентификацию и включите Google Cloud Storage JSON API.
Это было исправлено после раздела "Активация API", упомянутого в этой ссылке - https://cloud.google.com/storage/docs/json_api/
После активации API я аутентифицировался в окне SSHed через
gcloud auth login
После процедуры аутентификации я наконец смог загрузить из Google Storage Bucket на мою виртуальную машину.
PS
Я позаботился:
- Убедитесь, что на моем экземпляре виртуальной машины установлен gsutils.
Перейдите в мою корзину, перейдите на вкладку разрешений и добавьте нужные учетные записи служб и установите разрешение / роль администратора хранилища.
3.Убедитесь, что у моей виртуальной машины есть подходящие области доступа к Cloud API:
Из документов: https://cloud.google.com/compute/docs/access/create-enable-service-accounts-for-instances
Сначала необходимо остановить экземпляр -> перейти на страницу редактирования -> перейти к "областям доступа к облачному API" и выбрать "полный доступ к хранилищу или чтение / запись, или все, что вам нужно"
Изменение учетной записи службы и областей доступа для экземпляра Если вы хотите, чтобы виртуальная машина работала под другим именем, или вы решили, что экземпляру нужен другой набор областей для вызова необходимых API, вы можете изменить учетную запись службы и области доступа. существующего экземпляра. Например, вы можете изменить области доступа для предоставления доступа к новому API или изменить экземпляр так, чтобы он работал как созданная вами учетная запись службы, а не как учетная запись службы Compute Engine по умолчанию.
Чтобы изменить учетную запись службы экземпляра и области доступа, экземпляр должен быть временно остановлен. Чтобы остановить ваш экземпляр, прочитайте документацию по Остановке экземпляра. После изменения учетной записи службы или областей доступа не забудьте перезапустить экземпляр. Используйте один из следующих методов для изменения учетной записи службы или доступа к областям остановленного экземпляра.
Измените права доступа к ведру.
Добавьте пользователя для "Все пользователи" и предоставьте доступ "Администратору хранилища".