

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

# Amazon Redshift integration for Apache Spark による認証
<a name="emr-spark-redshift-auth"></a>

## AWS Secrets Manager を使用して認証情報を取得し、Amazon Redshift に接続する
<a name="emr-spark-redshift-secrets"></a>

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 の認証
<a name="emr-spark-redshift-jdbc"></a>

**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 ベースの認証の使用
<a name="emr-spark-redshift-iam"></a>

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](https://docs.aws.amazon.com/redshift/latest/mgmt/generating-iam-credentials-configure-jdbc-odbc.html)」を参照してください。この 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 への接続
<a name="emr-spark-redshift-vpc"></a>

VPC でプロビジョニングされた Amazon Redshift クラスターまたは Amazon Redshift Serverless ワークグループを設定する場合は、リソースにアクセスするように Amazon EMR Serverless アプリケーションの VPC 接続を設定します。EMR Serverless アプリケーションで VPC 接続を設定する方法の詳細については、「[データに接続するための EMR Serverless アプリケーションの VPC アクセスの設定](vpc-access.md)」を参照してください。
+ プロビジョニングされた Amazon Redshift クラスターまたは Amazon Redshift Serverless ワークグループにパブリックにアクセスできる場合は、EMR Serverless アプリケーションの作成時に NAT ゲートウェイがアタッチされている 1 つ以上のプライベートサブネットを指定します。
+ プロビジョニングされた Amazon Redshift クラスターまたは Amazon Redshift Serverless ワークグループにパブリックにアクセスできない場合は、「[データに接続するための EMR Serverless アプリケーションの VPC アクセスの設定](vpc-access.md)」の説明に従って、Amazon Redshift クラスターの Amazon Redshift マネージド VPC エンドポイントを作成する必要があります。また、「*Amazon Redshift 管理ガイド*」の「[Amazon Redshift Serverless への接続](https://docs.aws.amazon.com/redshift/latest/mgmt/serverless-connecting.html)」の説明に従って、Amazon Redshift Serverless ワークグループを作成することもできます。EMR Serverless アプリケーションの作成時に指定したプライベートサブネットにクラスターまたはサブグループを関連付ける必要があります。

**注記**  
IAM ベースの認証を使用し、EMR Serverless アプリケーションのプライベートサブネットに NAT ゲートウェイがアタッチされていない場合は、Amazon Redshift または Amazon Redshift Serverless のサブネットに VPC エンドポイントを作成する必要もあります。これにより、JDBC ドライバーは認証情報を取得できます。