本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 Apache Spark 的 Amazon Redshift 整合進行身分驗證
使用 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
使用驅動程式向 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存取以連線至資料。
-
如果您佈建的 Amazon Redshift 叢集或 Amazon Redshift 無伺服器工作群組可公開存取,您可以指定在建立無伺服器應用程式時已連接NAT閘道的一或多個私有子網路。EMR
-
如果您佈建的 Amazon Redshift 叢集或 Amazon Redshift 無伺服器工作群組無法公開存取,您必須依照中所述,為您的 Amazon Redshift 叢集建立 Amazon Redshift 受管VPC端點。設定無EMR伺服器應用程式的VPC存取以連線至資料或者,您也可以按照亞馬遜 Redshift 管理指南中的連接到 Amazon Redshift 無伺服器中的說明來建立自己的 Amazon Redshift 無伺服器工作群組。您必須將叢集或子群組與建立EMR無伺服器應用程式時指定的私人子網路建立關聯。
注意
如果您使用IAM基於身份驗證,且EMR無伺服器應用程式的私有子網路沒有連接NAT閘道,則還必須在這些子網路上建立適用於 Amazon Redshift 或 Amazon Redshift 無伺服器的VPC端點。這樣,JDBC驅動程序可以獲取憑據。