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

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

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

以下各节显示了与 Apache Spark 集成时使用 Amazon Redshift 的身份验证选项。这些部分显示了如何检索登录凭证,以及有关使用带IAM身份验证的JDBC驱动程序的详细信息。

用于 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

EMR在 Amazon 中使用IAM基于EKS任务执行角色的身份验证

从亚马逊 EMR 6.9.0 EKS 版本开始,将2.1或更高版本的Amazon JDBC Redshift驱动程序打包到环境中。在JDBC驱动程序 2.1 及更高版本中,JDBCURL您可以指定而不包含原始用户名和密码。相反,您可以指定 jdbc:redshift:iam:// 方案。这会命令JDBC驱动程序使用您的 Amaz EMR on EKS 任务执行角色自动获取证书。

有关更多信息,请参阅 Amazon Redshift 管理指南中的配置JDBC或ODBC连接以使用IAM证书

以下示例URL使用jdbc:redshift:iam://方案。

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驱动程序需要从 Amazon Redshift Serverless 获取凭证
redshift-serverless:GetWorkgroup 如果您使用的是 Amazon Redshift Serverless,并且根据工作组名称和区域来指定,URL则为必填项

您的任务执行角色策略应具备以下权限。

{ "Effect": "Allow", "Action": [ "redshift:GetClusterCredentials", "redshift:DescribeCluster", "redshift-serverless:GetCredentials", "redshift-serverless:GetWorkgroup" ], "Resource": [ "arn:aws:redshift:AWS_REGION:ACCOUNT_ID:dbname:CLUSTER_NAME/DATABASE_NAME", "arn:aws:redshift:AWS_REGION:ACCOUNT_ID:dbuser:DATABASE_NAME/USER_NAME" ] }

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

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

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

注意

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

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

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