使用OpenTofu创建Google SQL数据库时遭遇403授权错误求助
以下是可能导致该403错误的核心原因及对应的排查思路:
OpenTofu Google Provider身份上下文异常
尽管WIF在GitHub Action全局层面配置生效,但OpenTofu的Google Provider可能未正确继承WIF身份上下文。比如创建Cloud SQL实例时身份正确,但创建数据库时,provider可能使用了缓存的旧凭证、默认GitHub Action身份,或是provider配置中存在硬编码credentials覆盖了WIF身份。
排查:检查googleprovider配置,确保无硬编码credentials,且明确通过环境变量(如GOOGLE_OAUTH_ACCESS_TOKEN)或provider自动获取WIF生成的凭证。Cloud SQL实例内部权限同步延迟
depends_on仅保证实例资源创建完成,但GCP Cloud SQL实例在进入RUNNING状态后,内部IAM权限同步到实例层级可能存在延迟。此时项目级权限已生效,但实例级别的权限检查尚未完成,导致创建数据库时触发403。
排查:尝试将等待时间延长至300秒以上,或修改依赖条件为google_sql_database_instance.sql_instance.self_link,确保实例内部状态完全就绪。OpenTofu与GCP Provider版本兼容性问题
当前使用的OpenTofu 1.8.3与对应的GCP Provider版本可能存在兼容性bug,导致WIF身份的凭证传递逻辑异常,无法正确通过SQL Admin API的权限校验。
排查:查看GCP Provider的版本兼容文档,升级到与OpenTofu 1.8.3匹配的最新稳定版本,或降级到已知无权限问题的版本测试。WIF凭证权限范围缺失
WIF配置的身份凭证可能未包含SQL Admin API所需的权限范围(https://www.googleapis.com/auth/sqlservice.admin)。gcloud命令会自动添加必要范围,但OpenTofu Provider可能未默认配置该范围,导致请求权限不足。
排查:在Google Provider配置中显式添加scopes = ["https://www.googleapis.com/auth/sqlservice.admin"],或检查WIF工作负载身份池提供者的范围配置是否包含该权限。实例级IAM绑定的隐性限制
虽然服务账号拥有项目级Owner和Cloud SQL Admin角色,但Cloud SQL实例可能存在实例级IAM拒绝策略,或实例创建时自动添加的绑定限制了操作权限。不过此可能性较低,因为gcloud impersonate操作可成功。
排查:通过gcloud sql instances get-iam-policy <INSTANCE_NAME>检查实例级IAM绑定,确认无拒绝策略或限制规则。
内容的提问来源于stack exchange,提问作者Christoph

