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

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

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

使用 AWS Secrets Manager 擷取登入資料並連線至 Amazon Redshift

您可以將登入資料存放在 Secrets Manager 中,讓 Spark 任務呼叫 GetSecretValue API 來擷取登入資料,藉此安全地向 Amazon Redshift 進行身分驗證:

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

使用 JDBC 驅動器對 Amazon Redshift 進行身分驗證

在 JDBC URL 中設定使用者名稱和密碼

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

注意

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

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

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

搭配 Amazon EMR Serverless 任務執行角色使用 IAM 型身分驗證

從 Amazon EMR Serverless 6.9.0 版開始,Amazon Redshift JDBC 驅動程式 2.1 或更新版本會封裝到環境中。使用 JDBC 驅動器 2.1 及更高版本,可以指定 JDBC URL,而不包含原始使用者名稱和密碼。

相反地,可以指定 jdbc:redshift:iam:// 配置。這命令 JDBC 驅動程式使用您的 EMR Serverless 任務執行角色自動擷取登入資料。如需詳細資訊,請參閱《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 如果在 JDBC URL 中而非端點中指定 Amazon Redshift 叢集和 AWS 區域 時所需的條件
redshift-serverless:GetCredentials JDBC 驅動器從 Amazon Redshift Serverless 獲取憑證時所需的條件
redshift-serverless:GetWorkgroup 如果您使用的是 Amazon Redshift Serverless,而且要根據工作群組名稱和區域指定 URL,則為必要

在不同的 VPC 中連線至 Amazon Redshift

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

  • 如果您佈建的 Amazon Redshift 叢集或 Amazon Redshift Serverless 工作群組可公開存取,您可以在建立 EMR Serverless 應用程式時指定一或多個已連接 NAT 閘道的私有子網路。

  • 如果您佈建的 Amazon Redshift 叢集或 Amazon Redshift Serverless 工作群組無法公開存取,您必須為 Amazon Redshift 叢集建立 Amazon Redshift 受管 VPC 端點,如 中所述設定 EMR Serverless 應用程式的 VPC 存取以連線至資料。或者,您可以建立 Amazon Redshift Serverless 工作群組,如 Amazon Redshift 管理指南中的連線至 Amazon Redshift Serverless 所述。 您必須將叢集或子群組與您建立 EMR Serverless 應用程式時指定的私有子網路建立關聯。

注意

如果您使用 IAM 型身分驗證,且 EMR Serverless 應用程式的私有子網路未連接 NAT 閘道,則您還必須在這些子網路上為 Amazon Redshift 或 Amazon Redshift Serverless 建立 VPC 端點。如此一來,JDBC 驅動程式就可以擷取登入資料。