

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à.

# Concatenazione di ruoli IAM in Amazon Neptune
<a name="bulk-load-tutorial-chain-roles"></a>

**Importante**  
La nuova funzionalità di caricamento in blocco multi-account introdotta nel [rilascio del motore 1.2.1.0.R3](engine-releases-1.2.1.0.R3.md), che sfrutta il concatenamento dei ruoli IAM, può in alcuni casi causare un peggioramento delle prestazioni di caricamento in blocco. Di conseguenza, gli aggiornamenti ai rilasci del motore che supportano questa funzionalità sono stati temporaneamente sospesi fino alla risoluzione del problema.

Quando si collega un ruolo al cluster, il cluster può assumere tale ruolo per accedere ai dati archiviati in Amazon S3. A partire dal [rilascio del motore 1.2.1.0.R3](engine-releases-1.2.1.0.R3.md), se quel ruolo non ha accesso a tutte le risorse necessarie, è possibile concatenare uno o più ruoli aggiuntivi che il cluster può assumere per accedere ad altre risorse. Ogni ruolo nella catena assume il ruolo successivo nella catena, fino a quando il cluster non assume il ruolo alla fine della catena.

Per concatenare i ruoli, è possibile stabilire una relazione di trust tra di essi. Ad esempio, per concatenare `RoleB` a `RoleA`, `RoleA` deve disporre di una policy di autorizzazioni che gli consenta di assumere `RoleB` e `RoleB` deve disporre di una policy di trust che gli consenta di passare le proprie autorizzazioni a `RoleA`. Per ulteriori informazioni, consulta [Utilizzo di ruoli IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use.html).

Il primo ruolo di una catena deve essere collegato al cluster che sta caricando i dati.

Il primo ruolo e ogni ruolo successivo che assume il ruolo seguente nella catena devono avere:
+ Una policy che include una dichiarazione specifica con l'effetto `Allow` sull'azione `sts:AssumeRole`.
+ Il nome della risorsa Amazon (ARN) del ruolo successivo in un elemento `Resource`.

**Nota**  
Il bucket Amazon S3 di destinazione deve trovarsi nella stessa AWS regione del cluster.

## Accesso multi-account tramite ruoli concatenati
<a name="bulk-load-tutorial-chain-cross-account"></a>

È possibile concedere l'accesso multi-account concatenando uno o più ruoli che appartengono a un altro account. Quando il cluster assume temporaneamente un ruolo appartenente a un altro account, può accedere alle relative risorse.

Supponiamo, ad esempio, che l'**Account A** voglia accedere ai dati in un bucket Amazon S3 che appartiene all'**Account B**:
+ L'**account A** crea un ruolo AWS di servizio `RoleA` denominato per Neptune e lo collega a un cluster.
+ L'**Account B** crea un ruolo denominato `RoleB` autorizzato ad accedere ai dati in un bucket dell'**Account B**.
+ L'**Account A** collega una policy di autorizzazioni a `RoleA` che gli consente di assumere `RoleB`.
+ L'**Account B** collega una policy di trust a `RoleB` che gli consente di passare le proprie autorizzazioni a `RoleA`.
+ Per accedere ai dati nel bucket dell'**Account B**, l'**Account A** esegue un comando dello strumento di caricamento con un parametro `iamRoleArn` che concatena `RoleA` e `RoleB`. Per la durata dell'operazione loader, `RoleA` assume temporaneamente il ruolo `RoleB` per accedere al bucket Amazon S3 nell'**Account B**.

![\[Diagramma che illustra l'accesso multi-account tramite ruoli concatenati\]](http://docs.aws.amazon.com/it_it/neptune/latest/userguide/images/cross-account-bulk-load.png)


Ad esempio, `RoleA` avrà una policy di trust che stabilisce una relazione di trust con Neptune:

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
          "Service": "rds.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
```

------

`RoleA` avrà anche una policy di autorizzazione che gli consente di assumere il ruolo `RoleB`, che è di proprietà dell'**Account B**:

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "Stmt1487639602000",
            "Effect": "Allow",
            "Action": [
                "sts:AssumeRole"
            ],
            "Resource": "arn:aws:iam::111122223333:role/RoleB"
        }
    ]
}
```

------

Al contrario, `RoleB` avrà una policy di trust per stabilire una relazione di trust con `RoleA`:

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "sts:AssumeRole",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:role/RoleA"
            }
        }
    ]
}
```

------

`RoleB` avrà inoltre bisogno dell'autorizzazione per accedere ai dati nel bucket Amazon S3 situato nell'**Account B**.

## Creazione di un AWS Security Token Service endpoint VPC (STS)
<a name="bulk-load-tutorial-sts-endpoint"></a>

Il loader Neptune richiede un AWS STS endpoint VPC per quando si concatenano i ruoli IAM all'accesso privato tramite indirizzi IP privati. AWS STS APIs Puoi connetterti direttamente da un Amazon VPC a AWS STS un endpoint VPC in modo sicuro e scalabile. L'utilizzo di un endpoint VPC dell'interfaccia offre un migliore assetto di sicurezza in quanto non è necessario aprire firewall per il traffico in uscita. Offre inoltre gli altri vantaggi derivanti dall'utilizzo degli endpoint Amazon VPC.

Quando si utilizza un endpoint VPC, il traffico verso AWS STS non viene trasmesso su Internet e non esce mai dalla rete Amazon. Il tuo VPC è connesso in modo sicuro AWS STS senza rischi di disponibilità o vincoli di larghezza di banda sul traffico di rete. Per ulteriori informazioni, consulta [Utilizzo di endpoint VPC dell'interfaccia AWS STS](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_sts_vpce.html).

**Per configurare l'accesso per (STS) AWS Security Token Service**

1. Accedi Console di gestione AWS e apri la console Amazon VPC all'indirizzo. [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/)

1. Nel pannello di navigazione, seleziona **Endpoints (Endpoint)**.

1. Scegliere **Create Endpoint** (Crea endpoint).

1. Scegli il **Nome servizio** `com.amazonaws.region.sts` per l'endpoint di tipo Interfaccia.

1. Scegli il **VPC** che contiene l'istanza database Neptune e l'istanza EC2.

1. Seleziona la casella di controllo accanto alla sottorete in cui è presente l'istanza EC2. Non è possibile selezionare più sottoreti dalla stessa zona di disponibilità.

1. Per IP address type (Tipo di indirizzo IP), seleziona una delle opzioni seguenti:
   + **IPv4**— Assegna IPv4 indirizzi alle interfacce di rete degli endpoint. Questa opzione è supportata solo se tutte le sottoreti selezionate hanno intervalli di indirizzi. IPv4 
   + **IPv6**— Assegna IPv6 indirizzi alle interfacce di rete degli endpoint. Questa opzione è supportata solo se tutte le sottoreti selezionate sono sottoreti -only. IPv6
   + **Dualstack**: assegna entrambi gli indirizzi alle interfacce di rete degli endpoint. IPv4 IPv6 Questa opzione è supportata solo se tutte le sottoreti selezionate hanno entrambi gli intervalli di indirizzi. IPv4 IPv6 

1. Per **Gruppi di sicurezza**, seleziona i gruppi di sicurezza da associare alle interfacce di rete dell'endpoint per l'endpoint VPC. È necessario selezionare tutti i gruppi di sicurezza collegati all'istanza database Neptune e all'istanza EC2.

1. Per **Policy**, seleziona **Full access** (Accesso completo) per consentire tutte le operazioni da parte di tutti i principali su tutte le risorse dell'endpoint VPC. In caso contrario, seleziona **Custom** (Personalizza) per allegare una policy dell'endpoint VPC in grado di verificare le autorizzazioni di cui dispongono i principali per eseguire operazioni sulle risorse dell'endpoint VPC. Questa opzione è disponibile solo se il servizio supporta le policy dell'endpoint VPC. Per ulteriori informazioni, consulta [Policy di endpoint](https://docs.aws.amazon.com/vpc/latest/privatelink/vpc-endpoints-access.html).

1. (*Facoltativo*) Per aggiungere un tag, scegli **Aggiungi nuovo tag** e immetti la chiave e il valore del tag desiderati.

1. Seleziona **Crea endpoint**.

Per ulteriori informazioni sulla creazione dell'endpoint, consulta [Endpoint VPC](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html) nella Guida per l'utente di Amazon VPC. Tieni presente che l'endpoint VPC di Amazon STS è un prerequisito obbligatorio per il concatenamento dei ruoli IAM.

Ora che hai concesso l'accesso all' AWS STS endpoint, puoi prepararti a caricare i dati. Per ulteriori informazioni sui formati di dati supportati, consulta [Formati dei dati di caricamento](bulk-load-tutorial-format.md).

## Concatenamento dei ruoli all'interno di un comando dello strumento di caricamento
<a name="bulk-load-tutorial-loader-chain"></a>

È possibile specificare il concatenamento dei ruoli quando si esegue un comando loader includendo un elenco di ruoli separati da virgole nel parametro. ARNs `iamRoleArn`

Sebbene nella maggior parte dei casi sia necessario avere solo due ruoli in una catena, è sicuramente possibile concatenarne tre o più. Ad esempio, questo comando dello strumento di caricamento concatena tre ruoli:

------
#### [ AWS CLI ]

```
aws neptunedata start-loader-job \
  --endpoint-url https://your-neptune-endpoint:port \
  --source "s3://(the target bucket name)/(the target date file name)" \
  --format "csv" \
  --iam-role-arn "arn:aws:iam::(Account A ID):role/(RoleA),arn:aws:iam::(Account B ID):role/(RoleB),arn:aws:iam::(Account C ID):role/(RoleC)" \
  --s3-bucket-region "us-east-1"
```

Per ulteriori informazioni, vedere [start-loader-job](https://docs.aws.amazon.com/cli/latest/reference/neptunedata/start-loader-job.html)nel Command Reference. AWS CLI 

------
#### [ SDK ]

```
import boto3
from botocore.config import Config

client = boto3.client(
    'neptunedata',
    endpoint_url='https://your-neptune-endpoint:port',
    config=Config(read_timeout=None, retries={'total_max_attempts': 1})
)

response = client.start_loader_job(
    source='s3://(the target bucket name)/(the target date file name)',
    format='csv',
    iamRoleArn='arn:aws:iam::(Account A ID):role/(RoleA),arn:aws:iam::(Account B ID):role/(RoleB),arn:aws:iam::(Account C ID):role/(RoleC)',
    s3BucketRegion='us-east-1'
)

print(response)
```

------
#### [ awscurl ]

```
awscurl https://your-neptune-endpoint:port/loader \
  --region us-east-1 \
  --service neptune-db \
  -X POST \
  -H 'Content-Type: application/json' \
  -d '{
        "source" : "s3://(the target bucket name)/(the target date file name)",
        "iamRoleArn" : "arn:aws:iam::(Account A ID):role/(RoleA),arn:aws:iam::(Account B ID):role/(RoleB),arn:aws:iam::(Account C ID):role/(RoleC)",
        "format" : "csv",
        "region" : "us-east-1"
      }'
```

**Nota**  
Questo esempio presuppone che le AWS credenziali siano configurate nell'ambiente in uso. Sostituisci *us-east-1* con la regione del tuo cluster Neptune.

------
#### [ curl ]

```
curl -X POST https://your-neptune-endpoint:port/loader \
  -H 'Content-Type: application/json' \
  -d '{
        "source" : "s3://(the target bucket name)/(the target date file name)",
        "iamRoleArn" : "arn:aws:iam::(Account A ID):role/(RoleA),arn:aws:iam::(Account B ID):role/(RoleB),arn:aws:iam::(Account C ID):role/(RoleC)",
        "format" : "csv",
        "region" : "us-east-1"
      }'
```

------