

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Autenticazione con l'integrazione di Amazon Redshift per Apache Spark
<a name="emr-spark-redshift-auth"></a>

## Utilizzo Gestione dei segreti AWS per recuperare le credenziali e connettersi ad Amazon Redshift
<a name="emr-spark-redshift-secrets"></a>

Il seguente esempio di codice mostra come recuperare le credenziali Gestione dei segreti AWS per la connessione a un cluster Amazon Redshift con PySpark l'interfaccia per Apache Spark in Python.

```
from pyspark.sql import SQLContext
import boto3

sc = # existing SparkContext
sql_context = SQLContext(sc)

secretsmanager_client = boto3.client('secretsmanager')
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

# Read data from a table
df = sql_context.read \
    .format("io.github.spark_redshift_community.spark.redshift") \
    .option("url", url) \
    .option("dbtable", "my_table") \
    .option("tempdir", "s3://path/for/temp/data") \
    .load()
```

## Utilizzo di IAM per recuperare le credenziali ed effettuare la connessione ad Amazon Redshift
<a name="emr-spark-redshift-iam"></a>

Puoi utilizzare il driver Amazon Redshift-provided JDBC versione 2 per connetterti ad Amazon Redshift con il connettore Spark. Per utilizzare AWS Identity and Access Management (IAM), [configura l'URL JDBC per](https://docs.aws.amazon.com/redshift/latest/mgmt/generating-iam-credentials-configure-jdbc-odbc.html) utilizzare l'autenticazione IAM. Per connetterti a un cluster Redshift da Amazon EMR, devi autorizzare il tuo ruolo IAM a recuperare credenziali IAM temporanee. Assegna le seguenti autorizzazioni al tuo ruolo IAM in modo che possa recuperare le credenziali ed eseguire operazioni Amazon S3. 
+  [Redshift:GetClusterCredentials](https://docs.aws.amazon.com/redshift/latest/APIReference/API_GetClusterCredentials.html)(per i cluster Amazon Redshift forniti) 
+  [Redshift:DescribeClusters](https://docs.aws.amazon.com/redshift/latest/APIReference/API_DescribeClusters.html)(per i cluster Amazon Redshift forniti) 
+ [Redshift:GetWorkgroup](https://docs.aws.amazon.com/redshift-serverless/latest/APIReference/API_GetWorkgroup.html)(per gruppi di lavoro Serverless Amazon Redshift)
+  [Redshift:GetCredentials](https://docs.aws.amazon.com/redshift-serverless/latest/APIReference/API_GetCredentials.html)(per gruppi di lavoro Serverless Amazon Redshift) 
+  [s3: GetBucket](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetBucket.html) 
+  [s3: GetBucketLocation](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketLocation.html) 
+  [s3: GetObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html) 
+  [s3: PutObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html) 
+  [s3: GetBucketLifecycleConfiguration](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketLifecycleConfiguration.html) 

Per ulteriori informazioni su `GetClusterCredentials`, consulta [Policy delle risorse per `GetClusterCredentials`](https://docs.aws.amazon.com/redshift/latest/mgmt/redshift-iam-access-control-identity-based.html#redshift-policy-resources.getclustercredentials-resources).

Inoltre, devi assicurarti che Amazon Redshift possa assumere il ruolo IAM durante le operazioni `COPY` e `UNLOAD`.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "AllowSTSAssumerole",
      "Effect": "Allow",
      "Principal": {
        "Service": "redshift.amazonaws.com"
      },
      "Action": "sts:AssumeRole",
      "Condition": {
        "StringEquals": {
          "aws:SourceAccount": "{{123456789012}}"
        }
      }
    }
  ]
}
```

------

L'esempio seguente utilizza l'autenticazione IAM tra Spark e Amazon Redshift:

```
from pyspark.sql import SQLContext
import boto3

sc = # existing SparkContext
sql_context = SQLContext(sc)

url = "jdbc:redshift:iam://{{redshift-host}}:{{redshift-port}}/{{db-name}}"
iam_role_arn = "arn:aws:iam::{{account-id}}:role/{{role-name}}"

# Read data from a table
df = sql_context.read \
    .format("io.github.spark_redshift_community.spark.redshift") \
    .option("url", {{url}}) \
    .option("aws_iam_role", {{iam_role_arn}}) \
    .option("dbtable", "{{my_table}}") \
    .option("tempdir", "{{s3a://path/for/temp/data}}") \
    .mode("error") \
    .load()
```