使用 OAuth 客户端凭证创建与 Snowflake 的 Amazon QuickSight 数据来源连接
您可以使用 OAuth 客户端凭证通过 QuickSight API 将您的 QuickSight 账户与 Snowflake 连接。OAuth 是一种标准授权协议,通常用于具有高级安全要求的应用程序。当您使用 OAuth 客户端凭证连接到 Snowflake 时,可以使用 QuickSight API 和 QuickSight UI 创建包含 Snowflake 数据的数据集。有关在 Snowflake 中配置 OAuth 的更多信息,请参阅 Snowflake OAuth overview
QuickSight 支持 client credentials OAuth 授权类型。OAuth 客户端凭证用于获取机器对机器通信的访问令牌。此方法适用于客户端需要访问服务器上托管的资源而无需用户参与的情况。
在 OAuth 2.0 的客户端凭证流中,有几种客户端身份验证机制可用于向授权服务器对客户端应用程序进行身份验证。QuickSight 支持 Snowflake 基于客户端凭证的 OAuth,使用以下两种机制:
- 
                    令牌(基于客户端密钥的 OAuth):基于密钥的客户端身份验证机制与客户端凭证一起使用来授予流,以便向授权服务器进行身份验证。此身份验证方案要求将 OAuth 客户端应用的 client_id和client_secret存储在 Secrets Manager 中。
- 
                    X509(基于客户端私有密钥 JWT 的 OAuth):基于 X509 证书密钥的解决方案为 OAuth 机制提供了额外的安全层,使用客户端证书(而非客户端密钥)进行身份验证。此方法主要由私有客户端使用,他们使用此方法向授权服务器进行身份验证,并且两个服务之间具有很强的信任度。 
QuickSight 已验证与以下身份提供者的 OAuth 连接:
- 
                    OKTA 
- 
                    PingFederate 
在 Secrets Manager 中存储 OAuth 凭证
OAuth 客户端凭证适用于机器对机器使用案例,并非设计为交互式的。要在 QuickSight 和 Snowflake 之间创建数据来源连接,请在 Secrets Manager 中创建一个包含 OAuth 客户端应用凭证的新密钥。使用新密钥创建的密钥 ARN 可用于在 QuickSight 中创建包含 Snowflake 数据的数据集。有关在 QuickSight 中使用 Secrets Manager 密钥的更多信息,请参阅在 Amazon QuickSight 中使用 Amazon Secrets Manager 密钥代替数据库凭证。
您需要在 Secrets Manager 中存储的凭证由您使用的 OAuth 机制决定。基于 X509 的 OAuth 密钥需要以下键/值对:
- 
                        username:连接到 Snowflake 时要使用的 Snowflake 账户用户名
- 
                        client_id:OAuth 客户端 ID
- 
                        client_private_key:OAuth 客户端私有密钥
- 
                        client_public_key:OAuth 客户端证书公钥及其加密算法(例如{"alg": "RS256", "kid", "cert_kid"})
基于令牌的 OAuth 密钥需要以下键/值对:
- 
                        username:连接到 Snowflake 时要使用的 Snowflake 账户用户名
- 
                        client_id:OAuth 客户端 ID
- 
                        client_secret:OAuth 客户端密钥
使用 QuickSight API 创建 Snowflake OAuth 连接
在 Secrets Manager 中创建包含 Snowflake OAuth 凭证的密钥,并将 QuickSight 账户连接到 Secrets Manager 后,您可以使用 QuickSight API 和 SDK 在 QuickSight 和 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。
一旦建立了 QuickSight 和 Snowflake 之间的连接并使用 QuickSight API 或 SDK 创建了数据来源,新的数据来源就会显示在 QuickSight 中。QuickSight 作者可以使用此数据来源创建包含 Snowflake 数据的数据集。表的显示基于在 CreateDataSource API 调用中传递的 DatabaseAccessControlRole 参数中使用的角色。如果在创建数据来源连接时未定义此参数,则使用默认 Snowflake 角色。
成功创建 QuickSight 和 Snowflake 账户之间的数据来源连接后,您可以开始创建包含 Snowflake 数据的 QuickSight 数据集。