Gsutil copy return "AccessDeniedException: 403 Недостаточное разрешение" из GCE

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

GCE> gcloud auth list
Credentialed accounts:
 - [email protected] (active)

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

local> gsutil acl ch -u [email protected]: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  

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

Ответ 1

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

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

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

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

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

Ответ 2

gsutil config -b

Затем перейдите по URL, который он предоставляет, [НАЖМИТЕ КЛИКН.]

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

Ответ 3

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

gcloud auth login

Ответ 4

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

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

Ответ 5

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

screenshot

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

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

Ответ 6

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

Сначала нужно остановить экземпляр → перейти на страницу редактирования → перейти к "областям доступа к облачному API" и выбрать "полный доступ к хранилищу или чтение/запись, или все, что вам нужно"

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

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

Ответ 7

tl; dr Это было решено путем принудительной настройки aws с использованием их командной строки для использования awscli для меня на Mac

  • Установите awscli через brew: brew install awscli
  • Запустите aws configure после установки и введите свой секретный ключ и введите ключ доступа в командной строке
  • Попробуйте выполнить gsutil сейчас, и он должен работать.