ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

OpenMetadata 接入 Amazon Redshift:连接器配置、权限体系与 IAM 认证实战指南

2026/9/15 20:14:49 拓冰建站 浏览量
OpenMetadata 接入 Amazon Redshift:连接器配置、权限体系与 IAM 认证实战指南 OpenMetadata 接入 Amazon Redshift连接器配置、权限体系与 IAM 认证实战指南【免费下载链接】OpenMetadataThe Open Context Layer for Data and AI , OpenMetadata is the open platform for building trusted data context and business semantics for humans, AI assistants, and agents.项目地址: https://gitcode.com/GitHub_Trending/op/OpenMetadata本文以 OpenMetadata 仓库内 Redshift 连接器的官方配置文档为主体系统讲解接入 Amazon Redshift 所需的系统视图权限、Profiler 与数据质量前置条件、Usage/Lineage 权限要求、完整的 Connection Details 参数说明、IAM 认证Provisioned 集群与 Serverless 工作组的区分以及样例数据存储S3配置并补充源码级实现佐证帮助读者一次性打通从建用户授权到跑通元数据、血缘、用量与画像工作流的完整链路。读完本文你将能够独立完成 OpenMetadata 中 Redshift 服务连接的创建、权限核查与常见连接故障排查。本文对应的原始配置文档位于 openmetadata-ui/src/main/resources/ui/public/locales/en-US/Database/Redshift.md该文档同时也是 OpenMetadata UI 中 Redshift 连接配置表单的字段说明来源连接参数定义见 redshiftConnection.json。一、Redshift 连接器在 OpenMetadata 中的定位Redshift 连接器是 OpenMetadata 众多数据库类连接器之一由 service_spec.py 统一注册通过DefaultDatabaseSpec将元数据、血缘、用量与画像四类工作流与连接类绑定在一起metadata_source_classRedshiftSource负责表、视图、Schema、存储过程等元数据抽取lineage_source_classRedshiftLineageSource负责表级与列级血缘usage_source_classRedshiftUsageSource负责查询用量统计profiler_classRedshiftProfilerInterface负责 Profiler 画像与数据质量测试connection_classRedshiftConnection负责建立 SQLAlchemy 引擎并执行连接测试。值得注意的是从该文件可以推断Redshift 连接器同时支持元数据、血缘、用量、Profiler 与存储过程stored procedures等完整能力且其连接测试Test Connection也由RedshiftConnection提供见 connection.py 中的RedshiftChecks。二、前置权限基础元数据抽取的最小授权Redshift 用户必须被授予SVV_TABLE_INFO的SELECT权限才能获取表和视图的元数据。SVV_TABLE_INFO是 Redshift 的系统视图记录了表/视图的存储信息行数、列数、编码、分布键、排序键等OpenMetadata 通过它快速枚举集群内的表与视图。文档给出的标准授权 SQL 如下-- Create a new user CREATE USER test_user with PASSWORD password; -- Grant SELECT on table GRANT SELECT ON TABLE svv_table_info to test_user;从源码角度可以验证这一要求连接测试阶段OpenMetadata 会执行has_table_privilege探测语句逐项核对权限见 queries.pySELECT has_table_privilege(SVV_TABLE_INFO, SELECT) as can_access_svv_table_info, has_table_privilege(STL_QUERY, SELECT) as can_access_stl_query, has_table_privilege(STL_QUERYTEXT, SELECT) as can_access_stl_querytext, has_table_privilege(STL_SCAN, SELECT) as can_access_stl_scan, has_table_privilege(SVL_STORED_PROC_CALL, SELECT) as can_access_stl_stored_proc_call, has_table_privilege(STL_INSERT, SELECT) as can_access_stl_insert, has_table_privilege(STL_DELETE, SELECT) as can_access_stl_delete;若探测结果中存在False连接测试的 GetQueries 步骤会直接失败并给出缺少查询历史视图 SELECT 权限的诊断与修复建议提示为 Provisioned 集群的stl_*或 Serverless 的sys_*视图授权。三、Provisioned 与 Serverless两套系统视图的权限差异Redshift 存在 Provisioned预置集群与 Serverless无服务器两种部署形态二者用于查询历史、血缘分析的系统视图完全不同。源码通过探测STL表是否可访问来判定实例类型见 connection.py执行SELECT 1 FROM pg_catalog.stl_query LIMIT 1若抛出ProgrammingError则判定为 Serverless因为 Serverless 架构不暴露 STL_* 表否则为 Provisioned。这一判定结果直接决定后续使用哪套 SQL 语句见 queries.py 中的REDSHIFT_SQL_STATEMENT_MAP、REDSHIFT_GET_STORED_PROCEDURE_QUERIES_MAP、REDSHIFT_SYSTEM_METRICS_QUERY_MAP等映射。因此在配置权限时请务必先确认目标 Redshift 的部署形态用途Provisioned 集群所需视图Serverless 所需视图表/视图元数据SVV_TABLE_INFOSVV_TABLE_INFO两形态通用查询历史用量/血缘STL_QUERY、STL_QUERYTEXT、STL_SCAN、SVL_STORED_PROC_CALLSYS_QUERY_HISTORY、SYS_QUERY_TEXT、SYS_QUERY_DETAIL、SYS_PROCEDURE_CALL四、Profiler 与数据质量Data Quality的权限要求执行 Profiler 工作流或数据质量测试时需要用户对执行画像/测试的表和 Schema 拥有SELECT权限同时应允许用户查看数据库中所有对象的SVV_TABLE_INFO信息。也就是说Profiler 用户既要有目标表的数据读取权也要有系统视图的元数据读取权二者缺一不可。此外System Metrics系统指标画像是一类特殊的 Profiler 能力Redshift 的 System Metrics 通过STL_INSERT/STL_DELETEProvisioned或SYS_QUERY_DETAILServerless统计表的插入/删除行数变化其实现可见 queries.py 中的REDSHIFT_SYSTEM_METRICS_QUERY与REDSHIFT_SERVERLESS_SYSTEM_METRICS_QUERY。若需要启用 System Metrics 画像应确保相关系统表/视图可被读取。五、Usage 与 Lineage 的权限要求对于用量Usage与血缘Lineage工作流用户需要以下权限Provisioned 集群SVV_TABLE_INFO、STL_QUERY、STL_QUERYTEXT、STL_SCAN和SVL_STORED_PROC_CALL视图的SELECT权限Serverless 实例SYS_QUERY_HISTORY、SYS_QUERY_TEXT、SYS_QUERY_DETAIL和SYS_PROCEDURE_CALL的SELECT权限。其底层实现中Provisioned 的用量查询会从stl_query读取查询记录通过stl_querytext的LISTAGG拼接完整 SQL再借助stl_scan关联svv_table_info解析出被访问的表与 Schema见 queries.pyServerless 则改用SYS_QUERY_HISTORY、SYS_QUERY_TEXT、SYS_QUERY_DETAIL完成等价逻辑见同文件 queries.py。用量处理器还会过滤掉 OpenMetadata 与 dbt 自身写入的标记查询以及maintenance、metrics、health等系统 label见 usage.py 中的过滤器定义避免自我污染。六、Connection Details 连接参数详解以下是创建 Redshift 数据库服务时各连接参数的完整说明字段 id 与 UI 表单及 JSON Schema 属性一一对应。SchemeschemeSQLAlchemy 驱动方案选项。根据 redshiftConnection.json 的定义当前唯一可选项为redshiftpsycopg2默认值不确定时使用默认值即可。Usernameusername连接 Redshift 的用户名。该用户必须能访问SVV_TABLE_INFO以抽取元数据其他工作流Profiler、Usage、Lineage可能需要额外权限参见上文权限章节。Passwordpassword连接 Redshift 的密码。在 Schema 层面认证方式由authType统一承载见redshiftConnection.json的authType属性支持两种类型Basic AuthbasicAuth.json用户名 密码对应连接参数passwordIAM AuthiamAuthConfig.json使用 AWS 凭证换取临时数据库凭证此时无需也不应配置静态密码clusterIdentifier/workgroupName仅在 IAM 认证下生效。Host PorthostPortRedshift 实例的主机与端口格式为hostname:port例如localhost:5439。如果 OpenMetadata 的 ingestion 运行在 Docker 中、而 Redshift 服务位于宿主机localhost则应使用host.docker.internal:5439作为值。Cluster IdentifierclusterIdentifierRedshift 集群标识符仅在 Provisioned 集群使用 IAM 认证时需要关注。对于标准 Redshift 主机名形如cluster-id.xxxxx.region.redshift.amazonaws.com标识符会从主机名的第一个 DNS label 自动推导因此该字段可以留空对于 PrivateLink/VPC 端点主机名形如vpce-xxx.vpce-svc-yyy.region.vpce.amazonaws.com以及自定义 DNS 名称第一个 label 并非集群标识符。此时 IAM 认证调用GetClusterCredentials会携带错误的标识符根据 IAM 策略的作用范围不同报错为AccessDenied或ClusterNotFound。设置该字段为真实集群标识符即可绕过主机名推导。该值可在 AWS 控制台Amazon Redshift Clusters的 Cluster identifier 列查看例如analytics-prod或通过 CLI 获取aws redshift describe-clusters --query Clusters[].ClusterIdentifier同时IAM 主体必须被允许对该集群的dbuser与dbnameARN 调用redshift:GetClusterCredentials。与 Workgroup Name 互斥Provisioned 集群使用 Cluster IdentifierRedshift Serverless 使用 Workgroup Name二者不可同时设置。Workgroup NameworkgroupNameRedshift Serverless 工作组名称仅在 Serverless 使用 IAM 认证时需要关注。对于标准 Serverless 主机名形如workgroup.account-id.region.redshift-serverless.amazonaws.com工作组名会自动从第一个 DNS label 推导字段可留空对于 PrivateLink/VPC 端点主机名vpce-...和自定义 DNS 名称推导会失败且由于 Serverless 是靠主机名模式识别的连接还会被误判为 Provisioned 集群。设置该字段既能修正工作组名又能强制走 Serverless 凭证 APIGetCredentials。该值可在 AWS 控制台Amazon Redshift Redshift Serverless Workgroups查看例如default-workgroup或通过 CLI 获取aws redshift-serverless list-workgroups --query workgroups[].workgroupNameIAM 主体必须被允许对该工作组调用redshift-serverless:GetCredentials。与 Cluster Identifier 互斥Serverless 使用 Workgroup NameProvisioned 使用 Cluster Identifier。IAM 认证的源码级行为上述显式字段优先、主机名推导兜底、二者互斥的规则在 connection.py 的_get_redshift_iam_credentials中实现优先检查clusterIdentifier/workgroupName若两者同时设置则直接抛出SourceConnectionException否则按workgroupName→clusterIdentifier→ 主机名是否包含redshift-serverless→ 默认 Provisioned 的优先级分派到对应的 AWS APIGetCredentials或GetClusterCredentials。此外由于 Redshift 临时凭证有效期很短默认约 15 分钟代码内置了RedshiftIamCredentialManager见 connection.py在距离过期 5 分钟时主动刷新凭证并通过 SQLAlchemydo_connect事件在每次新建连接时注入最新凭证保证长时 ingestion 不会因凭证过期而认证失败。Databasedatabase要连接的初始 Redshift 数据库。如果希望摄取所有数据库请同时将ingestAllDatabases设为true。Ingest All DatabasesingestAllDatabases勾选后工作流将摄取集群中的所有数据库不勾选则只摄取上面database字段指定数据库中的表。Schema 中该字段默认值为false且可与databaseFilterPattern叠加使用见redshiftConnection.json。SSL ModesslMode连接 Redshift 数据库的 SSL 模式例如prefer、verify-ca等。根据 verifySSLConfig.json 的定义合法枚举值完整列表为值含义disable禁用 SSL默认值allow先尝试非 SSL必要时升级为 SSLprefer优先使用 SSLrequire强制 SSL但不校验 CAverify-ca强制 SSL 并校验服务器 CA 证书verify-full强制 SSL、校验 CA 并校验主机名SSL CAcaCertificate用于 SSL 校验的 CA 证书对应sslrootcert。注意Redshift 只需 CA Certificate无需客户端证书链。Connection OptionsconnectionOptions用于构建连接 URL 的附加连接选项会作为查询参数拼入 SQLAlchemy 连接串在连接建立时发送给服务端。Connection ArgumentsconnectionArguments额外的连接参数如安全或协议配置直接透传给底层驱动psycopg2。完整配置示例以下是仓库内置的 redshift.yaml 元数据工作流示例已隐去示例 JWT仅作结构参考source: type: redshift serviceName: aws_redshift serviceConnection: config: hostPort: cluster.name.region.redshift.amazonaws.com:5439 username: username authType: password: strong_password # awsConfig: # awsRegion: eu-west-3 sslMode: require database: dev type: Redshift sourceConfig: config: type: DatabaseMetadata schemaFilterPattern: excludes: - information_schema.* - [\w]*event_vw.* sink: type: metadata-rest config: {} workflowConfig: openMetadataServerConfig: hostPort: http://localhost:8585/api authProvider: openmetadata securityConfig: jwtToken: your-jwt-token从redshiftConnection.json的required字段可知hostPort、username、database是必填项scheme、type、ingestAllDatabases、各过滤模式均有内置默认值。仓库中还有redshift_lineage.yaml、redshift_usage.yaml、redshift_profiler.yaml、redshift_classifier.yaml等示例可在 ingestion/src/metadata/examples/workflows 目录下查阅分别对应血缘、用量、画像与自动分类工作流的配置骨架。七、Sample Storage样例数据存储的 AWS S3 配置当 Redshift 连接器需要将样例数据Sample Data存储到 S3例如用于存储样例行数据、避免占用 Redshift 资源时需要配置以下 AWS S3 相关参数AWS Access Key IDawsAccessKeyId与 AWS Secret Access KeyawsSecretAccessKey访问 AWS 资源时AWS 使用安全凭证来认证并授权你的请求。访问密钥由两部分组成访问密钥 ID如AKIAIOSFODNN7EXAMPLE与秘密访问密钥如wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY二者必须同时使用才能完成认证。AWS RegionawsRegionAWS Region 是 AWS 划分数据中心的地理区域。由于 AWS 可以在多个区域部署实例需要指明目标服务所在区域。注意AWS Region 是配置连接时唯一必填的 AWS 参数其他 AWS 配置可以通过环境变量、共享凭证文件等方式由 boto3 自动解析详见 boto3 官方 credentials 指南。AWS Session TokenawsSessionToken若使用临时凭证访问服务除 Access Key ID 与 Secret Access Key 外还需要提供 AWS Session Token。Endpoint URLendPointURL以编程方式连接 AWS 服务时使用的端点endpoint。AWS SDK 与 AWS CLI 默认使用每个服务在每个区域的默认端点但可以为 API 请求指定替代端点例如 S3 兼容存储、自建 MinIO 等场景。Profile NameprofileNameAWS CLI 的命名配置文件named profile是应用于 CLI 命令的一组设置与凭证。如需使用default之外的配置文件在此填写其名称。Assume Role ARNassumeRoleArn用于跨账户或账户内角色切换。设置后 OpenMetadata 会调用 STSAssumeRole以目标角色 ARN 对应的权限访问资源。若希望使用 AssumeRole此项为必填前提是当前主体已被账户管理员授予对该角色 ARN 调用AssumeRole的权限。Assume Role Session NameassumeRoleSessionName被假定角色会话的标识符用于在同一角色被不同主体或出于不同原因假定assume时唯一标识会话。默认值为OpenMetadataSession。Assume Role Source IdentityassumeRoleSourceIdentity调用AssumeRole的主体principal所指定的源身份source identity。可在 AWS CloudTrail 日志中据此追踪是谁以该角色执行了操作。Bucket NamebucketName数据湖中用于组织与存储数据对象的桶名相当于对象存储中的文件夹命名空间。Prefixprefix数据源的路径前缀用于在桶内组织与归类数据便于快速定位所需数据对象。八、过滤模式Filter Patterns连接器支持四级正则过滤分别作用于数据库、Schema、表与存储过程只包含includes或排除excludes匹配正则的对象字段作用对象内置默认排除项来自 Schema 定义databaseFilterPattern数据库^template1$schemaFilterPatternSchema^information_schema$tableFilterPattern表^(?:.*\.)?mv_tbl__.*__\d$Redshift 物化视图的临时表storedProcedureFilterPattern存储过程无默认值定义于 redshiftConnection.json 的对应属性中ingestAllDatabases为falsedatabaseFilterPattern默认排除template1schemaFilterPattern默认排除information_schematableFilterPattern默认排除 Redshift 物化视图产生的内部表mv_tbl__*。仓库示例 redshift.yaml 中即展示了通过schemaFilterPattern.excludes排除information_schema.*与[\w]*event_vw.*事件视图的用法。九、连接测试与常见故障诊断创建连接后OpenMetadata 的 Test Connection 会依次执行 CheckAccessping、GetDatabases、GetSchemas、GetTables/GetViews、GetQueries 等步骤见 connection.py 的RedshiftChecks。其中 GetQueries 步骤会先探测实例类型再按类型执行对应的has_table_privilege探针任一权限缺失都会以明确诊断呈现。故障诊断由REDSHIFT_ERRORS错误包驱动见 connection.py常见场景与修复建议如下Authentication failed匹配password authentication failed检查用户名密码及用户是否被允许连接Database not found匹配database ... does not exist核对database字段是否存在、用户是否可访问Query history not accessiblehas_table_privilege探针返回False需按部署形态为stl_*Provisioned或sys_*Serverless查询历史视图授予 SELECT 权限Insufficient privilegesSQLSTATE42501为失败步骤所读取的对象授予 SELECT 权限Query history source not foundSQLSTATE42P01当前部署上查询历史视图不可用核对集群类型Provisioned vs Serverless网络类错误无法连接主机/端口则由NETWORK_ERRORS覆盖通常需检查安全组、网络可达性与hostPort写法Docker 环境下注意host.docker.internal。十、延伸阅读连接参数 Schema 定义redshiftConnection.jsonSSL 模式枚举定义verifySSLConfig.json连接建立与 IAM 认证实现connection.py元数据/用量/血缘/画像所用 SQLqueries.py服务规格注册service_spec.py用量处理实现usage.py工作流示例redshift.yaml、redshift_lineage.yaml、redshift_usage.yaml、redshift_profiler.yaml【免费下载链接】OpenMetadataThe Open Context Layer for Data and AI , OpenMetadata is the open platform for building trusted data context and business semantics for humans, AI assistants, and agents.项目地址: https://gitcode.com/GitHub_Trending/op/OpenMetadata创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考