ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

terraform-provider-snowflake 权限授权终极指南:8 个新 Grant 资源如何替代 23 个旧资源

terraform-provider-snowflake 权限授权终极指南:8 个新 Grant 资源如何替代 23 个旧资源 terraform-provider-snowflake 权限授权终极指南8 个新 Grant 资源如何替代 23 个旧资源【免费下载链接】terraform-provider-snowflakeTerraform provider for managing Snowflake accounts项目地址: https://gitcode.com/gh_mirrors/te/terraform-provider-snowflake如果你正在用 Terraform 管理 Snowflake 账户account的权限一定对terraform-provider-snowflake不陌生。这个官方 Terraform Provider 最让人头疼的部分过去一直是数量庞大、职责混乱的 Grant 资源。好消息是项目团队已完成一次彻底的重构用 8 个全新的 Grant 资源含 1 个数据源取代了约 23 个旧资源。本文就是一份面向新手的权限授权终极指南帮你理清新资源体系、看懂迁移规则、快速上手避免踩坑。为什么必须重构旧 Grant 资源的三大痛点 在了解 8 个新资源之前先看看旧体系为什么被推翻。官方在 grants_redesign_design_decisions.md 中总结了三大原因痛点说明数量爆炸旧资源按目标对象划分表、视图、仓库各一个总数约 23 个维护成本极高覆盖不全旧资源并不完整很多 Snowflake 授权能力缺失无法覆盖 100% 授权场景职责混乱一个资源承载多种职责实现代码大量重复Bug 频出授权类 Issue 曾是社区反馈最多的类型核心思路转变从按对象划分资源改为按授权类型划分资源让每个资源只做一件事单一职责原则代码更易维护功能覆盖也更完整。全新 Grant 资源家族8 个成员一览 重构后Grant 相关能力收敛为7 个资源 1 个数据源官方统称新 Grant 资源类型资源名用途资源snowflake_grant_privileges_to_account_role向账户级角色授予对象权限最常用资源snowflake_grant_privileges_to_database_role向数据库级角色授予对象权限资源snowflake_grant_privileges_to_share向Share数据共享授予权限资源snowflake_grant_account_role把账户角色授予用户或其他角色资源snowflake_grant_database_role把数据库角色授予用户或其他角色资源snowflake_grant_application_role把应用角色授予用户或其他角色资源snowflake_grant_ownership转移对象所有权OWNERSHIP数据源snowflake_grants查询账户内的授权信息SHOW GRANTS所有资源注册入口集中在 provider.go数据源注册在 provider.go实现代码位于 pkg/resources/ 目录下的grant_*.go文件。23 个旧资源如何迁移三条主线规则 ️旧资源大多不能一一对应迁移官方在 MIGRATION_GUIDE.mdGrant resource mappings一节给出了清晰的映射规则本质上是三条主线主线一授权给角色→ 用snowflake_grant_privileges_to_account_role旧资源中凡是包含roles字段、把权限授给账户角色的统一改用新资源。覆盖了绝大多数旧资源snowflake_account_grant、snowflake_database_grant、snowflake_schema_grant、snowflake_table_grant、snowflake_view_grant、snowflake_warehouse_grant、snowflake_stage_grant、snowflake_stream_grant、snowflake_task_grant、snowflake_tag_grant、snowflake_pipe_grant、snowflake_function_grant、snowflake_procedure_grant、snowflake_sequence_grant、snowflake_file_format_grant、snowflake_external_table_grant、snowflake_materialized_view_grant、snowflake_masking_policy_grant、snowflake_row_access_policy_grant、snowflake_integration_grant、snowflake_resource_monitor_grant、snowflake_failover_group_grant、snowflake_user_grant、snowflake_grant_privileges_to_role等。主线二授权给共享→ 用snowflake_grant_privileges_to_share旧资源中含shares字段、向数据共享授权的那部分配置改用snowflake_grant_privileges_to_share。官方说明如果同时配置了roles和shares则需要拆分成两个新资源分别管理。主线三所有权转移 → 用snowflake_grant_ownership旧资源snowflake_role_ownership_grant和snowflake_user_ownership_grant被统一合并为snowflake_grant_ownership专门处理 OWNERSHIP 权限的授予与回收是 dbt 等工具与 Terraform 协同场景下的关键能力。角色归属类旧资源的归宿snowflake_role_grants角色间互授改用snowflake_grant_account_role数据库角色相关场景则使用snowflake_grant_database_role。迁移时的 5 个关键行为变化 ⚠️新资源不是简单改名行为上有多处重要调整迁移前务必知晓完全限定标识符Fully Qualified Name新资源要求使用完整对象标识符如object_name DB.SCHEMA.TABLE替代旧资源把库名、模式名、表名拆成多个字段的做法。优先使用fully_qualified_name字段可避免绝大多数标识符引号问题。enable_multiple_grants默认启用新资源默认只关心自己授予的权限不会像旧资源默认行为那样误回收外部如 SnowSight 手工授予的权限避免意外的权限撤销事故。严格权限管理实验特性若你希望资源主动检测并回收 Terraform 之外的额外授权可在 provider 层开启experimental_features_enabled [GRANTS_STRICT_PRIVILEGE_MANAGEMENT]并在资源上设置strict_privilege_management true。详细说明见 strict_privilege_management.md。on_all/on_future改为嵌套对象由布尔值改为结构化嵌套块更贴近官方GRANT PRIVILEGE文档on_future按触发器语义处理删除资源时会移除触发器但保留已授权限。always_apply参数使用all_privileges或on_all时可用always_apply true让每次terraform apply都重新执行授权语句注意这会破坏收敛语义CI/CD 中慎用。快速上手最小可用配置示例 下面是最常见的给账户角色授权数据库权限示例完整示例可在 grant_privileges_to_account_role.go 源码中查看 schema 定义resource snowflake_grant_privileges_to_account_role grant { account_role_name ANALYST_ROLE privileges [SELECT, INSERT] on_schema_object { object_type TABLE object_name ANALYTICS_DB.PUBLIC.SALES } }批量授权技巧for_each / count 一网打尽 ⚡由于新资源遵循单一职责相同配置可用 Terraform 内置的for_each或count批量生成轻松应对数百上千条授权的规模场景locals { users [user1, user2, user3] } resource snowflake_grant_account_role grants_to_users { for_each toset(local.users) role_name ANALYST_ROLE user_name each.value }官方在 grants_redesign_design_decisions.md 中提供了多角色 × 多用户组合授权的完整示例强烈建议查阅。迁移检查清单 ✅先升级 provider 到支持新资源的最新版本并在测试环境验证按角色 / 共享 / 所有权三条主线归类现有授权配置将拆分的标识符字段改写为完全限定标识符涉及外部手工授权的场景评估是否需要开启strict_privilege_management用for_each/count重构重复授权控制资源数量对照 MIGRATION_GUIDE.md 逐条核对映射再执行terraform plan验证总结8 个新 Grant 资源7 资源 1 数据源是terraform-provider-snowflake权限授权体系的一次脱胎换骨更少的资源、更清晰的职责、更完整的覆盖。对新手而言只需记住角色→account_role、共享→share、所有权→ownership这条主线再配合本文的迁移清单就能平滑完成从旧资源到新资源的过渡。查看设计决策全文可阅读 grants_redesign_design_decisions.md迁移细节以 MIGRATION_GUIDE.md 为准。【免费下载链接】terraform-provider-snowflakeTerraform provider for managing Snowflake accounts项目地址: https://gitcode.com/gh_mirrors/te/terraform-provider-snowflake创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表