Amazon Redshift integration for Apache Spark による認証 - Amazon EMR

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

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 ドライバーは認証情報を取得できます。