

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

# 使用 Snowflake 搭配 Amazon Quick
<a name="connecting-to-snowflake"></a>

Snowflake 是一个 AI 数据云平台，提供从数据仓库和协作到数据科学和生成式人工智能的数据解决方案。Snowflake 是一家拥有多项 AWS 认证的[AWS 合作伙伴](https://partners.amazonaws.com/partners/001E000000d8qQcIAI/Snowflake)，其中包括生成式 AI、Machine Learning、数据和分析以及零售领域的 AWS ISV 能力。

Amazon Quick Sight 提供了两种连接 Snowflake 的方式：使用你的 Snowflake 登录凭证或使用 OAuth 客户端凭证。使用以下部分来了解这两种连接方法。

**Topics**
+ [使用登录凭据创建与 Snowflake 的 Quick Sight 数据源连接](#create-connection-to-snowflake)
+ [使用客户端凭OAuth据创建与 Snowflake 的 Quick Sight 数据源连接](#create-connection-to-snowflake-oauth-credentials)

## 使用登录凭据创建与 Snowflake 的 Quick Sight 数据源连接
<a name="create-connection-to-snowflake"></a>

 使用本节学习如何使用你的 Snowflake 登录凭据在 Quick Sight 和 Snowflake 之间建立连接。Quick Sight 和 Snowflake 之间的所有流量均通过 SSL 启用。

**在 Quick Sight 和 Snowflake 之间创建连接**

1. 打开 [Quick 控制台](https://quicksight.aws.amazon.com/)。

1. 在左侧导航窗格中，选择**数据**，然后选择**创建**，然后选择**新建数据集**。

1. 选择 **Snowflake** 数据来源卡片。

1. 在出现的弹出窗口中，输入以下信息：

   1. 对于**数据来源名称**，为您的 Snowflake 数据来源连接输入描述性名称。您可以通过与 Snowflake 的连接创建许多数据集，因此最好使用简洁的名称。

   1. 对于**连接类型**，选择正在使用的网络类型。如果您的数据是公开共享的，请选择**公共网络**。如果数据位于 VPC 内，请选择 **VPC**。要在 Quick Sight 中配置 VPC 连接，请参阅[在 Amazon Quick 中管理 VPC 连接](vpc-creating-a-connection-in-quicksight.md)。

   1. 对于**数据库服务器**，输入在 Snowflake 连接详细信息中指定的主机名。

1. 在**数据库名称和仓库**中，输入要连接的相应 Snowflake 数据库和仓库。

1. 对于**用户名**和**密码**，输入您的 Snowflake 凭证。

在 Quick Sight 账户和 Snowflake 账户之间成功创建数据源连接后，就可以开始[创建数据集](creating-data-sets.md)创建包含 Snowflake 数据的数据源连接了。

## 使用客户端凭OAuth据创建与 Snowflake 的 Quick Sight 数据源连接
<a name="create-connection-to-snowflake-oauth-credentials"></a>

[你可以使用OAuth客户凭据通过 Quick Sight API 将你的 Quick Sight 账户与 Snowflake 关联起来。](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_CreateDataSource.html) *OAuth*是一种标准授权协议，通常用于具有高级安全要求的应用程序。当你使用 OAuth 客户端凭据连接到 Snowflake 时，你可以使用 Quick Sight API 和 Quick Sight 用户界面创建包含 Snowflake 数据的数据集。有关在 Snowflake 中配置 OAuth 的更多信息，请参阅 [Snowflake OAuth overview](https://docs.snowflake.com/en/user-guide/oauth-snowflake-overview)。

Quick Sight 支持`client credentials`OAuth授权类型。 OAuth客户端凭据用于获取用于机器间通信的访问令牌。此方法适用于客户端需要访问服务器上托管的资源而无需用户参与的情况。

在 OAuth 2.0 的客户端凭证流中，有几种客户端身份验证机制可用于向授权服务器对客户端应用程序进行身份验证。Quick Sight 支持基于 OAuth Snowflake 的客户端凭证，用于以下两种机制：
+ **令牌（基于客户端密钥的 OAuth）**：基于密钥的客户端身份验证机制与客户端凭证一起使用来授予流，以便向授权服务器进行身份验证。此身份验证方案要求将 OAuth 客户端应用的 `client_id` 和 `client_secret` 存储在 Secrets Manager 中。
+ **X509（客户端私钥 JWT-basedOAuth）**：基于 X509 证书密钥的解决方案为该OAuth机制提供了额外的安全层，其客户端证书用于身份验证而不是客户端密钥。此方法主要由私有客户端使用，他们使用此方法向授权服务器进行身份验证，并且两个服务之间具有很强的信任度。

Quick Sight 已验证与以下身份提供商的OAuth连接：
+ OKTA
+ PingFederate

### 在 Secrets Manager 中存储 OAuth 凭证
<a name="create-connection-to-snowflake-oauth-store-credentials"></a>

OAuth 客户端凭证适用于机器对机器使用案例，并非设计为交互式的。要在 Quick Sight 和 Snowflake 之间创建数据源连接，请在 Secrets Manager 中创建一个包含你的客户端应用程序凭据的新密钥。OAuth使用新密钥创建的秘密 ARN 可用于在 Quick Sight 中创建包含 Snowflake 数据的数据集。有关在 Quick Sight 中使用 Secrets Manager 密钥的更多信息，请参阅[在 Quick 中使用 AWS Secrets Manager 密钥而不是数据库凭证](secrets-manager-integration.md)。

您需要在 Secrets Manager 中存储的凭证由您使用的 OAuth 机制决定。 X509-based OAuth密钥需要以下 key/value 配对：
+ `username`：连接到 Snowflake 时要使用的 Snowflake 账户用户名
+ `client_id`：OAuth 客户端 ID
+ `client_private_key`：OAuth 客户端私有密钥
+ `client_public_key`：OAuth 客户端证书公钥及其加密算法（例如 `{"alg": "RS256", "kid", "cert_kid"}`）

基于令牌OAuth的密钥需要以下 key/value 配对：
+ `username`：连接到 Snowflake 时要使用的 Snowflake 账户用户名
+ `client_id`：OAuth 客户端 ID
+ `client_secret`：OAuth 客户端密钥

### 使用 Quick Sight API 创建 Snowflake OAuth 连接
<a name="create-connection-to-snowflake-oauth-example"></a>

在 Secrets Manager 中创建包含你的 Snowflake OAuth 凭据的密钥并将你的 Quick 账户关联到 Secrets Manager 后，你可以使用 Quick Sight API 和 SDK 在 Quick Sight 和 Snowflake 之间建立数据源连接。以下示例使用令牌OAuth客户端凭据创建 Snowflake 数据源连接。

```
{
    "AwsAccountId": "{{AWSACCOUNTID}}",
    "DataSourceId": "{{UNIQUEDATASOURCEID}}",
    "Name": "{{NAME}}",
    "Type": "SNOWFLAKE",
    "DataSourceParameters": {
        "SnowflakeParameters": {
            "Host": "{{HOSTNAME}}",
            "Database": "{{DATABASENAME}}",
            "Warehouse": "{{WAREHOUSENAME}}",
            "AuthenticationType": "TOKEN",
            "DatabaseAccessControlRole": "{{snowflake-db-access-role-name}}",
            "OAuthParameters": {
              "TokenProviderUrl": "{{oauth-access-token-endpoint}}", 
              "OAuthScope": "{{oauth-scope}}",
              "IdentityProviderResourceUri" : "{{resource-uri}}",
              "IdentityProviderVpcConnectionProperties" : {
                "VpcConnectionArn": "{{IdP-VPC-connection-ARN}}" 
             }
        }
    },
    "VpcConnectionProperties": {
        "VpcConnectionArn": "{{VPC-connection-ARN-for-Snowflake}}"
    }
    "Credentials": {
        "SecretArn": "{{oauth-client-secret-ARN}}"
    }
}
```

有关 CreateDatasource API 操作的更多信息，请参阅[CreateDataSource](https://docs.aws.amazon.com/quicksight/latest/APIReference/API_CreateDataSource.html)。

在 Quick Sight 和 Snowflake 之间建立连接并使用 Quick Sight API 或 SDK 创建数据源后，新的数据源将显示在 Quick Sight 中。Quick Sight 作者可以使用此数据源来创建包含 Snowflake 数据的数据集。表的显示基于在 `CreateDataSource` API 调用中传递的 `DatabaseAccessControlRole` 参数中使用的角色。如果在创建数据来源连接时未定义此参数，则使用默认 Snowflake 角色。

在 Quick Sight 账户和 Snowflake 账户之间成功创建数据源连接后，就可以开始[创建数据集](creating-data-sets.md)创建包含 Snowflake 数据的数据源连接了。