本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用适用于 Apache Spark 的 Amazon Redshift 集成进行身份验证
用于 AWS Secrets Manager 检索凭证并连接亚马逊 Redshift
您可以将凭证存储在 Secrets Manager 中,向 Amazon Redshift 安全地进行身份验证,并让 Spark 作业调用 GetSecretValue API 来获取凭证:
from pyspark.sql import SQLContextimport boto3 sc = # existing SparkContext sql_context = SQLContext(sc) secretsmanager_client = boto3.client('secretsmanager', region_name=os.getenv('AWS_REGION')) secret_manager_response = secretsmanager_client.get_secret_value( SecretId='string', VersionId='string', VersionStage='string' ) username = # get username from secret_manager_response password = # get password from secret_manager_response url = "jdbc:redshift://redshifthost:5439/database?user=" +username+ "&password=" +password# Access to Redshift cluster using Spark
使用 JDBC 驱动程序对 Amazon Redshift 进行身份验证
在 JDBC URL 中设置用户名和密码
您可以在 JDBC URL 中指定 Amazon Redshift 数据库名称和密码,向 Amazon Redshift 集群的 Spark 作业进行身份验证。
注意
如果您在 URL 中传递数据库凭证,则有权访问该 URL 的任何人也可以访问凭证。通常不建议使用此方法,因为这不是一个安全的选项。
如果您的应用程序不考虑安全性,请使用以下格式在 JDBC URL 中设置用户名和密码:
jdbc:redshift://redshifthost:5439/database?user=username&password=password
将基于 IAM 的身份验证与 Amazon EMR Serverless 作业执行角色结合使用
从 Amazon EMR Serverless 发行版 6.9.0 开始,Amazon Redshift JDBC 驱动程序 2.1 或更高版本将打包到环境中。您可以使用 JDBC 驱动程序 2.1 及更高版本指定 JDBC URL,而不包括原始用户名和密码。
相反,请指定jdbc:redshift:iam://方案。这将命令 JDBC 驱动程序使用您的 EMR Serverless 作业执行角色来自动获取凭证。有关更多信息,请参阅 A mazon Redshift 管理指南中的配置 JDBC 或 ODBC 连接以使用 IAM 证书。该 URL 的示例如下:
jdbc:redshift:iam://examplecluster.abc123xyz789.us-west-2.redshift.amazonaws.com:5439/dev
当满足提供的条件时,您的作业执行角色需要以下权限:
| 权限 | 任务执行角色所需的条件 |
|---|---|
redshift:GetClusterCredentials
|
JDBC 驱动程序从 Amazon Redshift 获取凭证所需的权限 |
redshift:DescribeCluster
|
在 JDBC URL 中指定 Amazon Redshift 集群和 AWS 区域 而非端点所需的权限 |
redshift-serverless:GetCredentials
|
JDBC 驱动程序从 Amazon Redshift Serverless 获取凭证所需的权限 |
redshift-serverless:GetWorkgroup
|
使用 Amazon Redshift Serverless 并根据工作组名称和区域指定 URL 所需的权限 |
连接到不同 VPC 中的 Amazon Redshift
在 VPC 下设置预配置的 Amazon Redshift 集群或 Amazon Redshift 无服务器工作组时,请为您的亚马逊 EMR 无服务器应用程序配置 VPC 连接以访问资源。有关如何在 EMR 无服务器应用程序上配置 VPC 连接的更多信息,请参阅。为 EMR Serverless 应用程序配置 VPC 访问权限以连接数据
-
如果您预配置的 Amazon Redshift 集群或 Amazon Redshift 无服务器工作组可以公开访问,请在创建 EMR 无服务器应用程序时指定一个或多个连接了 NAT 网关的私有子网。
-
如果您预置的 Amazon Redshift 集群或 Amazon Redshift Serverless 工作组不可公开访问,则必须为 Amazon Redshift 集群创建 Amazon Redshift 托管 VPC 端点,如 为 EMR Serverless 应用程序配置 VPC 访问权限以连接数据 中所述。或者,您也可以按照《Amazon Redshift 管理指南》中连接到 Amazon Redshift Serverless 的说明创建 Amazon Redshift Serverless 工作组。必须将集群或子组关联到您在创建 EMR Serverless 应用程序时指定的私有子网。
注意
如果您使用基于 IAM 的身份验证,并且 EMR Serverless 应用程序的私有子网未附加 NAT 网关,则还必须在这些子网上为 Amazon Redshift 或 Amazon Redshift Serverless 创建 VPC 端点。这样,JDBC 驱动程序就可以获取凭证。