本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用适用于 Apache Spark 的 Amazon Redshift 集成进行身份验证
使用 Amazon Secrets Manager 检索凭证并连接到 Amazon 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
将基于 IAM 的身份验证与 Amazon EMR on EKS 任务执行角色结合使用
从 Amazon EMR on EKS 发行版 6.9.0 开始,Amazon Redshift JDBC 驱动程序版本 2.1 或更高版本将被打包到环境中。您可以使用 JDBC 驱动程序 2.1 及更高版本指定 JDBC URL,而不包括原始用户名和密码。相反,您可以指定 jdbc:redshift:iam://
方案。从而命令 JDBC 驱动程序使用 Amazon 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 驱动程序从 Amazon Redshift 获取凭证所需的权限 |
redshift:DescribeCluster
|
在 JDBC URL 中指定 Amazon Redshift 集群和 Amazon Web Services 区域 而非端点所需的权限 |
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
" ] }
使用 JDBC 驱动程序对 Amazon Redshift 进行身份验证
在 JDBC URL 中设置用户名和密码
要向 Amazon Redshift 集群验证 Spark 任务,您可以在 JDBC URL 中指定 Amazon Redshift 数据库的名称和密码。
注意
如果您在 URL 中传递数据库凭证,则有权访问该 URL 的任何人也可以访问凭证。通常不建议使用此方法,因为这不是一个安全的选项。
如果您的应用程序不考虑安全性,则可以使用以下格式在 JDBC URL 中设置用户名和密码:
jdbc:redshift://redshifthost:5439/database?user=
username
&password=password