咨询GCP中OAuth配置、授权域名及重定向URI的Terraform/CLI实现
解决方案
没问题!这两个生产部署中需要的自动化任务,都可以通过Terraform原生资源来实现,要是遇到特殊场景,也能结合gcloud命令用null_resource搞定。下面是具体的实现步骤:
使用Terraform原生资源(优先推荐)
1. 为OAuth同意屏幕添加授权DNS域名
要配置OAuth同意屏幕的授权域名,你需要先创建一个OAuth品牌(每个同意屏幕都必须关联一个品牌),再通过google_oauth_consent_screen资源设置授权域名列表。
# 创建OAuth品牌(首次配置时需要) resource "google_oauth_brand" "main" { support_email = "your-support-team@your-domain.com" application_title = "Your Production App" } # 配置OAuth同意屏幕并添加授权DNS域名 resource "google_oauth_consent_screen" "main" { brand = google_oauth_brand.main.name authorized_domains = ["your-domain.com", "another-authorized-domain.com"] # 替换为你的目标域名 privacy_policy_url = "https://your-domain.com/privacy-policy" terms_of_service_url = "https://your-domain.com/terms-of-service" }
authorized_domains参数接受一个字符串数组,你可以在这里添加所有需要授权的DNS域名。- 如果你的项目已经存在OAuth品牌,可以直接引用品牌的名称(格式为
projects/{project-id}/brands/{brand-id}),无需重新创建google_oauth_brand资源。
2. 为Web应用Client ID添加授权重定向URI
使用google_oauth_client资源可以创建或更新Web应用类型的OAuth客户端,通过redirect_uris参数设置授权重定向URI列表。
resource "google_oauth_client" "web_application" { name = "prod-web-app-client" project = var.gcp_project_id type = "WEB" # 指定为Web应用类型 redirect_uris = [ "https://your-domain.com/auth/callback", "https://app.your-domain.com/login/callback" ] # 替换为你的目标重定向URI javascript_origins = ["https://your-domain.com"] # 可选:如果需要配置JavaScript来源 }
type = "WEB"明确指定这是Web应用的Client ID,匹配GCP控制台中“Web应用”类型的客户端。redirect_uris同样接受数组,支持添加多个重定向URI。
备选方案:使用null_resource + gcloud命令
如果遇到Terraform原生资源暂时不支持的特殊配置场景,可以用null_resource结合gcloud命令来完成自动化:
更新OAuth同意屏幕的授权DNS域名
resource "null_resource" "update_oauth_consent_domains" { # 当域名列表变化时触发更新 triggers = { authorized_domains = join(",", ["your-domain.com", "new-domain.com"]) } provisioner "local-exec" { command = <<EOT # 确保安装gcloud alpha组件(首次运行需要) gcloud components install alpha -q # 更新同意屏幕的授权域名 gcloud alpha iap oauth-brands update-consent-screen ${google_oauth_brand.main.name} \ --authorized-domains=${self.triggers.authorized_domains} \ --project=${var.gcp_project_id} EOT } }
更新Web应用Client ID的授权重定向URI
resource "null_resource" "update_client_redirect_uris" { triggers = { redirect_uris = join(",", ["https://new-callback.your-domain.com"]) } provisioner "local-exec" { command = <<EOT gcloud alpha iap oauth-clients update ${google_oauth_client.web_application.client_id} \ --redirect-uris=${self.triggers.redirect_uris} \ --project=${var.gcp_project_id} EOT } }
注意:gcloud的
iap oauth-brands和oauth-clients命令目前属于alpha版本,使用前请确认GCP项目的API权限已正确配置。
内容的提问来源于stack exchange,提问作者José Enrique Hernández
相关产品推荐
相关产品推荐

