翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Amazon Redshift integration for Apache Spark による認証
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 内にユーザー名とパスワードを設定する
Amazon Redshift クラスターに対して Spark ジョブを認証するには、JDBC URL に Amazon Redshift データベース名とパスワードを指定します。
注記
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://スキームを指定します。このコマンドは、EMR Serverless ジョブ実行ロールを使用して認証情報を自動的に取得するように JDBC ドライバーに指示しています。詳細については、「Amazon Redshift 管理ガイド」の「IAM 認証情報を使用するように JDBC または ODBC 接続を設定する」を参照してください。この 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 ワークグループを設定するときは、リソースにアクセスするように Amazon EMR Serverless アプリケーションの VPC 接続を設定します。EMR Serverless アプリケーションで VPC 接続を設定する方法の詳細については、「」を参照してくださいデータに接続するための EMR Serverless アプリケーションの VPC アクセスの設定。
-
プロビジョニングされた Amazon Redshift クラスターまたは Amazon Redshift Serverless ワークグループがパブリックにアクセスできる場合は、EMR Serverless アプリケーションの作成時に NAT ゲートウェイがアタッチされた 1 つ以上のプライベートサブネットを指定します。
-
プロビジョニングされた Amazon Redshift クラスターまたは Amazon Redshift Serverless ワークグループにパブリックにアクセスできない場合は、「データに接続するための EMR Serverless アプリケーションの VPC アクセスの設定」の説明に従って、Amazon Redshift クラスターの Amazon Redshift マネージド VPC エンドポイントを作成する必要があります。また、「Amazon Redshift 管理ガイド」の「Amazon Redshift Serverless への接続」の説明に従って、Amazon Redshift Serverless ワークグループを作成することもできます。EMR Serverless アプリケーションの作成時に指定したプライベートサブネットにクラスターまたはサブグループを関連付ける必要があります。
注記
IAM ベースの認証を使用し、EMR Serverless アプリケーションのプライベートサブネットに NAT ゲートウェイがアタッチされていない場合は、Amazon Redshift または Amazon Redshift Serverless のサブネットに VPC エンドポイントを作成する必要もあります。これにより、JDBC ドライバーは認証情報を取得できます。