更新: https ://twitter.com/mattsachs/status/1220907777247154178?s=19
目前,GCP 并没有通过Cloud Console、gcloud
命令行工具,或者他们的各种语言 api 库来公开这个 api 。它需要curl
从 VM 实例中发出 Web 请求。
虚拟机创建
注意:这似乎可以使用 Cloud Shell 完成,无需虚拟机。
首先,在 GCP 中创建启用 IAP 的外部负载均衡器,并在同一网络中创建要连接的 VM 实例。它应该与启用 IAP 的负载均衡器在同一个项目中。
重要提示:创建 VM 时,Allow full access to all Cloud APIs
在Identity and API access
>中选择Access scopes
。
通过 SSH 连接到 VM [或 Cloud Shell],并在整个过程的其余部分中将该会话用于 shell 命令。
变量
我们将准备以下环境变量(或稍后手动替换值):
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 受众
- 转到 GCP 控制台 -> 安全 -> 身份识别代理
- 找到需要CORS的实例,点击最右边的三个竖点按钮,选择Signed Header JWT Audience
- 弹出窗口应包含路径:/projects/[PROJECT_ID]/global/backendServices/[INSTANCE_ID]
- 通过在 VM 中运行 shell 命令来保存 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 令牌。请注意,您需要足够的权限才能执行此操作。请注意,我们在保存此环境变量时不使用导出;它只能在 shell 会话中访问,其他应用程序不能访问。
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 的输出,但具有新值。
请享用!