翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
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 管理ガイド」の「Configure a JDBC or ODBC connection to use IAM credentials」を参照してください。この 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 サーバーレスアプリケーションがデータに接続するためのVPCアクセスの設定」を参照してください。
-
プロビジョニングされた Amazon Redshift クラスターまたは Amazon Redshift Serverless ワークグループにパブリックにアクセスできる場合は、EMR Serverless アプリケーションの作成時に NAT ゲートウェイがアタッチされている 1 つ以上のプライベートサブネットを指定できます。
-
プロビジョニングされた Amazon Redshift クラスターまたは Amazon Redshift Serverless ワークグループにパブリックにアクセスできない場合は、「EMR サーバーレスアプリケーションがデータに接続するための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 ドライバーは認証情報を取得できます。