

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

# Connessione ai database Amazon Neptune utilizzando l'autenticazione IAM dalla riga di comando
<a name="iam-auth-connect-command-line"></a>

Avere uno strumento a riga di comando per inviare query al cluster database Neptune è molto utile, come illustrato in molti esempi di questa documentazione. Lo strumento [curl](https://curl.haxx.se/) è un'opzione eccellente per comunicare con gli endpoint Neptune se l'autenticazione IAM non è abilitata.

**Tuttavia, per proteggere i dati è meglio abilitare l'autenticazione IAM.**

Quando è abilitata l'autenticazione IAM, ogni richiesta deve essere [firmata utilizzando Signature Version 4 (Sig4)](https://docs.aws.amazon.com/general/latest/gr/signing-aws-api-requests.html). Lo strumento a riga di comando [awscurl](https://github.com/okigan/awscurl) di terze parti utilizza la stessa sintassi di `curl` e può firmare le query utilizzando la firma Sig4. La sezione [Uso di `awscurl`](#iam-auth-connect-awscurl) seguente spiega come utilizzare `awscurl` in modo sicuro con le credenziali temporanee.

## Configurazione di uno strumento a riga di comando per l'utilizzo di HTTPS
<a name="iam-auth-connect-command-line-https"></a>

Neptune richiede che tutte le connessioni utilizzino HTTPS. Qualsiasi strumento a riga di comando come `curl` o `awscurl` necessita dell'accesso ai certificati appropriati per poter utilizzare HTTPS. Se `curl` o `awscurl` sono in grado di individuare i certificati adeguati, gestiscono le connessioni HTTPS in modo analogo alle connessioni HTTP, senza parametri aggiuntivi. Gli esempi di questa documentazione si basano su questo scenario.

Per scoprire come ottenere tali certificati e come formattarli correttamente in un archivio di certificati CA (Certificate Authority) che `curl` può utilizzare, consulta [Verifica certificati SSL](https://curl.haxx.se/docs/sslcerts.html) nella documentazione di `curl`.

È possibile specificare il percorso di questo archivio di certificati CA utilizzando la variabile di ambiente `CURL_CA_BUNDLE`. In Windows, `curl` cerca automaticamente un file denominato `curl-ca-bundle.crt`. Cerca prima nella stessa cartella di `curl.exe`, quindi in altri punti del percorso. Per ulteriori informazioni, consulta [Verifica certificati SSL](https://curl.haxx.se/docs/sslcerts.html).

## Utilizzo di `awscurl` con credenziali temporanee per connettersi in modo sicuro a un cluster database con autenticazione IAM abilitata
<a name="iam-auth-connect-awscurl"></a>

Lo strumento [awscurl](https://github.com/okigan/awscurl) utilizza la stessa sintassi di `curl`, ma necessita anche di informazioni aggiuntive:
+ **`--access_key`**: chiave di accesso valida. Se non viene fornita utilizzando questo parametro, deve essere fornita nella variabile di ambiente `AWS_ACCESS_KEY_ID` o in un file di configurazione.
+ **`--secret_key`**: chiave segreta valida corrispondente alla chiave di accesso. Se non viene fornita utilizzando questo parametro, deve essere fornita nella variabile di ambiente `AWS_SECRET_ACCESS_KEY` o in un file di configurazione.
+ **`--security_token`**: token di sessione valido. Se non viene fornita utilizzando questo parametro, deve essere fornita nella variabile di ambiente `AWS_SECURITY_TOKEN` o in un file di configurazione.

In passato, era prassi comune utilizzare credenziali persistenti con `awscurl`, come le credenziali utente IAM o anche le credenziali root, ma ciò non è consigliato. [Genera invece credenziali temporanee utilizzando uno dei [AWS Security Token Service (STS)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html) o uno dei relativi APIs wrapper.AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/sts/index.html)

È preferibile inserire i valori `AccessKeyId`, `SecretAccessKey` e `SessionToken` restituiti dalla chiamata STS nelle variabili di ambiente appropriate nella sessione della shell anziché in un file di configurazione. In questo modo, quando la shell termina, le credenziali vengono automaticamente eliminate, cosa che non avviene con un file di configurazione. Allo stesso modo, non richiedere per le credenziali temporanee una durata più lunga di quella di cui si potrebbe aver bisogno.

L'esempio seguente mostra i passaggi da eseguire in una shell Linux per ottenere credenziali temporanee valide per mezz'ora usando [sts assume-role](https://docs.aws.amazon.com/cli/latest/reference/sts/assume-role), per poi inserirle in variabili di ambiente dove `awscurl` può trovarle:

```
aws sts assume-role \
    --duration-seconds 1800 \
    --role-arn "arn:aws:iam::(account-id):role/(rolename)" \
    --role-session-name AWSCLI-Session > $output
AccessKeyId=$(echo $output | jq '.Credentials''.AccessKeyId')
SecretAccessKey=$(echo $output | jq '.Credentials''.SecretAccessKey')
SessionToken=$(echo $output | jq '.Credentials''.SessionToken')

export AWS_ACCESS_KEY_ID=$AccessKeyId
export AWS_SECRET_ACCESS_KEY=$SecretAccessKey
export AWS_SESSION_TOKEN=$SessionToken
```

È possibile quindi usare `awscurl` per effettuare una richiesta firmata al cluster database in questo modo:

```
awscurl (your cluster endpoint):8182/status \
    --region us-east-1 \
    --service neptune-db
```