

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

# Configurazione di un metodo Amazon API Gateway come provider di identità personalizzato
<a name="gateway-api-tutorial"></a>

Questo tutorial illustra come configurare un metodo Amazon API Gateway e utilizzarlo come provider di identità personalizzato per caricare file su un AWS Transfer Family server. Questo tutorial utilizza il [modello di stack Basic](https://s3.amazonaws.com/aws-transfer-resources/custom-idp-templates/aws-transfer-custom-idp-basic-apig.template.yml) e altre funzionalità di base solo come esempio. 

**Topics**
+ [Prerequisiti](#prereq-api-gateway-tutorial)
+ [Fase 1: Creare uno stack CloudFormation](#create-cf-stack)
+ [Passaggio 2: verifica la configurazione del metodo API Gateway per il tuo server](#deploy-api-gateway)
+ [Fase 3: Visualizzare i dettagli del server Transfer Family](#create-transfer-server)
+ [Fase 4: Verifica che l'utente sia in grado di connettersi al server](#test-user-server-connect)
+ [Passaggio 5: verifica la connessione SFTP e il trasferimento dei file](#test-sftp-connection)
+ [Passaggio 6: Limita l'accesso al bucket](#example-bucket)
+ [Aggiorna Lambda se usi Amazon EFS](#lambda-posix)

## Prerequisiti
<a name="prereq-api-gateway-tutorial"></a>

Prima di creare le risorse Transfer Family in CloudFormation, crea il tuo spazio di archiviazione e il tuo ruolo utente.

**Per specificare lo spazio di archiviazione e creare un ruolo utente**

1. A seconda dello storage in uso, consulta la seguente documentazione:
   + Per creare un bucket Amazon S3, vedi [Come si crea un bucket S3](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/create-bucket-overview.html)? nella *Guida per l'utente di Amazon Simple Storage Service*.
   + Per creare un file system Amazon EFS, consulta[Configurazione di un file system Amazon EFS](configure-storage.md#requirements-efs).

1. Per creare un ruolo utente, vedi [Crea un ruolo e una policy IAM](requirements-roles.md)

I dettagli relativi allo spazio di archiviazione e al ruolo utente vengono immessi quando si crea CloudFormation lo stack nella sezione successiva.

## Fase 1: Creare uno stack CloudFormation
<a name="create-cf-stack"></a>

**Per creare uno AWS CloudFormation stack a partire dal modello fornito**

1. Apri la CloudFormation console all'indirizzo [https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/).

1. Seleziona **Crea stack** e scegli **Con nuove risorse (standard).** 

1. Nel riquadro **Prerequisito - Prepara modello**, scegli **Scegli un modello esistente**. 

1. Copia questo link, [modello di stack Basic](https://s3.amazonaws.com/aws-transfer-resources/custom-idp-templates/aws-transfer-custom-idp-basic-apig.template.yml), e incollalo nel campo URL di **Amazon S3**. 

1. Fare clic su **Avanti**. 

1. Specificate i parametri, incluso un nome per lo stack. Assicuratevi di fare quanto segue: 
   + Sostituite i valori predefiniti per **UserName**e **UserPassword**.
   + Per **UserHomeDirectory**, inserisci i dettagli dello storage (un bucket Amazon S3 o un file system Amazon EFS) che hai creato in precedenza.
   + Sostituisci l'impostazione predefinita **UserRoleArn**con il ruolo utente creato in precedenza. Il ruolo AWS Identity and Access Management (IAM) deve disporre delle autorizzazioni appropriate. Per un esempio di politica del ruolo e del bucket di IAM, vedi. [Passaggio 6: Limita l'accesso al bucket](#example-bucket) 
   + Se desideri autenticarti utilizzando una chiave pubblica anziché una password, inserisci la tua chiave pubblica nel **UserPublicKey1**campo. La prima volta che ti connetti al server tramite SFTP, fornisci la chiave privata anziché una password. 

1. Scegli **Avanti**, quindi scegli nuovamente **Avanti** nella pagina **Configura le opzioni dello stack**. 

1. Esamina i dettagli dello stack che stai creando, quindi scegli **Crea** pila. 
**Nota**  
Nella parte inferiore della pagina, in **Capacità**, devi riconoscere che CloudFormation potrebbe creare risorse IAM. 

## Passaggio 2: verifica la configurazione del metodo API Gateway per il tuo server
<a name="deploy-api-gateway"></a>

**Nota**  
Per migliorare la sicurezza, puoi configurare un firewall per applicazioni Web. AWS WAF è un firewall per applicazioni Web che consente di monitorare le richieste HTTP e HTTPS inoltrate a un Amazon API Gateway. Per informazioni dettagliate, vedi [Aggiungi un firewall per applicazioni Web](web-application-firewall.md).

**Non abilitare la memorizzazione nella cache dell'API Gateway**  
Non abilitate la memorizzazione nella cache per il metodo API Gateway quando lo utilizzate come provider di identità personalizzato per Transfer Family. La memorizzazione nella cache è inappropriata e non valida per le richieste di autenticazione perché:  
Ogni richiesta di autenticazione è unica e richiede una risposta in tempo reale, non una risposta memorizzata nella cache
La memorizzazione nella cache non offre vantaggi poiché Transfer Family non invia mai richieste duplicate o ripetute all'API Gateway.
L'attivazione della memorizzazione nella cache farà sì che l'API Gateway risponda con dati non corrispondenti, con conseguenti risposte non valide alle richieste di autenticazione

**Per verificare la configurazione del metodo API Gateway per il server e distribuirlo**

1. <a name="step_invoke_url"></a>

   Apri la console API Gateway all'indirizzo [https://console.aws.amazon.com/apigateway/](https://console.aws.amazon.com/apigateway/). 

1. Scegli l'**API del modello di base di Transfer Custom Identity Provider** generata dal CloudFormation modello.

1. Nel riquadro **Risorse**, scegli **GET**, quindi scegli **Method Request**.

1. Per **Azioni**, scegli **Deploy API.** **Per la **fase di distribuzione**, scegli **prod**, quindi scegli Deploy.**

   Dopo aver distribuito correttamente il metodo API Gateway, visualizzane le prestazioni nella sezione **Stage Editor**.
**Nota**  
Copia l'indirizzo **URL di Invoke** visualizzato nella parte superiore della pagina. Ti servirà per il passaggio successivo.

## Fase 3: Visualizzare i dettagli del server Transfer Family
<a name="create-transfer-server"></a>

Quando si utilizza il modello per creare uno CloudFormation stack, viene creato automaticamente un server Transfer Family.

**Per visualizzare i dettagli del server Transfer Family**

1. Apri la CloudFormation console all'indirizzo [https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/).

1. Scegli lo stack che hai creato.

1. Scegli la scheda **Risorse**.  
![Schermata che mostra l'elenco delle risorse create durante la creazione dello CloudFormation stack, con i dettagli per il server Transfer Family evidenziati.](http://docs.aws.amazon.com/it_it/transfer/latest/userguide/images/apig-find-server-id.png)

   L'ARN del server viene visualizzato nella colonna **ID fisico** della **TransferServer**riga. **L'ID del server è contenuto nell'ARN, ad esempio s-11112222333344445.**

1. Apri la AWS Transfer Family console all'indirizzo [https://console.aws.amazon.com/transfer/](https://console.aws.amazon.com/transfer/)e nella pagina **Server scegli il nuovo server**.

   L'ID del server corrisponde all'ID visualizzato per la **TransferServer**risorsa in CloudFormation.

## Fase 4: Verifica che l'utente sia in grado di connettersi al server
<a name="test-user-server-connect"></a>

**Per verificare che l'utente sia in grado di connettersi al server, utilizzando la console Transfer Family**

1. Apri la AWS Transfer Family console all'indirizzo [https://console.aws.amazon.com/transfer/](https://console.aws.amazon.com/transfer/).

1. Nella pagina **Server**, scegli il tuo nuovo server, scegli **Azioni**, quindi scegli **Test**.

1. Inserisci il testo delle tue credenziali di accesso nel campo **Nome utente** e nel campo **Password**. Questi sono i valori che hai impostato quando hai distribuito lo stack. CloudFormation 

1. Per **Server Protocol**, seleziona **SFTP** e per **Source IP**, inserisci. **127.0.0.1** 

1. Scegli **Test (Esegui test)**.

   Se l'autenticazione dell'utente ha esito positivo, il test restituisce una risposta `StatusCode: 200` HTML e un oggetto JSON contenente i dettagli dei ruoli e delle autorizzazioni dell'utente. Esempio:

   ```
   {
       "Response": "{\"Role\": \"arn:aws:iam::{{123456789012}}:role/{{my-user-role}}\",\"HomeDirectory\": \"/${transfer:HomeBucket}/\"}",
       "StatusCode": 200,
       "Message": "",
       "Url": "https://{{1a2b3c4d5e}}.execute-api.{{us-east-2}}.amazonaws.com/prod/servers/s-{{1234abcd5678efgh0}}/users/{{myuser}}/config"
   }
   ```

   Se il test fallisce, aggiungi una delle policy AWS gestite da API Gateway al ruolo che stai utilizzando per la tua API. 

## Passaggio 5: verifica la connessione SFTP e il trasferimento dei file
<a name="test-sftp-connection"></a>

**Per testare la connessione SFTP**

1. Su un dispositivo Linux o macOS, apri un terminale di comando. 

1. Inserisci uno dei seguenti comandi, a seconda che tu stia utilizzando una password o una key pair per l'autenticazione. 
   + Se stai usando una password, inserisci questo comando:

      ` sftp -o PubkeyAuthentication=no {{myuser}}@{{server-ID}}.server.transfer.{{region-code}}.amazonaws.com ` 

     Specifica la password, quando richiesto.
   +  Se stai usando una key pair, inserisci questo comando: 

     ` sftp -i {{private-key-file}} {{myuser}}@{{server-ID}}.server.transfer.{{region-code}}.amazonaws.com `
**Nota**  
Per questi `sftp` comandi, inserisci il codice relativo al Regione AWS luogo in cui si trova il tuo server Transfer Family. Ad esempio, se il tuo server si trova negli Stati Uniti orientali (Ohio), inserisci**us-east-2**.

1.  Quando `sftp>` richiesto, assicuratevi di poter caricare (`put`), scaricare (`get`) e visualizzare cartelle e file (`pwd`e). `ls` 

## Passaggio 6: Limita l'accesso al bucket
<a name="example-bucket"></a>

Puoi limitare chi può accedere a uno specifico bucket Amazon S3. L'esempio seguente mostra le impostazioni da utilizzare nello CloudFormation stack e nella politica selezionata per l'utente. 

In questo esempio, impostiamo i seguenti parametri per lo CloudFormation stack: 
+ **CreateServer**: `true`
+ **UserHomeDirectory**: `/amzn-s3-demo-bucket1`
+ **UserName**: `myuser`
+ **UserPassword**: `MySuperSecretPassword`
**Importante**  
Questa è una password di esempio. Quando configuri il metodo API Gateway, assicurati di inserire una password sicura.
+ **UserPublicKey1**: `{{your-public-key}}`
+ **UserRoleArn**: `arn:aws:iam::{{role-id}}:role/myuser-api-gateway-role`

``**UserPublicKey1**È una chiave pubblica che hai generato come parte di una coppia di public/private chiavi.

`{{role-id}}`È unico per il ruolo utente che crei. La politica allegata a `myuser-api-gateway-role` è la seguente: 

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "s3:ListBucket",
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket1"
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:GetObjectAcl",
                "s3:GetObject",
                "s3:DeleteObjectVersion",
                "s3:DeleteObject",
                "s3:PutObjectAcl",
                "s3:GetObjectVersion"
            ],
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket1/*"
        }
    ]
}
```

 Per connetterti al server tramite SFTP, inserisci uno dei seguenti comandi al prompt. 
+ Se utilizzate una password per l'autenticazione, eseguite il comando seguente:

   ` sftp -o PubkeyAuthentication=no {{myuser}}@{{transfer-server-ID}}.server.transfer.{{region-id}}.amazonaws.com` 

  Specifica la password, quando richiesto.
+  Se stai usando una key pair per l'autenticazione, esegui il seguente comando: 

  ` sftp -i {{private-key-file}} myuser@{{transfer-server-ID}}.server.transfer.{{region-id}}.amazonaws.com `

**Nota**  
Per questi `sftp` comandi, usa l'ID del Regione AWS luogo in cui si trova il tuo server Transfer Family. Ad esempio, se il tuo server si trova negli Stati Uniti orientali (Ohio), usa`us-east-2`. 

 Al `sftp` prompt, verrete indirizzati alla vostra home directory, che potete visualizzare eseguendo il `pwd` comando. Esempio: 

```
sftp> pwd
Remote working directory: /amzn-s3-demo-bucket1
```

L'utente non può visualizzare alcuna directory al di sopra della home directory. Esempio: 

```
sftp> pwd
Remote working directory: /amzn-s3-demo-bucket1
sftp> cd ..
sftp> ls
Couldn't read directory: Permission denied
```

## Aggiorna Lambda se usi Amazon EFS
<a name="lambda-posix"></a>

 Se hai selezionato Amazon EFS come opzione di storage per il tuo server Transfer Family, devi modificare la funzione lambda per il tuo stack. 

**Per aggiungere un profilo Posix alla tua funzione Lambda**

1. Apri la console Lambda all'indirizzo. [https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/)

1.  Seleziona la funzione Lambda che hai creato in precedenza. La funzione Lambda ha il formato **{{stack-name}}- GetUserConfigLambda - {{lambda-identifier}}**, dove {{stack-name}} è il nome dello CloudFormation stack ed {{lambda-identifier}} è l'identificatore della funzione. 

1.  Nella scheda **Codice**, selezionate **index.js** per visualizzare il codice della funzione. 

1.  Nella`response`, aggiungi la seguente riga tra `Policy` e`HomeDirectory`: 

    ` PosixProfile: {"Uid": {{uid-value}}, "Gid": {{gid-value}}}, ` 

    Dove {{uid-value}} e {{gid-value}} sono numeri interi, pari o superiori a 0, che rappresentano rispettivamente l'ID utente e l'ID del gruppo. 

   Ad esempio, dopo aver aggiunto il profilo Posix, il campo di risposta potrebbe essere simile al seguente:

   ```
    response = {
         Role: 'arn:aws:iam::123456789012:role/api-gateway-transfer-efs-role', // The user will be authenticated if and only if the Role field is not blank
         Policy: '', // Optional JSON blob to further restrict this user's permissions
         PosixProfile: {"Gid": 65534, "Uid": 65534},
         HomeDirectory: '/fs-fab2c234' // Not required, defaults to '/'
       };
   ```