使用适用于 Apache Spark 的 Amazon Redshift 集成进行身份验证 - Amazon EMR

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

使用适用于 Apache Spark 的 Amazon Redshift 集成进行身份验证

使用 AWS Secrets Manager 检索凭证并连接到亚马逊 Redshift

你可以通过将凭证存储在 Secrets Manager 中来安全地向 Amazon Redshift 进行身份验证,然后让 Spark 作业调用获取证书:GetSecretValueAPI

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

使用驱动程序向 Amazon Redshift 进行身份验证 JDBC

在里面设置用户名和密码 JDBC URL

您可以通过在中指定 Amazon Redshift 数据库名称和密码来向 Amazon Redshift 集群对 Spark 任务进行身份验证。JDBC URL

注意

如果您在中传递了数据库证书URL,则有权访问的任何人URL也可以访问这些证书。通常不建议使用此方法,因为这不是一个安全的选项。

如果您的应用程序不考虑安全性,则可以使用以下格式在中设置用户名和密码 JDBCURL:

jdbc:redshift://redshifthost:5439/database?user=username&password=password

对 Amazon EMR 无服务器任务执行角色使用IAM基于身份的身份验证

从亚马逊 EMR Serverless 版本 6.9.0 开始,亚马逊 Redshift JDBC 驱动程序 2.1 或更高版本已打包到环境中。在JDBC驱动程序 2.1 及更高版本中,JDBCURL您可以指定而不包含原始用户名和密码。

相反,您可以指定 jdbc:redshift:iam:// 方案。这会命令JDBC驱动程序使用您的EMR无服务器任务执行角色自动获取凭证。有关更多信息,请参阅 Amazon Redshift 管理指南中的配置JDBC或ODBC连接以使用IAM证书。这方面的一个例子URL是:

jdbc:redshift:iam://examplecluster.abc123xyz789.us-west-2.redshift.amazonaws.com:5439/dev

满足所提供的条件时,您的任务执行角色需要以下权限:

权限 任务执行角色所需的条件
redshift:GetClusterCredentials JDBC司机需要从亚马逊 Redshift 获取凭证
redshift:DescribeCluster 如果您指定了 Amazon Redshift 集群并且,则为必填项 AWS 区域 在JDBCURL而不是端点中
redshift-serverless:GetCredentials JDBC驱动程序需要从亚马逊 Redshift Serverless 获取凭证
redshift-serverless:GetWorkgroup 如果您使用的是 Amazon Redshift Serverless,并且要指定工作组名称和URL区域,则为必填项

在另一个地方连接到亚马逊 Redshift VPC

在下VPC设置预配置的 Amazon Redshift 集群或 Amazon Redshift 无服务器工作组时,必须为VPC访问资源的EMR亚马逊无服务器应用程序配置连接。有关如何在EMR无服务器应用程序上配置VPC连接的更多信息,请参阅配置VPC访问权限

  • 如果您预配置的 Amazon Redshift 集群或 Amazon Redshift 无服务器工作组可以公开访问,则可以在创建无服务器应用程序时指定一个或多个已连接网关的私有NAT子网。EMR

  • 如果您预配置的 Amazon Redshift 集群或 Amazon Redshift 无服务器工作组无法公开访问,则必须按照中所述为亚马逊 Redshift 集群创建亚马逊 Redshift 托管VPC终端节点。配置VPC访问权限或者,您可以按照《亚马逊 Redshift 管理指南》中连接亚马逊 Redshift Serverless 中所述创建您的亚马逊 Redshift 无服务器工作组。您必须将您的集群或子组与您在创建 S EMR erverless 应用程序时指定的私有子网相关联。

注意

如果您使用IAM基于基础的身份验证,并且您的EMR无服务器应用程序的私有子网未连接网NAT关,则还必须在这些子网上为 Amazon Redshift 或 Amazon Redshift Serverless 创建VPC终端节点。这样,JDBC驱动程序就可以获取凭证。