Невозможно добавить пользователя для роли / пользователя-редактора через API в Google Cloud Platform

Я пытался использовать api для добавления пользователя редактора проекта в Google Cloud Platform.

Я использую API Resource Manager API setIampolicy.

Для добавления пользователя используется скрипт Google Apps.

ПРОЦЕДУРА

  1. получить актуальную информацию обо всех правилах Google Cloud Platform с помощью [Resource Manager API getIampolicy].
  2. добавить пользователя и исправить 1. ответ json.
  3. разместить 2.json с помощью [Resource Manager API setIampolicy].

https://cloud.google.com/resource-manager/reference/rest/v1/projects/getIamPolicy

https://cloud.google.com/resource-manager/reference/rest/v1/projects/setIamPolicy

но я не могу добавить пользователя. Со следующей ошибкой / исключением:

{
  "error": {
    "code": 400,
    "message": "Request contains an invalid argument.",
    "status": "INVALID_ARGUMENT",
    "details": [
      {
        "@type": "type.googleapis.com/google.cloudresourcemanager.v1.ProjectIamPolicyError",
        "type": "SOLO_REQUIRE_TOS_ACCEPTOR",
        "role": "roles/owner"
      }
    ]
  }
}

Другая информация. Я могу использовать [Попробуйте!] Документов, но не могу сделать это с помощью скрипта Google Apps.

Я использую библиотеку OAuth для скриптов Google Apps и аутентификацию OAuth.

Почему?


person takechoco    schedule 20.12.2019    source источник
comment
Вы не можете программно сделать пользователей владельцами, которые не приняли условия использования Google Cloud Platform. Убедитесь, что пользователь либо принял ToS, либо использует организацию (где и проект, и пользователь являются частью организации / домена).   -  person mensi    schedule 20.12.2019
comment
Как мне принять условия предоставления услуг для Google Cloud Platform   -  person takechoco    schedule 21.12.2019
comment
Перейдя на console.cloud.google.com   -  person mensi    schedule 21.12.2019
comment
Я принял TOS. но я не могу добавить пользователя. [Примерь] в порядке. но GAS - это ошибка. cloud.google.com/resource-manager / ссылка / отдых / v1 / проекты /   -  person takechoco    schedule 23.12.2019


Ответы (2)


Не используйте этот метод, который вы пытаетесь сделать (вытягивание политики iam с помощью get-iam-policy, отредактируйте файл JSON / YAML, чтобы внести изменения, используя set-iam-policy), потому что это плохая практика и небольшая ошибка в файле может привести к потере доступа к вашему проекту. также таким образом вы имеете дело со слишком большим количеством данных и вы извлекаете весь файл, редактируете его, а затем отправляете обратно для повторной обработки (весь файл).

ты должен использовать

gcloud [GROUP] add-iam-policy-binding [RESOURCE-NAME] --role
   [ROLE-ID-TO-GRANT] --member user:[USER-EMAIL]

и

gcloud [GROUP] remove-iam-policy-binding [RESOURCE-NAME] --role
   [ROLE-ID-TO-GRANT] --member user:[USER-EMAIL] 

вместо

пример:

gcloud projects add-iam-policy-binding $PROJECT_NAME \
    --role roles/editor \
    --member serviceAccount:$SA_EMAIL

эти два метода лучше, потому что:

  • изменения проще, меньше трудозатрат и меньше подвержены ошибкам, чем редактирование JSON / YAML
  • вы избежите состояния гонки, потому что вы можете выполнять привязку нескольких ролей одновременно, и они не будут противоречить друг другу.
person Methkal Khalawi    schedule 24.12.2019
comment
Спасибо ! Как мне автоматически добавлять пользователей редактора проекта с помощью команды gcloud? облачный планировщик или GAE или cron GCE или Composer? Я хочу автоматически добавлять пользователей, перечисленных в таблице, каждый понедельник. - person takechoco; 31.12.2019
comment
эй @takechoco, для этого вам следует создать еще один вопрос о стеке. но просто говорите, если вы хотите достичь желаемого варианта использования: 1- создайте Облачная функция, которая добавляет роль, о которой идет речь, 2 - создайте задание облачного планировщика, которые запускаются каждый понедельник и нацелены на URL-адрес созданной вами функции. И последнее, пожалуйста, примите мой ответ для лучшей видимости в сообществе. - person Methkal Khalawi; 31.12.2019
comment
@MethkalKhalawi есть ли какой-нибудь аналог того же REST? gcloud [GROUP] remove-iam-policy-binding [RESOURCE-NAME] --role [ROLE-ID-TO-GRANT] --member user:[USER-EMAIL] - person Rohit Sehgal; 05.03.2021

Я обнаружил, что это меньше подвержено ошибкам, если использовать terraform для этой задачи. Модуль terraform google_project_iam_binding делает это без перезаписи. существующие политики IAM (особенно когда мне нужно обновить условные политики IAM).

Я потяну политику с gcloud projects get-iam-policy PROJECT_ID --format json > policy.json, чтобы понять политику. Как только я пойму политику, я конвертирую ту часть, которую мне нужно обновить, в шаблон terraform, а затем использую terraform для ее развертывания.

person srsn    schedule 30.06.2021