TL; DR
Кто-нибудь может предложить способ запуска тестов от имени пользователя, который не является учетной записью службы в конвейере CI?
Подробно:
Мы предоставляем приложение, работающее на GCP, все заинтересованные стороны которого являются пользователями нашей организации. Идентификационные данные этих пользователей контролируются в нашей локальной реализации ADFS и синхронизируются с GCP, чтобы их можно было использовать для аутентификации. Мы разрешаем доступ к различным частям приложения с помощью групп ADFS, в которые можно добавить эти удостоверения, и снова мы синхронизируем c членство в этих группах с GCP. Группы доступны как Группы Google (https://groups.google.com). Во время выполнения мы проверяем, является ли аутентифицированный пользователь членом данной группы. Все это прекрасно работает.
Я хотел бы запустить тесты в нашем конвейере CI, которые гарантируют, что аутентифицированный пользователь может делать то, что ему разрешено, и не может делать то, что ему не разрешено делать. Вот некоторые из тестов, которые я хотел бы выполнить:
* Убедитесь, что gsutil ls allowed-bucket
возвращает ожидаемый список больших двоичных объектов
* Убедитесь, что gsutil ls non-allowed-bucket
не может получить доступ к именованному сегменту
* Убедитесь, что облачная функция может быть вызвана через gcloud functions call function-name
Таким образом, мне нужно программно (т.е. без вмешательства человека) пройти аутентификацию пользователя, который является членом данной группы Google. У меня есть две возможности:
- Использование служебной учетной записи и аутентификация с использованием
gcloud auth activate-service-account --key-file /path/to/keyfile.json
, но я не могу найти способ добавить служебную учетную запись в соответствующую группу Google - так эта опция не будет работать - Подготовка непривилегированного пользователя в нашей локальной ADFS, который мы затем добавим в соответствующую группу Google. К сожалению, я не думаю, что есть способ аутентификации этого пользователя без участия человека, потому что
gcloud auth login
использует веб-процесс авторизации. Если это требует вмешательства человека, я не могу использовать его в конвейере CI.