从 IAP OAuth Admin API 迁移

本指南介绍了如何从使用 Identity-Aware Proxy (IAP) OAuth Admin API 创建的 OAuth 2.0 客户端迁移到由 IAP 自动部署的 Google 管理的 OAuth 2.0 客户端。

有何变化

我们即将弃用 IAP OAuth Admin API,其中包括以下用于手动管理 OAuth 客户端和品牌的 API:

现在,IAP 会在需要时自动创建和管理 OAuth 客户端,而无需手动管理 OAuth 2.0 客户端。此更改简化了客户端管理,减少了人工错误,并简化了部署流程。

未发生变化的方面

此弃用不会影响您使用 Compute Engine API、App Engine API 或 Google Cloud 控制台手动配置的 OAuth 客户端。

您可以继续使用 Google Cloud 控制台创建新的 OAuth 品牌和客户端配置并对其进行管理,现有配置将继续获得全面支持。

如果您不使用 IAP OAuth Admin API,则此变更不会对您产生影响。

详细说明

自 2025 年 1 月 22 日起,用于创建 IAP OAuth 2.0 客户端的 IAP OAuth 2.0 Admin API 已被弃用。由于您不再需要配置 OAuth 客户端,因此不再需要 IAP OAuth 2.0 Admin API。IAP 现在默认使用 Google 管理的 OAuth 客户端进行浏览器访问,或者在未明确配置 OAuth 2.0 客户端时使用该客户端。Google 管理的 OAuth 2.0 客户端会限制对启用 IAP 的应用的访问权限,只有同一组织内的用户才能通过浏览器访问这些应用。

随着 Identity-Aware Proxy (IAP) OAuth 2.0 Admin API 的弃用,您将无法再创建或管理新的 OAuth 客户端。在弃用之前创建的 OAuth 客户端不会失效。您可以继续使用之前创建的 OAuth 客户端,并使用 Google Cloud 控制台管理这些客户端。

如果您已配置的应用使用通过 IAP 2.0 Admin API 或其他方式创建的 OAuth 客户端,则这些应用将继续正常运行。无需对应用进行任何更改。不过,如果您已配置自动化操作,以便在应用部署时创建新客户端或提取现有客户端的客户端密钥,则必须更新自动化脚本,以移除对 IAP OAuth 2.0 Admin API 的依赖。

如果您打算使用 Google 管理的 OAuth 2.0 客户端,请使用程序化访问指南为这些应用配置程序化访问权限。

如果 Google 管理的 OAuth 2.0 客户端无法满足您的需求,您可以与多个 IAP 应用共享单个 OAuth 客户端,从而无需为每个新应用手动创建客户端。

通过 Marketplace 渠道非公开优惠完成的购买交易

  • 更新自动化脚本

    如果您使用 Terraform 或其他工具来自动配置 IAP,并使用 IAP OAuth 2.0 Admin API,则必须更新自动化脚本,以使用预先创建的客户端或将 Google 管理的 OAuth 客户端与 IAP 搭配使用。

  • 为使用 Google 管理的 OAuth2.0 客户端的应用配置程序化访问权限

    如果您已有一些受 IAP 保护的应用,并计划将这些应用迁移为使用 Google 管理的 OAuth 2.0 客户端,则可以通过将 OAuth 2.0 客户端列入许可名单来为这些应用配置程序化访问权限。

迁移启用 IAP 的资源

如需迁移资源以使用 Google 管理的 OAuth 2.0 客户端,请按照您要迁移的资源类型(例如 Compute Engine 资源)执行相应步骤。

迁移启用了 IAP 的 App Engine 资源

完成本部分中的步骤,以迁移已启用 IAP 并配置了 OAuth 2.0 客户端的 App Engine 资源。

gcloud

在继续执行后续步骤之前,请确保您拥有最新版本的 gcloud CLI。如需了解如何安装 gcloud CLI,请参阅安装 gcloud CLI

  1. 使用 Google Cloud CLI 进行身份验证。

    gcloud auth login
    
  2. 点击显示的网址并登录。

  3. 登录后,复制显示的验证码并将其粘贴到命令行中。

  4. 运行以下命令,指定包含您要继续使用 IAP 保护的应用的项目。

    gcloud config set project PROJECT_ID
    
  5. 运行以下命令以提取已配置的 OAuth 2.0 客户端 ID。

    gcloud app describe --format="value(iap.oauth2ClientId)"
    

    如果您想允许程序化访问,请保存上一个命令中的客户端 ID。

  6. 如需将 OAuth 2.0 客户端列入许可名单以进行程序化访问,请对 IAP 设置 API 执行读取-更新-写入操作。

    gcloud iap settings get --resource-type=app-engine --project=$PROJECT > settings.yaml
    
  7. 更新 settings.yaml 文件,并在 programmaticClients 下添加之前提取的 OAuth 2.0 客户端 ID,如示例所示。

    accessSettings:
      oauthSettings:
        programmaticClients:
        - CLIENT_ID
    
  8. 在 App Engine 应用上应用新设置

    gcloud iap settings set settings.yaml --resource-type=app-engine --project=PROJECT_ID
    
  9. 如需迁移应用,请运行以下命令。

    gcloud iap web enable --resource-type=app-engine
    

API

  1. 运行以下命令以提取已配置的 OAuth 2.0 客户端 ID。

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Accept: application/json" \
    -H "Content-Type: application/json" \
    "https://appengine.googleapis.com/v1/apps/PROJECT_ID?fields=iap"
    
  2. 运行以下命令,将现有的 IAP 设置提取到 settings.json 文件中。

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Accept: application/json" \
    -H "Content-Type: application/json" \
    "https://iap.googleapis.com/v1/projects/PROJECT_ID/iap_web/appengine-PROJECT_ID:iapSettings" > settings.json
    
  3. 更新 settings.json 文件,以添加之前保存的 CLIENT_ID 作为程序化客户。

    {
       "accessSettings": {
         "oauthSettings": {
           "programmaticClients": [
             "CLIENT_ID"
           ]
         },
       },
    }
    
  4. 运行以下命令以更新 IAP 设置。

    curl -X PATCH \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Accept: application/json" \
    -H "Content-Type: application/json" \
    -d "@settings.json" \
    "https://iap.googleapis.com/v1/projects/PROJECT_ID/iap_web/appengine-PROJECT_ID:iapSettings"
    
  5. 运行以下命令以准备 settings.json 文件。

     cat << EOF > settings.json
     {
     "iap":
         {
           "enabled":true
         }
     }
     EOF
    
  6. 运行以下命令以迁移应用。

     curl -X PATCH \
     -H "Authorization: Bearer $(gcloud auth print-access-token)" \
     -H "Accept: application/json" \
     -H "Content-Type: application/json" \
     -d @settings.json \
     "https://appengine.googleapis.com/v1/apps/PROJECT_ID?updateMask=iap"
    

迁移启用 IAP 的 Compute Engine 资源

完成本部分中的步骤,以迁移已启用 IAP 并配置了 OAuth 2.0 客户端的 Compute Engine 资源。

gcloud

在继续执行后续步骤之前,请确保您拥有最新版本的 gcloud CLI。如需了解如何安装 gcloud CLI,请参阅安装 gcloud CLI

  1. 使用 Google Cloud CLI 进行身份验证。

    gcloud auth login
    
  2. 点击显示的网址并登录。

  3. 登录后,复制显示的验证码并将其粘贴到命令行中。

  4. 运行以下命令,指定包含您要继续使用 IAP 保护的应用的项目。

    gcloud config set project PROJECT_ID
    
  5. 运行以下命令以提取已配置的 OAuth 2.0 客户端 ID。

    全球范围

    
    gcloud compute backend-services describe BACKEND_SERVICE_NAME \
    --global \
    --format="value(iap.oauth2ClientId)"

    区域范围

    
    gcloud compute backend-services describe BACKEND_SERVICE_NAME \
    --region REGION_NAME \
    --format="value(iap.oauth2ClientId)"
    如果您想允许程序化访问,请保存上一个命令中的客户端 ID。
  6. 如需将 OAuth 2.0 客户端列入许可名单以进行程序化访问,请对 IAP 设置 API 执行读取-更新-写入操作。

    全球范围

    
    gcloud iap settings get \
    --resource-type=compute \
    --project=PROJECT_ID \
    --service=BACKEND_SERVICE_NAME > settings.yaml

    区域范围

    
    gcloud iap settings get \
    --resource-type=compute \
    --project=PROJECT_ID \
    --service=BACKEND_SERVICE_NAME \
    --region=REGION_NAME > settings.yaml
  7. 更新 settings.yaml 文件,并在 programmaticClients 下添加之前提取的 OAuth 2.0 客户端 ID,如示例所示。

    accessSettings:
      oauthSettings:
        programmaticClients:
        - CLIENT_ID
    
  8. 在 Compute Engine 应用上应用新设置

    全球范围

    
    gcloud iap settings set settings.yaml \
    --resource-type=compute \
    --project=PROJECT_ID \
    --service=BACKEND_SERVICE_NAME

    区域范围

    
    gcloud iap settings set settings.yaml \
    --resource-type=compute \
    --project=PROJECT_ID \
    --service=BACKEND_SERVICE_NAME \
    --region=REGION_NAME
  9. 如需迁移应用,请运行全局范围或区域范围的命令。

    全球范围

    
    gcloud compute backend-services update BACKEND_SERVICE_NAME \
    --global \
    --iap=enabled,oauth2-client-id=" ",oauth2-client-secret=" "

    区域范围

    
    gcloud compute backend-services update BACKEND_SERVICE_NAME \
    --region REGION_NAME \
    --iap=enabled,oauth2-client-id=" ",oauth2-client-secret=" "
  10. 如需确认 OAuth 客户端 ID 未设置,请运行以下全局范围或区域范围的命令。 运行该命令后,检查输出以确保 OAuth 客户端 ID 字段为空。

    全球范围

    
    gcloud compute backend-services describe BACKEND_SERVICE_NAME \
    --global
    

    区域范围

    
    gcloud compute backend-services describe BACKEND_SERVICE_NAME \
    --region REGION_NAME
    

API

  1. 运行以下命令以提取已配置的 OAuth 2.0 客户端 ID。

    全球范围

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Accept: application/json" \
    -H "Content-Type: application/json" \
    "https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/BACKEND_SERVICE_NAME?fields=iap.oauth2ClientId"
    

    区域范围

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Accept: application/json" \
    -H "Content-Type: application/json" \
    "https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION_NAME/backendServices/BACKEND_SERVICE_NAME?fields=iap.oauth2ClientId"
    

  2. 运行以下命令,将现有的 IAP 设置提取到 settings.json 文件中。

    全球范围

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://iap.googleapis.com/v1/projects/PROJECT_ID/iap_web/compute/services/BACKEND_SERVICE_NAME:iapSettings" > settings.json
    

    区域范围

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://iap.googleapis.com/v1/projects/PROJECT_ID/iap_web/compute-REGION_NAME/services/BACKEND_SERVICE_NAME:iapSettings" > settings.json
    

  3. 更新 settings.json 文件,以添加之前保存的 CLIENT_ID 作为程序化客户。

    {
       "accessSettings": {
         "oauthSettings": {
           "programmaticClients": [
             "CLIENT_ID"
           ]
         },
       },
    }
    
  4. 运行以下命令以更新 IAP 设置。

    全球范围

    curl -X PATCH \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Accept: application/json" \
    -H "Content-Type: application/json" \
    -d "@settings.json" \
    "https://iap.googleapis.com/v1/projects/PROJECT_ID/iap_web/compute/services/BACKEND_SERVICE_NAME:iapSettings"
    

    区域范围

    curl -X PATCH \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Accept: application/json" \
    -H "Content-Type: application/json" \
    -d "@settings.json" \
    "https://iap.googleapis.com/v1/projects/PROJECT_ID/iap_web/compute-REGION_NAME/services/BACKEND_SERVICE_NAME:iapSettings"
    

  5. 运行以下命令以准备 settings.json 文件。

    cat << EOF > settings.json
    {
    "iap":
         {
           "enabled":true,
           "oauth2ClientId": " ",
           "oauth2ClientSecret": " "
         }
    }
    EOF
    
  6. 运行以下命令以迁移 IAP 资源。

    全球范围

    curl -X PATCH \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Accept: application/json" \
    -H "Content-Type: application/json" \
    -d @settings.json \
    "https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/BACKEND_SERVICE_NAME"
    

    区域范围

    curl -X PATCH 
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Accept: application/json" \ -H "Content-Type: application/json" \ -d @settings.json \ "https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION_NAME/backendServices/BACKEND_SERVICE_NAME"

  7. 如需确认 OAuth 客户端 ID 未设置,请运行以下全局范围或区域范围的命令。 运行该命令后,检查输出以确保 OAuth 客户端 ID 字段为空。

    全球范围

    curl -X PATCH \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/BACKEND_SERVICE_NAME"
    

    区域范围

    curl -X PATCH \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION_NAME/backendServices/BACKEND_SERVICE_NAME"
    

Terraform

如果您要迁移已启用 IAP 的现有资源以使用 Google 管理的 OAuth 客户端,则必须通过将 oauth2_client_idoauth2_client_secret 字段更新为单个空格来明确取消设置这两个字段。

示例:


resource "google_compute_backend_service" "default" {
  name                  = "tf-test-backend-service-external"
  protocol              = "HTTP"
  load_balancing_scheme = "EXTERNAL"
  iap {
    oauth2_client_id     = " "
    oauth2_client_secret = " "
  }
}

oauth2_client_idoauth2_client_secret 字段为选填字段,如果您使用的是启用了 IAP 的新资源,则可以忽略这两个字段。

如需了解详情,请参阅 Terraform 文档

迁移已启用 IAP 的 Cloud Run 资源

完成本部分中的步骤,以迁移已启用 IAP 并配置了 OAuth 2.0 客户端的 Cloud Run 资源。

gcloud

在继续执行后续步骤之前,请确保您拥有最新版本的 gcloud CLI。如需了解如何安装 gcloud CLI,请参阅安装 gcloud CLI

  1. 如需进行身份验证,请使用 Google Cloud CLI 并运行以下命令。

    gcloud auth login
    
  2. 点击显示的网址并登录。

  3. 登录后,复制显示的验证码并将其粘贴到命令行中。

  4. 运行以下命令,指定包含您要继续使用 IAP 保护的应用的项目。

    gcloud config set project PROJECT_ID
    
  5. 运行以下命令以提取已配置的 OAuth 2.0 客户端 ID。

    全球范围

    
    gcloud compute backend-services describe BACKEND_SERVICE_NAME \
    --global \
    --format="value(iap.oauth2ClientId)"

    区域范围

    
    gcloud compute backend-services describe BACKEND_SERVICE_NAME \
    --region REGION_NAME \
    --format="value(iap.oauth2ClientId)"
    如果您想允许程序化访问,请保存上一个命令中的客户端 ID。
  6. 如需将 OAuth 2.0 客户端列入许可名单以进行程序化访问,请对 IAP 设置 API 执行读取-更新-写入操作。

    全球范围

    
    gcloud iap settings get \
    --resource-type=compute \
    --project=PROJECT_ID \
    --service=BACKEND_SERVICE_NAME > settings.yaml

    区域范围

    
    gcloud iap settings get \
    --resource-type=compute \
    --project=PROJECT_ID \
    --service=BACKEND_SERVICE_NAME \
    --region=REGION_NAME > settings.yaml
  7. 更新 settings.yaml 文件,并在 programmaticClients 下添加之前提取的 OAuth 2.0 客户端 ID,如示例所示。

    accessSettings:
      oauthSettings:
        programmaticClients:
        - CLIENT_ID
    
  8. 在 Compute Engine 应用上应用新设置

    全球范围

    
    gcloud iap settings set settings.yaml \
    --resource-type=compute \
    --project=PROJECT_ID \
    --service=BACKEND_SERVICE_NAME

    区域范围

    
    gcloud iap settings set settings.yaml \
    --resource-type=compute \
    --project=PROJECT_ID \
    --service=BACKEND_SERVICE_NAME \
    --region=REGION_NAME
  9. 如需迁移资源,请运行全局范围或区域范围的命令。

    全球范围

    
    gcloud compute backend-services update BACKEND_SERVICE_NAME \
    --global \
    --iap=enabled,oauth2-client-id=" ",oauth2-client-secret=" "

    区域范围

    
    gcloud compute backend-services update BACKEND_SERVICE_NAME \
    --region REGION_NAME \
    --iap=enabled,oauth2-client-id=" ",oauth2-client-secret=" "

  10. 如需确认 OAuth 客户端 ID 未设置,请运行以下全局范围或区域范围的命令。 运行该命令后,检查输出以确保 OAuth 客户端 ID 字段为空。

    全球范围

    
    gcloud compute backend-services describe BACKEND_SERVICE_NAME \
    --global
    

    区域范围

    
    gcloud compute backend-services describe BACKEND_SERVICE_NAME \
    --region REGION_NAME
    

API

  1. 运行以下命令以提取已配置的 OAuth 2.0 客户端 ID。

    全球范围

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Accept: application/json" \
    -H "Content-Type: application/json" \
    "https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/BACKEND_SERVICE_NAME?fields=iap.oauth2ClientId"
    

    区域范围

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Accept: application/json" \
    -H "Content-Type: application/json" \
    "https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION_NAME/backendServices/BACKEND_SERVICE_NAME?fields=iap.oauth2ClientId"
    

  2. 运行以下命令,将现有的 IAP 设置提取到 settings.json 文件中。

    全球范围

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://iap.googleapis.com/v1/projects/PROJECT_ID/iap_web/compute/services/BACKEND_SERVICE_NAME:iapSettings" > settings.json
    

    区域范围

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://iap.googleapis.com/v1/projects/PROJECT_ID/iap_web/compute-REGION_NAME/services/BACKEND_SERVICE_NAME:iapSettings" > settings.json
    

  3. 更新 settings.json 文件,以添加之前保存的 CLIENT_ID 作为程序化客户。

    {
       "accessSettings": {
         "oauthSettings": {
           "programmaticClients": [
             "CLIENT_ID"
           ]
         },
       },
    }
    
  4. 运行以下命令以更新 IAP 设置。

    全球范围

    curl -X PATCH \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Accept: application/json" \
    -H "Content-Type: application/json" \
    -d "@settings.json" \
    "https://iap.googleapis.com/v1/projects/PROJECT_ID/iap_web/compute/services/BACKEND_SERVICE_NAME:iapSettings"
    

    区域范围

    curl -X PATCH \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Accept: application/json" \
    -H "Content-Type: application/json" \
    -d "@settings.json" \
    "https://iap.googleapis.com/v1/projects/PROJECT_ID/iap_web/compute-REGION_NAME/services/BACKEND_SERVICE_NAME:iapSettings"
    

  5. 运行以下命令以准备 settings.json 文件。

    cat << EOF > settings.json
    {
    "iap":
         {
           "enabled":true,
           "oauth2ClientId": " ",
           "oauth2ClientSecret": " "
         }
    }
    EOF
    
  6. 运行以下命令以迁移资源。

    全球范围

    curl -X PATCH \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Accept: application/json" \
    -H "Content-Type: application/json" \
    -d @settings.json \
    "https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/BACKEND_SERVICE_NAME"
    

    区域范围

    curl -X PATCH 
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Accept: application/json" \ -H "Content-Type: application/json" \ -d @settings.json \ "https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION_NAME/backendServices/BACKEND_SERVICE_NAME"

  7. 如需确认 OAuth 客户端 ID 未设置,请运行以下全局范围或区域范围的命令。 运行该命令后,检查输出以确保 OAuth 客户端 ID 字段为空。

    全球范围

    curl -X PATCH \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/BACKEND_SERVICE_NAME"
    

    区域范围

    curl -X PATCH \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION_NAME/backendServices/BACKEND_SERVICE_NAME"
    

迁移启用 IAP 的 Google Kubernetes Engine 资源

将以下 IAP 块添加到 BackendConfig 自定义资源定义 (CRD)。这会使用 Google 管理的 OAuth 2.0 客户端启用 IAP。

apiVersion: cloud.google.com/v1
kind: BackendConfig
metadata:
  name: config-default
  namespace: my-namespace
spec:
  iap:
    enabled: true

使用服务账号 JWT 向 IAP 进行身份验证

您可以使用服务账号 JWT 向 IAP 进行身份验证,而无需使用已弃用的 OAuth Admin API。

获取 OAuth 客户端的密钥

如需在不使用已弃用的 OAuth Admin API 的情况下获取 OAuth 客户端的密钥,请按照此 Terraform 示例中的说明使用 Secret Manager:google_secret_manager_secret

确定您是否在使用 OAuth Admin API

如需检查您是否在使用 OAuth Admin API,请完成以下步骤。

  1. 在 Google Cloud 控制台中,打开“IAP API”页面,然后选择要分析的项目。
    前往“IAP API”页面

  2. 选择图表列表中,选择流量(按 API 方法),然后点击确定

  3. 方法部分中,查找任何带有前缀 google.cloud.iap.v1.IdentityAwareProxyOAuthService 的方法,这表示项目使用了 OAuth Admin API。