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

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

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

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

使用驅動程式向 Amazon Redshift 進行驗證 JDBC

設置用戶名和密碼 JDBC URL

您可以在中指定 Amazon Redshift 資料庫名稱和密碼,以向 Amazon Redshift 叢集驗證星火任務。JDBC URL

注意

如果您在中傳遞資料庫認證URL,則擁有存取權的任何人也URL可以存取認證。通常不建議使用此方法,因為它不安全。

如果您的應用程式無法考慮安全性,您可以使用下列格式在中設定使用者名稱和密碼 JDBCURL:

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

搭配 Amazon EMR 無伺服器任務執行角色使用IAM基於身份驗證

從 Amazon EMR 無伺服器版本 6.9.0 開始,Amazon Redshift JDBC 驅動程式 2.1 或更高版本已封裝到環境中。使用 2.1 及更高版本的JDBC驅動程式,您可以指定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驅動程序需要從 Amazon Redshift 獲取憑據
redshift:DescribeCluster 如果您指定了 Amazon Redshift 叢集和 AWS 區域 在JDBCURL而不是端點
redshift-serverless:GetCredentials JDBC驅動程式需要從 Amazon Redshift 無伺服器擷取登入資料
redshift-serverless:GetWorkgroup 如果您使用的是 Amazon Redshift 無伺服器,且您要根據工作群組名稱和URL區域指定

在不同的地方連接到 Amazon Redshift VPC

當您在下方設定佈建的 Amazon Redshift 叢集或 Amazon Redshift 無伺服器工作群組時VPC,必須為 Amazon EMR 無伺服器應用程式設定VPC連線,才能存取資源。如需如何在EMR無伺服器應用程式上設定VPC連線的詳細資訊,請參閱設定無EMR伺服器應用程式的VPC存取以連線至資料

注意

如果您使用IAM基於身份驗證,且EMR無伺服器應用程式的私有子網路沒有連接NAT閘道,則還必須在這些子網路上建立適用於 Amazon Redshift 或 Amazon Redshift 無伺服器的VPC端點。這樣,JDBC驅動程序可以獲取憑據。