Рейтинг:0

Уточнение вопросов, связанных с использованием id_token в сервисе для сервиса

флаг ml

На своей текущей работе я много работаю с OAuth2/OIDC. Сейчас все больше и больше переходим на GCP. У меня есть несколько уточняющих вопросов об использовании токенов OIDC для связи между сервисами, один высокий уровень, один тактический:

Проблема: я защищаю задание Cloud Scheduler для конечной точки Cloud Run. я решил проблему (насколько я могу судить), но я очень сбит с толку тем, почему Google настроил все таким образом, и надеюсь получить разъяснения. Не бросая вызов вещам, просто ища понимания. Это чувство так отличается от того, что я знаю. Я всегда использовал id_tokens для людей.

  1. Почему они выбрали токены идентификатора OIDC для связи между службами? Я использовал OIDC тонну на стороне пользователя, но никогда на стороне сервера к серверу. Поэтому получение токена ID для связи между серверами кажется очень странным. Мне бы хотелось получить ссылку на документы, объясняющие этот выбор архитектуры на стороне сервера. Я бы ожидал, что токен доступа OAuth2 с учетными данными клиента для всей связи между службами, а не токен идентификатора. я вижу это их документы указывают, что платформа использует сочетание обоих

  2. Почему поле «Аудитория» произвольное? В Cloud Scheduler кажется, что пока я использую действующую учетную запись службы в проекте, я могу указать любое значение в поле аудитории? Я уверен, что для этого есть причина, ребята из Google умны, но это похоже на дыру в безопасности. Я имею в виду, что аудиторией может быть любой действительный URL-адрес (насколько я могу судить). Могу ли я поместить аудиторию конечной точки Cloud Run в другой проект и сделать этот вызов?

  3. Очевидно, что здесь существует разделение между AuthN и AuthZ, поэтому id_token больше относится к authN, но поле аудитории, проверенное по запросу токена, будет указывать на надежный Authz. НО, поскольку это произвольно, я чувствую, что проверке аудитории нельзя доверять, потому что кто угодно может поместить туда что угодно. Пожалуйста, скажите мне, что мне не хватает.

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

Рейтинг:0
флаг cn

Почему они выбрали токены идентификатора OIDC для обслуживания коммуникация? Я много раз использовал OIDC на стороне пользователя, но никогда на сервер на серверную сторону. Итак, получение идентификатора токена для сервера на сервер общение кажется очень странным. хотелось бы ссылку на точки документы, объясняющие этот выбор архитектуры на сервере к серверу сторона .. Я бы ожидал, что токен доступа OAuth2 с клиентом Учетные данные для связи между службами, а не токеном идентификатора.

В Google Cloud существует два типа авторизации. На основе ролей (маркер доступа OAuth) и на основе удостоверений (маркер идентификации OIDC). Авторизация на основе ролей обеспечивает доступ ко всем ресурсам на основе ролей. Например, доступ для просмотра ко всем экземплярам Compute Engine. Этот тип разрешений управляется на уровне проекта/папки/организации. Авторизация на основе идентификации обеспечивает доступ к отдельному ресурсу. Ключевое отличие заключается в том, где назначается разрешение/роль: на уровне проекта или на уровне ресурса. Так как роль слишком широка для разрешений на уровне ресурсов, вам нужен другой способ.Это тождества. я предоставляю Джон доступ к ключу KMS секрет2. Идентификация + разрешения хранятся на уровне управления доступом к ключу KMS.

Почему поле «Аудитория» произвольное? В облачном планировщике это кажется, что пока я использую действующую учетную запись службы в проекте, Я могу указать любое значение в поле аудитории? Я уверен, что есть причина для этого люди из Google умны, но это похоже на дыру в безопасности. Я имею в виду, что аудиторией может быть любой действительный URL-адрес (насколько я могу судить). Могу я поместите аудиторию конечной точки Cloud Run в другой проект и сделайте этот звонок?

Если ваш код создает токен идентификации, аудитория требуется. Существуют определенные идентификаторы клиентов OAuth, управляемые Google, которые позволяют игнорировать аудиторию. Поскольку удостоверение и разрешения хранятся в ресурсе, вызов другой конечной точки Cloud Run не пройдет проверку удостоверения. ИМХО, поле аудитории — это быстрый способ для системы идентификации сначала проверить, должен ли токен идентификации быть одобрен для уровня IAM.

Очевидно, что здесь существует разделение между AuthN и AuthZ, поэтому id_token больше относится к authN, но поле аудитории проверяется на запрос токена будет указывать на надежный Authz. НО при этом произвольно, я чувствую, что проверке аудитории нельзя доверять потому что любой может положить туда что угодно. Пожалуйста, скажи мне, что я отсутствует.

Идентификационные токены подписаны. Только авторизованные службы и код могут создавать токены идентификации. Как я уже упоминал в предыдущем пункте, аудитория не предоставляет разрешение или доступ. Это один из этапов авторизации доступа на основе токена идентификации. Конечная проверка — это удостоверение + разрешение, назначенное ресурсу. Аудитория не предоставляет ничего из этого, но может использоваться в качестве фильтра для быстрого сброса токенов.

Cade Thacker avatar
флаг ml
Спасибо за вдумчивый ответ. Я прочитал это несколько раз и понимаю, что вы говорите. Все, с чем я сейчас работаю, основано на полностью ролевом подходе, так что это просто другое. Нужно обдумать это. Еще раз спасибо!

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.