ОБНОВЛЕНИЕ: https://twitter.com/mattsachs/status/1220907777247154178?s=19
В настоящее время GCP не предоставляет этот API-интерфейс через Cloud Console , gcloud
инструмент командной строки или их различные библиотеки API языка . Это требует выполнения веб-запроса с чем-то вроде curl
из экземпляра виртуальной машины.
Создание виртуальной машины
ПРИМЕЧАНИЕ: Похоже, это можно сделать с помощью Cloud Shell, избегая необходимости в виртуальной машине.
Для начала создайте свой внешний балансировщик нагрузки с поддержкой IAP в GCP и экземпляр виртуальной машины в той же сети для подключения. Он должен находиться в том же проекте, что и балансировщик нагрузки с поддержкой IAP. ВАЖНО: При создании виртуальной машины выберите Allow full access to all Cloud APIs
в Identity and API access
> Access scopes
.
S SH в виртуальной машине [или облачной оболочке] и используйте этот сеанс для Команды оболочки через остальную часть процесса.
Переменные
Мы подготовим следующие переменные среды (или заменим значения вручную позже):
BEARER_TOKEN = OAuth token used in curl API calls
PROJECT_ID = ID for the compute project
INSTANCE_ID = ID for the IAP instance
IAP_NAME = Name for the IAP instance
Подписанный заголовок JWT Audience
- Go для консоли GCP -> Безопасность -> Identity-Aware Proxy
- Найдите экземпляр, которому требуется CORS, нажмите кнопку с тремя вертикальными точками справа, выберите «Подписано» Заголовок JWT Audience
- Во всплывающем окне должен быть указан путь: / projects / [PROJECT_ID] / global / backendServices / [INSTANCE_ID]
- Сохраните PROJECT_ID и INSTANCE_ID, запустив команды оболочки в виртуальной машине:
PROJECT_ID=<PROJECT_ID>
и INSTANCE_ID=<INSTANCE_ID>
Команды оболочки
- Сначала мы сохраняем PROJECT_ID и INSTANCE_ID из предыдущего шага в переменные среды (заменим действительными значениями)
PROJECT_ID=<PROJECT_ID>
INSTANCE_ID=<INSTANCE_ID>
Затем мы получаем токен OAuth, используемый для внесения изменений. Обратите внимание, что вам необходимы достаточные разрешения для выполнения этой операции. Обратите внимание, что мы НЕ используем экспорт при сохранении этой переменной среды; он доступен только в сеансе оболочки, но не для других приложений.
BEARER_TOKEN=`gcloud auth application-default print-access-token`
Далее мы можем построить имя / путь, используемый в API:
INSTANCE_NAME="projects/${PROJECT_ID}/iap_web/compute/services/${INSTANCE_ID}"
Далее мы просим проверить текущую настройку:
curl --request GET --header "Accept: application/json" --header "Content-Type: application/json" --header "Authorization: Bearer ${BEARER_TOKEN}" "https://iap.googleapis.com/v1/${INSTANCE_NAME}:iapSettings"
Теперь мы строим json для тела запроса на обновление:
SETTINGS_BODY='{"name":"'${INSTANCE_NAME}'","accessSettings":{"corsSettings":{"allowHttpOptions":true}}}'
Теперь мы готовы обновить настройку:
curl --request PATCH --header "Accept: application/json" --header "Content-Type: application/json" --header "Authorization: Bearer ${BEARER_TOKEN}" --data ${SETTINGS_BODY} --compressed "https://iap.googleapis.com/v1/${INSTANCE_NAME}:iapSettings"
Это должно вернуть обновленную настройку, аналогичную выводу из шага 5, но с новым значением.
НАСЛАЖДАЙТЕСЬ!