Учетная запись службы Google Cloud Platform не может получить доступ к проекту

Я получаю следующее предупреждение:

ВНИМАНИЕ! У вас нет доступа к проекту [$ PROJECT] или он не существует.

после локального выполнения следующих команд:

  1. Активируйте и установите сервисный аккаунт:

    gcloud auth activate-service-account \
    $SERVICE_ACCOUNT \
    --key-file=key.json
    
    #=>
    
    Activated service account credentials for: [$SERVICE_ACCOUNT]
    
  2. Выберите $PROJECT в качестве указанной выше учетной записи службы:

    gcloud config set project $PROJECT
    
    #=>
    
    Updated property [core/project].
    WARNING: You do not appear to have access to project [$PROJECT] or it does not exist.
    

Моя собственная учетная запись GCP связана со следующими ролями:

  • Администратор App Engine
  • Редактор сборки Cloud
  • Администратор Cloud Scheduler
  • Создатель объекта хранения
  • Средство просмотра объектов хранилища

Почему этот сервисный аккаунт не может set $PROJECT? Есть ли роль или разрешение, которые мне не хватает?


person bryan    schedule 06.11.2019    source источник
comment
Я вижу то же самое при попытке gcloud config set project my-project. Ключ, который я использую, вчера работал нормально, и я не вносил никаких изменений в IAM. Я также проверил, что идентификатор ключа, который я использую, указан в учетных записях служб, перечисленных в консоли.   -  person eversMcc    schedule 14.11.2019
comment
Стоит отметить, что это скорее предупреждение, чем ошибка. Я все еще могу успешно использовать указанный ключ, несмотря на то, что получил подробное предупреждение. Работает ли ваш ключ, когда вы взаимодействуете с GCP после получения предупреждения?   -  person eversMcc    schedule 14.11.2019
comment
@eversMcc прав. Это закончилось просто ошибкой, и она не работала по совершенно другой причине с моей командой gcloud app deploy.   -  person bryan    schedule 14.11.2019


Ответы (5)


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

Вы могли увидеть эту ошибку из-за не связанной проблемы. В моем случае я пытался выполнить развертывание в AppEngine из среды непрерывной интеграции (Circle CI), но не включил App Engine Admin API. Как только я включил API, я смог успешно выполнить развертывание.

person mtlynch    schedule 19.11.2019
comment
Вы правы - это оказалось просто ошибкой, и она не работала по совершенно другой причине с моей командой развертывания приложения gcloud - person bryan; 09.12.2019
comment
Согласовано и подтверждено - это обычно происходит, когда что-то недопустимо и просто показывает это странное общее сообщение об ошибке. Обычно это может происходить, когда переменная среды недопустима или отсутствует. - person Cameron; 07.03.2020
comment
В моем случае оказалось, что я указал неправильное название проекта. - person Konstantin Kozirev; 25.03.2020
comment
Ух, это случилось и со мной! Ошибка, последовавшая за этим предупреждением, была настоящей проблемой. - person David Calhoun; 23.10.2020

Решением этой проблемы может быть включение Cloud Resource Manager api в вашей облачной консоли Google. Перейдите к https://console.developers.google.com/apis/api/cloudresourcemanager.googleapis.com/overview?project=<project-id> и нажмите "Включить".

person Buchanora    schedule 27.01.2020
comment
Это решение сработало для меня лучше, чем выбранный ответ. - person felleg; 14.05.2021
comment
@bryan Думаю, это правильный ответ. - person AlSayed Gamal; 23.05.2021

Я столкнулся с этой ошибкой, когда начал работать с платформой Google CLoud.

Проблема заключалась в том, что я настроил / установил несуществующий проект (my-kube-project) в качестве проекта по умолчанию, используя следующую команду:

gcloud config set project my-kube-project

Вот как я это решил:

Сначала мне нужно было перечислить свои существующие проекты:

gcloud projects list

Затем я скопировал идентификатор проекта, который мне нужен, и на этот раз снова запустил команду:

gcloud config set project gold-magpie-258213

И все работало нормально.

Примечание. Вы не можете изменить идентификатор ID или номера проекта, вы можете изменить только Название.

Это все.

Надеюсь, это поможет

person Promise Preston    schedule 01.09.2020

Я столкнулся с той же ошибкой при попытке развернуть приложение в Google App Engine через учетную запись службы, настроенную в CircleCI, и решил ее, установив следующие роли (разрешения), прикрепленные к моей роли службы:

  • Разработчик App Engine
  • Администратор службы App Engine
  • Редактор Cloud Build
  • Создатель объекта хранения
  • Средство просмотра объектов хранилища

У меня также был включен App Engine Admin API, но нет Cloud Resource Manager API.

person Mark    schedule 11.05.2020

В

ВНИМАНИЕ! У вас нет доступа к проекту [$ PROJECT_ID] или он не существует.

предупреждение появится, если учетной записи службы не назначена хотя бы одна роль, которая содержит resourcemanager.projects.get разрешение.

Другими словами, предупреждение появится, если результат следующих команд будет пустым:

  1. Соберите все роли для данного $SERVICE_ACCOUNT (это работает для любой учетной записи, а не только для служебных учетных записей):

    gcloud projects get-iam-policy $PROJECT_ID \
    --flatten='bindings[].members' \
    --format='table(bindings.role)' \
    --filter="bindings.members:${SERVICE_ACCOUNT}"
    
    
    #=>
    
    ROLE
    . . .
    
  2. Для каждого $ROLE, собранного выше, либо:

    gcloud iam roles describe $ROLE \
    --flatten='includedPermissions' \
    --format='value(includedPermissions)' \
    --project=$PROJECT_ID | grep \
    --regexp '^resourcemanager.projects.get$'
    

    если $ROLE является индивидуальным (projects/$PROJECT_ID/roles/$ROLE), или:

    gcloud iam roles describe roles/$ROLE \
    --flatten='includedPermissions' \
    --format='value(includedPermissions)' | grep \
    --regexp '^resourcemanager.projects.get$'
    

    если $ROLE является курированным (roles/$ROLE).

Примечание: разница между gcloud форматированием команд для настраиваемых и контролируемых ролей - это то, что затрудняет перечисление всех разрешений, связанных со всеми ролями, связанными с одной учетной записью.

Если вы подтвердили, что ни одна из ролей, связанных с учетной записью службы, не содержит разрешения resourcemanager.projects.get, тогда либо:

  • Обновите хотя бы одну из настраиваемых ролей, связанных с учетной записью службы, с разрешением resourcemanager.projects.get:

    gcloud iam roles update $ROLE \
    --add-permissions=resourcemanager.projects.get \
    --project=$PROJECT_ID
    
    #=>
    
    description: $ROLE_DESCRIPTION
    etag: . . .
    includedPermissions:
    . . .
    - resourcemanager.projects.get
    . . .
    name: projects/$PROJECT_ID/roles/$ROLE
    stage: . . .
    title: $ROLE_TITLE
    

    Предупреждение: не забудьте использовать здесь флаг --add-permissions при обновлении, поскольку флаг --permissions удалит любые другие разрешения, которые раньше имела пользовательская роль.

  • Создайте собственную роль:

    gcloud iam roles create $ROLE \
    --description="$ROLE_DESCRIPTION" \
    --permissions=resourcemanager.projects.get \
    --project=$PROJECT_ID \
    --title='$ROLE_TITLE'
    
    #=>
    
    Created role [$ROLE].
    description: $ROLE_DESCRIPTION
    etag: . . .
    includedPermissions:
    - resourcemanager.projects.get
    name: projects/$PROJECT_ID/roles/$ROLE
    stage: . . .
    title: $ROLE_TITLE
    

    и свяжите его с учетной записью службы:

    gcloud projects add-iam-policy-binding $PROJECT_ID \
    --member=serviceAccount:$SERVICE_ACCOUNT \
    --role=projects/$PROJECT_ID/roles/$ROLE
    
    #=>
    
    Updated IAM policy for project [$PROJECT_ID].
    auditConfigs:
    . . .
    
  • Свяжите учетную запись службы с контролируемой ролью, которая уже содержит разрешение resourcemanager.projects.get, о котором говорилось выше.

    Если вы хотите знать, какие тщательно подобранные роли уже содержат resourcemanager.projects.get разрешение, и не хотите создавать сложный цикл оболочки, возможно, будет проще перейти на здесь и отфильтруйте все роли по Permission:resourcemanager.projects.get.

Примечание: если у вас возникнут проблемы, обязательно ознакомьтесь с требованиями для предоставления доступа к ресурсам здесь.

person EVAL    schedule 03.06.2021