创建无公网IP的CloudSQL实例触发组织策略限制报错求助
constraints/sql.restrictPublicIp组织策略错误的问题 问题背景
我开发了一个创建CloudSQL实例的程序,近期组织启用了禁止CloudSQL实例使用公网IP的策略(对应约束constraints/sql.restrictPublicIp)。代码里已经将Ipv4Enabled设为false,理论上不会分配公网IP,但创建实例时依然报错:
googleapi: Error 400: Invalid request: Organization Policy check failure: the external IP of this instance violates the constraints/sql.restrictPublicIp enforced at the XXX project
核心创建代码如下:
scannerInstance := &sqladmin.DatabaseInstance{ DatabaseVersion: targetInstance.DatabaseVersion, Settings: &sqladmin.Settings{ IpConfiguration: &sqladmin.IpConfiguration{ RequireSsl: true, Ipv4Enabled: false, PrivateNetwork: cloudSqlRequest.VpcNetwork, }, Kind: "sql#settings", AvailabilityType: "ZONAL", DatabaseFlags: targetInstance.Settings.DatabaseFlags, BackupConfiguration: &sqladmin.BackupConfiguration{Enabled: false}, DatabaseReplicationEnabled: false, DataDiskSizeGb: targetInstance.Settings.DataDiskSizeGb, Tier: targetInstance.Settings.Tier, TimeZone: targetInstance.Settings.TimeZone, }, Name: InstanceName, InstanceType: "CLOUD_SQL_INSTANCE", Project: cloudSqlRequest.ProjectId, Region: targetInstance.Region, RootPassword: rootPassword, } _, err = scannerClient.SqlService.Instances.Insert(cloudSqlRequest.ScannerProjectId, scannerInstance).Context(ctx).Do()
解决方案
校验VPC网络路径正确性
确保cloudSqlRequest.VpcNetwork是完整的VPC网络资源名,格式必须为projects/[你的项目ID]/global/networks/[VPC名称]。如果路径错误,CloudSQL会尝试 fallback 分配公网IP,直接触发策略限制。显式清空授权网络列表
即使Ipv4Enabled设为false,如果代码中隐式带入了非空的AuthorizedNetworks(比如从其他配置继承),也会触发策略检查。需要在IpConfiguration里显式设置空列表:IpConfiguration: &sqladmin.IpConfiguration{ RequireSsl: true, Ipv4Enabled: false, PrivateNetwork: cloudSqlRequest.VpcNetwork, AuthorizedNetworks: []sqladmin.AclEntry{}, // 明确设为空 },确认组织策略的附加要求
有些组织的constraints/sql.restrictPublicIp策略会要求实例必须关联专用服务访问通道(Private Service Access)。这种情况下,要先给目标VPC创建好专用服务访问连接,再创建CloudSQL实例。升级API客户端版本
旧版的Cloud SQL Admin Go客户端可能存在Ipv4Enabled参数的处理bug,导致配置未生效。建议升级到最新版的google.golang.org/api/sqladmin客户端库。
内容的提问来源于stack exchange,提问作者Toussah

