View a markdown version of this page

在亚马逊中将 Snowflake 作为数据源进行连接 DataZone - Amazon DataZone

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

在亚马逊中将 Snowflake 作为数据源进行连接 DataZone

亚马逊 DataZone 支持 Snowflake 作为第三方数据源。将 Snowflake 连接到亚马逊 DataZone 项目后,该目录可以索引您的 Snowflake 数据库和架构,从 Snowflake 的查询历史记录中捕获列级谱系,并允许您通过联合来查询 Snowflake 表。本页将引导您使用 CLI AWS 创建 Snowflake 连接。

先决条件

在开始之前,请确认以下内容已准备就绪:

  • 一个 Amazon DataZone 域名和一个你想要将 Snowflake 数据编入目录的项目。请参阅Amazon 中的域名和用户访问权限 DataZoneAmazon DataZone 项目和环境

  • 一个 Snowflake 帐户,具有在要编目的数据库、架构和仓库中创建角色和授予权限的权限。

  • 使用与您 AWS Secrets Manager 的 Amazon DataZone 域名相同的 AWS 账户进行访问。

  • 如果您打算从中查询 Snowflake 数据,则可以使用 Amazon S3 存储桶进行查询泄露。

您将按以下顺序执行以下步骤:创建 Snowflake 角色,将 Snowflake 凭证存储在中, AWS Secrets Manager找到您的亚马逊 DataZone 项目环境 ID,然后致电。aws datazone create-connection

第 1 步:为亚马逊创建 Snowflake 角色 DataZone

亚马逊使用您创建并向其授予特定权限的角色 DataZone 连接到 Snowflake。角色授权分为四类:

  • 元数据同步 — Amazon DataZone 读取您的表和视图的结构以填充目录。

  • 血统同步 — 亚马逊 DataZone 读取 Snowflake 的 QUERY_HISTORY 和 ACCESS_HISTORY 来推导列级血统。

  • 查询权限 — 通过 Amazon DataZone 发出的查询(包括来自)的查询是必需的。

  • 仓库使用情况-角色执行的任何查询都需要使用。

在 Snowflake 中运行以下语句,将占位符替换为你的值:

CREATE ROLE <role_name>; -- Metadata: database and schema access GRANT USAGE ON DATABASE <database_name> TO ROLE <role_name>; GRANT USAGE ON SCHEMA <database_name>.<schema_name> TO ROLE <role_name>; -- Metadata: table and view structure (no data access) GRANT REFERENCES ON ALL TABLES IN SCHEMA <database_name>.<schema_name> TO ROLE <role_name>; GRANT REFERENCES ON ALL VIEWS IN SCHEMA <database_name>.<schema_name> TO ROLE <role_name>; GRANT REFERENCES ON FUTURE TABLES IN SCHEMA <database_name>.<schema_name> TO ROLE <role_name>; GRANT REFERENCES ON FUTURE VIEWS IN SCHEMA <database_name>.<schema_name> TO ROLE <role_name>; -- Lineage: access to QUERY_HISTORY and ACCESS_HISTORY GRANT IMPORTED PRIVILEGES ON DATABASE SNOWFLAKE TO ROLE <role_name>; -- Query access GRANT SELECT ON ALL TABLES IN SCHEMA <database_name>.<schema_name> TO ROLE <role_name>; -- Optional: include tables created after the role is granted GRANT SELECT ON FUTURE TABLES IN SCHEMA <database_name>.<schema_name> TO ROLE <role_name>; -- Warehouse access GRANT USAGE ON WAREHOUSE <warehouse_name> TO ROLE <role_name>; -- Assign the role to the Snowflake user whose credentials DataZone will use GRANT ROLE <role_name> TO USER <snowflake_username>;
重要

GRANT IMPORTED PRIVILEGES ON DATABASE SNOWFLAKE是血统所必需的。如果没有它,元数据同步就会成功,但不会捕获任何世系记录。

第 2 步:将 Snowflake 凭据存储在 AWS Secrets Manager

在 AWS Secrets Manager与您的 Amazon DataZone 域名相同的 AWS 账户中创建密钥。Amazon DataZone 支持两种身份验证方法:用户名和密码或密钥对。

要进行用户名和密码身份验证,请使用以下 JSON 正文:

{ "username": "<snowflake_username>", "password": "<snowflake_password>" }

要进行密钥对身份验证,请使用以下 JSON 正文:

{ "sfUser": "<snowflake_username>", "pem_private_key": "-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----" }

给秘密加标签,这样 Amazon DataZone 就可以发现它。这两个标签都是必需的:

标签键
AmazonDataZoneDomain 您的亚马逊 DataZone 域名
AmazonDataZoneProject 您的亚马逊 DataZone 项目 ID

请注意密钥的 ARN。您将在步骤 4 create-connection 中将其传递给。

第 3 步:查找您的项目环境 ID

create-connectionAPI 调用需要连接所在的项目环境的 ID。你可以从项目用户角色 ARN 中推导出来。

项目用户角色 ARN 遵循以下模式:

arn:aws:iam::<account_id>:role/datazone_usr_role_<project_id>_<environment_id>

最后一个下划线之后的最后一段是环境 ID。例如,在:

arn:aws:iam::123456789012:role/datazone_usr_role_a1b2c3dfadsf_58cjkfdsjfd

58cjkfdsjfd 是环境 ID。这是要传递的值,如步骤 4 --environment-identifier 所示。环境 ID 对应于您项目的工具环境。

步骤 4:创建 Snowflake 连接

运行以下 AWS CLI 命令,用您的值替换占位符:

aws datazone create-connection \ --domain-identifier <domain_id> \ --environment-identifier <environment_id> \ --name "<connection_name>" \ --description "<optional_description>" \ --props '{ "snowflakeProperties": { "connectivityProperties": { "connectionProperties": { "HOST": "<account>.snowflakecomputing.com", "PORT": "443", "DATABASE": "<database_name>", "WAREHOUSE": "<warehouse_name>", "SCHEMA": "<schema_name>", "ROLE_ARN": "<project_user_role_arn>", "CATALOG_CASING_FILTER": "UPPERCASE_ONLY" }, "athenaProperties": { "spill_bucket": "<project_s3_bucket_name>", "spill_prefix": "<domain_id>/<project_id>/dev/sys/athena" }, "authenticationConfiguration": { "authenticationType": "BASIC", "secretArn": "<secret_arn_from_step_2>" } }, "snowflakeRole": "<role_name_from_step_1>", "identityMapping": { "usernameAttribute": "EMAIL" } } }'

连接属性参考

属性 说明
HOST 你的 Snowflake 账号网址。
PORT Snowflake 端口。使用 443
DATABASE 要编目的 Snowflake 数据库。
WAREHOUSE 亚马逊 DataZone 用来运行查询的 Snowflake 仓库。
SCHEMA 要编目的 Snowflake 架构。
ROLE_ARN 项目用户角色 ARN(参见步骤 3)。
CATALOG_CASING_FILTER 控制已编目标识符的大小写标准化。有效值为 UPPERCASE_ONLYLOWERCASE_ONLY。如果省略,则默认为UPPERCASE_ONLY
spill_bucket 查询泄漏的 S3 存储桶名称。从中查询 Snowflake 时为必填项。
spill_prefix S3 泄漏前缀,格式为<domain_id>/<project_id>/dev/sys/athena
authenticationType BASIC用于 username/password 或密钥对身份验证。
secretArn 在步骤 2 中创建的密钥的 ARN。
snowflakeRole 步骤 1 中的 Snowflake 角色名称。
identityMapping.usernameAttribute 设置为 EMAIL

验证连接

aws datazone get-connection使用您的域名 ID 和返回的连接标识符进行呼叫create-connection。首次运行元数据同步后,已编目的 Snowflake 表将出现在该项目的亚马逊 DataZone 目录中。