

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

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

以下の各セクションでは、Apache Spark と統合する場合の Amazon Redshift での認証オプションを示します。これらのセクションでは、ログイン認証情報を取得する方法と、IAM 認証での JDBC ドライバーの使用に関する詳細を示します。

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

Secrets Manager に認証情報を保存すると、Amazon Redshift に対して安全に認証できます。Spark ジョブを使用すると、`GetSecretValue` API を呼び出して認証情報を取得できます。

```
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
```

## Amazon EMR on EKS ジョブ実行ロールでの IAM ベースの認証の使用
<a name="emr-spark-redshift-iam"></a>

Amazon EMR on EKS リリース 6.9.0 以降、Amazon Redshift JDBC ドライバーバージョン 2.1 以降が環境にパッケージ化されます。JDBC ドライバー 2.1 以降では、JDBC URL を指定できます。未加工のユーザー名とパスワードを含めることはできません。代わりに、`jdbc:redshift:iam://` スキームを指定できます。このコマンドは、Amazon EMR on EKS ジョブ実行ロールを使用して認証情報を自動的に取得するように 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://` スキームを使用しています。

```
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 にワークグループ名とリージョンを含めて指定する場合に必要 | 

ジョブ実行ロールポリシーには、次の権限が必要です。

```
{
            "Effect": "Allow",
            "Action": [
                "redshift:GetClusterCredentials",
                "redshift:DescribeCluster",
                "redshift-serverless:GetCredentials",
                "redshift-serverless:GetWorkgroup"
            ],
            "Resource": [
                "arn:aws:redshift:{{AWS_REGION}}:{{ACCOUNT_ID}}:dbname:{{CLUSTER_NAME}}/{{DATABASE_NAME}}",
                "arn:aws:redshift:{{AWS_REGION}}:{{ACCOUNT_ID}}:dbuser:{{DATABASE_NAME}}/{{USER_NAME}}"
            ]
        }
```

## 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}}
```