копія 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

1
Дякуємо, що вказали на це. Я дійсно не знав цього варіанту. Я заново створив екземпляр із включеною опцією, і він спрацював. Якби ви могли запропонувати включити прапор як відповідь, я б із радістю позначив його.
Крістоф

Відповіді:


131

Ще одне, на що слід звернути увагу, - це переконатися, що ви створили відповідні області дії під час створення VCE GCE. Навіть якщо до віртуальної машини приєднаний обліковий запис служби, їй повинні бути призначені області зберігання, щоб отримати доступ до GCS.

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

Докладніше див. У розділі Підготовка екземпляра для використання службових облікових записів .

Примітка: обліковий запис обчислювальної служби за замовчуванням має дуже обмежений обсяг (включаючи доступ лише для читання до GCS). Це робиться, оскільки обліковий запис служби за замовчуванням має дозволи редактора проектів IAM. Якщо ви використовуєте будь-який обліковий запис служби користувача, це, як правило, не проблема, оскільки створені користувачем облікові записи служб отримують весь доступ до обсягу за замовчуванням.

Після додавання необхідних областей до віртуальної машини, gsutilможливо, все ще використовуються кешовані облікові дані, які не мають нових областей. Видаліть, ~/.gsutilперш ніж повторити спробу команд gsutil. (Дякую @mndrix за те, що вказав на це в коментарях.)


1
Я відтворив свій екземпляр з дозволами, і все це працює зараз. Подяка
Сиклон

33
На даний момент ви можете редагувати сфери. Зупиніть машину - відредагуйте - а потім змініть обсяги доступу до Cloud API. Я вважаю, що це доступно лише близько місяця.
Уоррен

143
Після додавання необхідних областей до віртуальної машини, gsutilможливо, все ще використовуються кешовані облікові дані, які не мають нових областей. Видаліть ~ / .gsutil, перш ніж повторити спробу gsutilкоманд.
mndrix

2
Велике спасибі mndrix!
Guillermo

2
@mndrix рятує день
Гільдія Бена

50

Ви повинні увійти з обліковим записом, який має дозволи, необхідні для цього проекту:

gcloud auth login

1
Не забудьте видати gcloud auth revoke <email-account>після закінчення.
ssasa

50

gsutil config -b

Потім перейдіть за наданою URL-адресою, [КЛАЦНАТИ Дозволити]

Потім скопіюйте код підтвердження та вставте у термінал.


Зауважте, це не працює, якщо ви працюєте gsutilз ssh.
bfontaine

3
Це "не працює", оскільки не відкриває ваш браузер. Натомість він надає URL-адресу для копіювання та вставлення вручну.
BuvinJ

6
Це також добре працює для всіх інших, якщо ви відкинете-b . Це не відкриє браузер, а просто виплюне URL-адресу, яку можна відкрити за межами оболонки.
олігофрен,

8

Я написав відповідь на це запитання, оскільки не можу залишати коментарі:

Ця помилка також може статися, якщо в деяких випадках ви виконуєте gsutilкоманду з sudoпрефіксом.


3
Це справді коментар, а не відповідь. Трохи більше представників ви зможете залишати коментарі .
Lece,

1
Я дав відповідь (+1), щоб @TheLoneDeranger був ближчим за репутацією до привілею "Опублікувати коментар".
Ранн Ліфшиц,

8
  1. Зупиніть ВМ
  2. got -> деталі екземпляра VM.
  3. у розділі "Області доступу до Cloud API" виберіть "Дозволити повний доступ до всіх API Cloud", а потім натисніть "Зберегти".
  4. перезапустіть VM і видаліть ~ / .gsutil.


3
  1. Після створення сегмента перейдіть на вкладку дозволів, додайте свою електронну адресу та встановіть дозвіл адміністратора сховища .

скріншот

  1. Доступ до екземпляра VM за допомогою команди 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 та авторизацію та ввімкніть API JSON Google Cloud Storage.

Що виправлено це було після розділу "Активація 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-instance#changeserviceaccountandscopes

Спочатку потрібно зупинити екземпляр -> перейти на сторінку редагування -> перейти до «Області доступу до хмарного API» і вибрати «повний доступ до сховища або читання / запис або все, що вам потрібно»

Зміна облікового запису служби та областей доступу для екземпляра Якщо ви хочете запустити віртуальну машину як інший ідентифікатор або ви визначили, що екземпляру потрібен інший набір областей для виклику необхідних API, ви можете змінити обліковий запис служби та сфери доступу існуючого екземпляра. Наприклад, ви можете змінити сфери доступу, щоб надати доступ до нового API, або змінити екземпляр, щоб він працював як обліковий запис служби, який ви створили, замість облікового запису служби за замовчуванням Compute Engine.

Щоб змінити обліковий запис служби та сфери доступу екземпляра, екземпляр потрібно тимчасово зупинити. Щоб зупинити екземпляр, прочитайте документацію щодо Зупинення екземпляра. Змінивши обліковий запис служби або області доступу, не забудьте перезапустити екземпляр. Використовуйте один із наведених нижче методів для зміни облікового запису служби або обсягу доступу зупиненого екземпляра.


0

Змініть дозволи сегмента.

Додайте користувача для "Усі користувачі" та надайте "Адміністратору сховища" доступ.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.