使用 Apache Spark 的 Amazon Redshift 整合進行身分驗證 - Amazon EMR

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用 Apache Spark 的 Amazon Redshift 整合進行身分驗證

當您與 Apache Spark 整合時,以下各節會顯示 Amazon Redshift 的身分驗證選項。各節說明如何擷取登入憑證,以及有關使用JDBC驅動程式進行IAM身分驗證的詳細資訊。

使用 AWS Secrets Manager 擷取憑證並連線至 Amazon 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

在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