AccessDeniedException: 403 Запрещено на GCS с использованием учетной записи владельца

Я попытался получить доступ к файлам в ведро, и я продолжаю получать доступ к файлам. Я вижу их в консоли GCS, но могу получить к ним доступ через них и не могу получить к ним доступ через gsutil, либо выполнив приведенную ниже команду.

gsutil cp gs://my-bucket/folder-a/folder-b/mypdf.pdf files/

Но все это возвращает AccessDeniedException: 403 Forbidden

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

Я проверил эти сообщения, но ни один из них не нашел решения, которое помогло мне

Невозможно получить доступ к ресурсу как OWNER, несмотря на то, что я являюсь владельцем

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

Команда gsutil cors set возвращает 403 AccessDeniedException

Ответ 1

Это вполне возможно. Владение ведром дает разрешение FULL_CONTROL на это ведро, которое включает в себя возможность перечислять объекты внутри этого ведра. Однако разрешения на ведро автоматически не подразумевают разрешения на какие-либо объекты, а это означает, что если какая-либо другая учетная запись загружает объекты и устанавливает ACL как нечто вроде "private", владелец ведра не будет иметь к нему доступа (хотя владелец ведра может удалить объект, даже если он не может его прочитать, поскольку удаление объектов - это ведро).

Я не знаком с настройками FUSE по умолчанию, но, если мне нужно было догадаться, вы используете свою системную учетную запись для загрузки объектов, и они настроены на конфиденциальность. Это здорово. Самый простой способ проверить, как запустить gsutil с хоста GCE, где учетными данными по умолчанию будет системная учетная запись. Если это сработает, вы можете использовать gsutil для переключения ACL на что-то более разрешительное, например "project-private".

Команда для этого:

gsutil acl set -R project-private gs://muBucketName/

Ответ 2

Хотя вопрос довольно старый. Но у меня недавно была похожая проблема. Попробовав многие варианты, предложенные здесь, безуспешно, я тщательно пересмотрел свой сценарий и обнаружил, что получаю ошибку в результате ошибки в адресе моего сегмента "gs://my-bucket". Я исправил это, и он работал отлично!