Многочисленные вопросы по использованию Identity-Aware Proxy Google Endpoints для аутентификации пользователей G Suite для приложения B2B, размещенного на GCP - PullRequest
1 голос
/ 29 февраля 2020

В настоящее время я изучаю наиболее подходящий подход аутентификации / авторизации для нового проекта, который будет полностью размещен на Google Cloud Platform. Я пишу это резюме, чтобы проверить правильность моего предпочтительного подхода и получить отзывы о том, есть ли какие-либо соображения или неточности, о которых я не знаю. Я был бы признателен всем, кто имеет соответствующий опыт реализации соответствующих стратегий.

Основные вопросы / проблемы, с которыми я сталкиваюсь:

  • Как управлять или отменять области действия в OID C обработать? Пользователь не должен разрешать соответствующий доступ; это должно быть установлено ИТ-администраторами организации, которые создали пользователя
  • Могут ли ИТ-администраторы G Suite применять параметры к пользователям (пользовательские и / или нет), которые автоматически назначают предварительно определенные группы / роли политики Google Identity / IAM?
  • Будут ли пользователи G Suite, подписавшие JWT / Google ID, напрямую совместимы с Конечные точки + IAP (не требующие обработки / перекодировки)?
  • Будет ли этот подход соответствовать внешних пользователей с помощью федеративного подхода к идентификации, в будущем, без существенного рефакторинга существующего процесса (например, Firebase auth )?

Требования:

  • Angular SPA будет единственным GUI для приложения, размещенного на том же домене, зарегистрированном для организации в GCP / G Suite
  • SPA будет использовать API-шлюз GCP ( Конечные точки ) для отправки запросов в микро-сервисы GKE (вероятно, все в пределах одного VP C) и других сервисов G Suite (Drive, et c)
  • Org IT G Suite a dmin может создавать пользователей и назначать различные (предопределенные) группы / области политики IAM через пользовательский интерфейс G Suite, чтобы предоставить пользователям наименьшие привилегии доступа к ресурсам org (службы G Suite и пользовательские API / приложения, размещенные на GCP)
  • ТОЛЬКО способен «войти в систему с помощью Google» в SPA, используя свою учетную запись org G Suite
  • Если пользователь уже вошел в свою учетную запись org google, ему не нужно будет снова входить в SPA * 1039. *
  • При входе в SPA учетные данные пользователей должны отправляться с каждым запросом, который микро-сервисы будут использовать для авторизации пользовательских бизнес-логи c, а также для передачи этих учетных данных в службы G Suite, такие как Google Drive ( использовать авторизацию api scopes как дополнительный уровень безопасности в случае сбоя настраиваемой бизнес-логики c)
  • В отдаленном будущем существует возможность разрешить внешним пользователям организации / пользователям использовать различных федеративных поставщиков удостоверений ( Facebook, Twitter и др. c) для доступа к SPA и ресурсам, размещенным org (это не текущее требование, но это долгосрочная стратегия c цель)

Два подхода, которые я определил, лучше всего подходят для цели являются:

1) Конечные точки Google Sign-In с IT Apps для получения пользователей org Google ID &, поскольку мы используем OpenAPI, конечные точки GCP с Identity-Aware Proxy (IAP) для управления аутентификацией токена JWT.

Плюсы:

  • Устанавливает четкое разграничение между внутренними пользователями портала пользовательского интерфейса и потенциальными будущими внешними пользователями
  • Нет специального кода для ИТ-администраторов для управления пользователи
  • Нет пользовательского кода для синхронизации c Пользователи, роли, разрешения Firebase & G Suite и т. д. c или доступ к зеркальному пользователю G Suite для получения учетных данных


ИЛИ, 2) Firebase Firebase аутентификация , & написать код для генерации пользователей в G Sui т. е. с Firebase Admin SDK , ограничивающий доступ к ресурсам на основе org domain .

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


Я склоняюсь к подходу к конечным точкам ...

Ответы [ 2 ]

2 голосов
/ 29 февраля 2020

Как управлять или отменять области в процессе OID C? Пользователь не должен разрешать соответствующий доступ; Это должно быть установлено ИТ-администраторами организации, которые создали пользователя

Разрешения для членов IAM (пользователей, групп, учетных записей служб и т. д. c) управляются в Google Cloud IAM. Области используются с OAuth для ограничения разрешений, уже назначенных IAM. Лучшие практики означают назначение необходимых разрешений (и не более) и не расчесывание IAM с областями действия.

Могут ли ИТ-администраторы G Suite применять параметры для пользователей (настраиваемые и / или нет), которые автоматически выделяют предопределенные "Google Группы / роли политики Identity / IAM?

G Suite и Google Cloud являются отдельными службами. Google Cloud поддерживает G Suite в качестве поставщика удостоверений (IDP). Разрешения контролируются в Google Cloud IAM, а не в G Suite. Вы можете объединить G Suite с группами Google, чтобы объединить членов IAM в группы для более удобного управления IAM.

Будут ли пользователи G Suite, подписавшие JWT / Google ID, напрямую совместимы с конечными точками + IAP (не требуя обработки) / перекодировка)?

Учетные записи Google (G Suite) не предоставляют закрытые ключи для своих учетных записей. Поэтому вы не можете использовать подписанные JWT. Подписанный JWT является более старым механизмом авторизации и используется с учетными записями служб. Правильный метод для учетных данных пользователя - это токены доступа и идентификации OAuth 2.0. Для администраторов могут использоваться учетные записи служб с делегированием по всему домену.

Будет ли этот подход охватывать внешних пользователей с помощью подхода федеративной идентификации в будущем без существенных рефакторингов для существующего процесса (например, аутентификации Firebase)?

Это сложный вопрос. Google Cloud поддерживает внешних провайдеров идентификации, но я обнаружил, что это в лучшем случае проблематично c. Вы также можете использовать идентификацию синхронизации, но это также не очень хорошо реализовано. Если вы едете по маршруту Google Cloud, используйте G Suite в качестве поставщика удостоверений и Google Cloud IAM для авторизации.

Важным моментом, который, по моему мнению, не хватает в вашем вопросе, является понимание того, как работает авторизация в Google Cloud и API Google. Эти сервисы в основном используют OAuth 2 Access Tokens и Identity Tokens. Это зависит от услуги и типа требуемого доступа. Это означает, что ваше приложение должно понимать, к каким сервисам оно обращается, и как предоставлять авторизацию. У меня такое ощущение, что вы ожидаете, что Firebase / конечные точки сделают это за вас.

Еще один момент заключается в том, что Firebase является частью Google Cloud и является лишь подмножеством Google Cloud. Firebase - это отличный продукт / услуга, но если вы планируете использовать функции Google Cloud вне Firebase, оставайтесь с G Suite и Cloud IAM для идентификации и авторизации.

Angular SPA будет один GUI для приложения, размещенного в том же домене, который зарегистрирован для организации в GCP / G Suite

Я предполагаю, что под доменом подразумевается зона DNS (DNS-имена веб-сайтов). Это облегчит управление CORS и Cook ie, но это не является обязательным требованием.

SPA будет использовать API-шлюз GCP (конечные точки) для выполнения запросов к микро-сервисам GKE (вероятно, все в пределах одного VP). C) и другие сервисы G Suite (Drive, et c)

ОК - я не вижу проблем с использованием конечных точек. Тем не менее, хороший ответ требует подробностей о том, как на самом деле все реализовано. Другое дело, что вы упоминаете конечные точки и сервисы G Suite. Это очень разные предметы. Конечные точки защищают ваши конечные точки HTTP, а не другие службы Google, где это будет мешать.

Администраторы Org IT G Suite могут создавать пользователей и назначать различные (предопределенные) группы / области политики IAM через G Suite Пользовательский интерфейс для предоставления пользователям наименьших привилегий доступа к ресурсам организации (службы G Suite и пользовательские API / приложения, размещенные на GCP)

Авторизация Google Cloud IAM и G Suite - это отдельные системы авторизации. Чтобы участники G Suite могли управлять Google Cloud IAM, им потребуются роли, назначенные в Google Cloud IAM через их идентификатор участника или членство в группе. Нет общих разрешений для авторизации.

Пользователи имеют возможность ТОЛЬКО "войти в систему с помощью Google" в SPA, используя свою учетную запись org G Suite

Если вы не настроите SSO Только пользователи аккаунта Google могут проходить аутентификацию. Авторизацией управляет Google Cloud IAM.

Если пользователь уже вошел в свою учетную запись org google, ему не нужно повторно входить в SPA

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

При входе в SPA, учетные данные пользователей должны отправляться с каждым запросом, который микро-сервисы будут использовать для авторизации пользовательских бизнес-логики c, а также передачу этих учетных данных сервисам G Suite, таким как Google Drive (использование авторизации API-областей в качестве дополнительного уровня безопасности при сбое пользовательских бизнес-логик c)

Я не являюсь уверен, что вы подразумеваете под "учетными данными пользователя". Вы никогда не должны иметь доступ к учетным данным пользователя (имя пользователя / пароль). Вместо этого ваше приложение должно управлять OAuth-доступом и токенами идентификации и отправлять их на сервер для авторизации.

В отдаленном будущем есть возможность разрешить внешним пользователям, входящим в организацию, использовать различных федеративных провайдеров идентификации (Facebook, Twitter и др. c) для доступа к SPA и ресурсам, размещенным в организации (это не является текущим требованием, но это долгосрочная стратегическая цель)

Я уже говорил об этом ранее в своем ответе. Тем не менее, позвольте мне предложить четко подумать о том, что должно быть разрешено. Авторизация для вашего приложения отличается от авторизации для вашего приложения, которое также авторизует службы Google Cloud. Например, вы можете использовать Twitter для аутентификации и одну учетную запись службы для авторизации в Google Cloud. Это зависит только от того, что вам нужно выполнить sh и как вы хотите управлять авторизацией.

[ОБНОВЛЕНИЕ]

Один термин, который вы используете в своем вопросе, это СПА. В традиционном случае вся обработка выполняется вашим приложением в браузере. Это кошмар безопасности. Браузер будет иметь доступ к токенам OAuth, используемым для авторизации и идентификации, которые не являются безопасными. Это также ограничивает способность вашего приложения генерировать токены Refre sh, что означает, что пользователю необходимо будет повторно пройти аутентификацию после истечения срока действия существующих токенов (каждые 3600 секунд). Для решения этого вопроса я рекомендую переосмыслить ваше приложение в более традиционный дизайн клиент / сервер. Аутентификация выполняется вашими серверами, а не напрямую (внутри) клиентского приложения. В разделах, где я упоминаю учетные записи служб, я предполагаю, что бэкэнд-системы установлены, так что клиент имеет только зашифрованный сеанс cook ie.

1 голос
/ 02 марта 2020

Согласно моему опыту,

G-Suite в качестве удостоверения предоставляет + Cloud IAP будет работать для authn и authz для проверки доступа на уровне пользователя во внешнем интерфейсе. см. this

Однако для взаимодействия между приложениями и приложениями я рекомендую учетные записи служб в GCP, см. this . Вы также можете использовать Cloud IAP, чтобы сделать то же самое, см. this . Однако выбор зависит от вашего варианта использования и рекомендаций и политик безопасности вашей компании.

...