You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Terraform导入资源后CD流水线执行plan报未授权错误排查

Terraform导入Databricks Catalog后CD流水线Plan权限报错问题

问题描述

我需要导入已存在的Databricks Catalog资源,因为初始Terraform Plan会尝试创建这些已存在的资源,操作步骤和遇到的问题如下:

  1. CD流水线执行terraform plan时输出:
# module.databricks.databricks_catalog.catalog["dev"] will be created
  + resource "databricks_catalog" "catalog" {
      + force_destroy = false
      + id            = (known after apply)
      + metastore_id  = (known after apply)
      + name          = "dev"
      + owner         = (known after apply)
    }
  1. 我在本地IDE用个人账号执行导入命令:
terraform import module.databricks.databricks_catalog.catalog[\"dev\"] dev
  1. 本地用个人账号执行terraform plan时,该资源会被跳过,待创建资源数量减少,一切正常。

  2. 但通过CD流水线执行terraform plan时,出现权限错误:

##[error]Terraform command 'plan' failed with exit code '1'.
##[error]╷
│ Error: cannot read catalog: User not authorized
  1. 删除Terraform状态文件重新开始后,流水线的terraform plan可正常执行。

请问我哪里操作有误?


问题根源

你用个人账号在本地导入资源的操作是核心问题:

  • Terraform导入资源后,会把该资源的记录存在状态文件中,后续执行plan时需要读取已存在的资源信息进行比对校验
  • 你的个人账号拥有访问dev Catalog的权限,但CD流水线使用的服务账号并没有该Catalog的读取权限
  • 流水线执行plan时,Terraform会使用流水线的服务账号去验证状态文件中记录的dev Catalog资源,直接触发了权限校验失败

解决方案

  • 统一使用流水线服务账号执行导入:不要用个人账号本地导入,改为在CD流水线中执行terraform import命令,或者用流水线服务账号的权限在本地导入后,将状态文件同步到流水线使用的远程存储,确保状态文件关联的资源权限适配流水线账号。
  • 为流水线服务账号授权:如果必须用个人账号导入,需要在Databricks中为流水线服务账号添加dev Catalog的读取权限(至少需要USE CATALOG和SELECT权限)。
  • 使用远程状态存储管理状态文件:放弃本地状态文件,配置Terraform使用远程状态存储(如AWS S3、Azure Blob Storage、Databricks工作区文件系统等),确保本地和流水线使用同一状态源,避免状态不一致或权限不匹配问题。

内容的提问来源于stack exchange,提问作者Saugat Mukherjee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 14:37:13