本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 Apache Spark 的 Amazon Redshift 整合進行身分驗證
當您與 Apache Spark 整合時,以下各節會顯示 Amazon Redshift 的身分驗證選項。各節說明如何擷取登入憑證,以及有關使用JDBC驅動程式進行IAM身分驗證的詳細資訊。
使用 AWS 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
在EKS任務執行角色EMR上使用 Amazon IAM型身分驗證
從 Amazon EMR 6.9.0 EKS版開始,Amazon Redshift JDBC驅動程式 2.1 版或更新版本會封裝到環境中。使用JDBC驅動程式 2.1 和更新版本,您可以指定 JDBCURL,但不包含原始使用者名稱和密碼。相反地,可以指定 jdbc:redshift:iam://
配置。這命令JDBC驅動程式使用您的 Amazon EMR on EKS Job 執行角色自動擷取憑證。
如需詳細資訊,請參閱 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
|
如果您在 中指定 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
" ] }
使用JDBC驅動程式驗證至 Amazon Redshift
在 內設定使用者名稱和密碼 JDBC URL
若要向 Amazon Redshift 叢集驗證 Spark 任務,您可以在 中指定 JDBC Amazon Redshift 資料庫名稱和密碼URL。
注意
如果您在 中傳遞資料庫憑證URL,則有權存取 的任何人URL都可以存取憑證。通常不建議使用此方法,因為它不安全。
如果安全不是應用程式的問題,您可以使用下列格式在 JDBC 中設定使用者名稱和密碼URL:
jdbc:redshift://redshifthost:5439/database?user=
username
&password=password