Как создать токен носителя для cURL для прохождения через IAP (GCP)?

Мне нужно cURL веб-приложение, размещенное за IAP на GCP.

Обычно пользователи входят в систему через IAP и используют веб-приложение, но мне нужно запустить некоторые команды cURL (интерактивные и неинтерактивные), которые обращаются к URL-адресам веб-приложения (например:https://myapp.com/get_pics/1)

Я не могу понять, как получить токен носителя от GCP, который я могу использовать в заголовке авторизации для cURL.

Я могу настроить учетную запись службы с ролью «Пользователь веб-приложения, защищенный IAP», и у меня есть ключ JSON для этой учетной записи службы, но я не уверен, куда идти после этого, чтобы получить правильный токен носителя, который будет принимать IAP.

2 ответа

Для IAP вам необходимо предоставить токен идентификации OIDC. Вы можете использоватьgcloudсоздать его для вас или использовать любой другой способ, описанный в разделе «Программная аутентификация» .

Я предполагаю, что у вас есть gcloud, поэтому я покажу вам, как его использовать:

  1. Войти с помощью учетной записи сервиса
      gcloud auth activate-service-account --key-file service-account-key.json
  1. Отправить запрос
      curl -H "Authorization: Bearer $(gcloud auth print-identity-token --audiences="xxx.apps.googleusercontent.com")" https://myapp.com/get_pics/1

Убедитесь, что вы предоставили сервисному аккаунту праваiap.httpsResourceAccessor-разрешение, иначе вам все равно будет отказано.

  • Бонус: не используйте файлы ключей служебной учетной записи. Выдайте себя за учетную запись службы из вашего текущего профиля пользователя.
      curl -H "Authorization: Bearer $(gcloud auth print-identity-token --include-email --audiences="xxx.apps.googleusercontent.com" --impersonate-service-account=service_account@project.iam.gserviceaccount.com)" https://myapp.com/get_pics/1

Я не могу понять, как получить токен носителя от GCP, который я могу использовать в заголовке авторизации для cURL.

Согласно публичной документации Google

Если ваше приложение занимает заголовок запроса авторизации, вы можете вместо этого включить токен идентификатора в заголовок Proxy-Authorization: Bearer. Если в заголовке Proxy-Authorization обнаружен действительный токен идентификатора, IAP авторизует запрос с его помощью. После авторизации запроса IAP передает заголовок авторизации вашему приложению без обработки содержимого.

Если в заголовке Proxy-Authorization не найден действительный токен идентификатора, IAP продолжает обрабатывать заголовок Authorization и удаляет заголовок Proxy-Authorization перед передачей запроса вашему приложению.

Токен на предъявителя OIDC

Этот документ также включает примеры кода для:

По этой ссылке вы можете найти дополнительную информацию о проверке токена на предъявителя в GCP.

Аутентификация токена носителя

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

Первый из них является частью общедоступной документации разработчиков Google и описывает процесс получения токена на предъявителя с помощью вашей учетной записи службы.

  1. Установите инструмент командной строки gcloud .

  2. Выполните аутентификацию в своей учетной записи службы. В следующей команде замените${KEY_FILE}с путем к файлу ключей вашей сервисной учетной записи:

             gcloud auth activate-service-account
    --key-file ${KEY_FILE}
    
  3. Используйте свою учетную запись службы для получения токена авторизации:

             gcloud auth print-access-token 
    

    Команда возвращает значение токена доступа.

Когда вы используете API, передайте значение токена как токен носителя в заголовке авторизации. См. следующий пример:

           curl -X GET -H "X-Goog-User-Project: ${CLIENT_PROJECT}" \  
    -H "Content-Type: application/json" \  
    -H "Authorization: Bearer ${TOKEN}" \ 
"https://sasportal.googleapis.com/v1alpha1/customers" 

Набор${CLIENT_PROJECT}к идентификатору проекта Google Cloud , из которого вы делаете запросы, а затем установите${TOKEN}к токену авторизации.

По этой ссылке вы найдете информацию и примеры запроса Curl с заголовком авторизации токена на предъявителя.

Другие вопросы по тегам