View a markdown version of this page

Usare Amazon API Gateway per integrare il tuo provider di identità - AWS Transfer Family

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

Usare Amazon API Gateway per integrare il tuo provider di identità

Questo argomento descrive come utilizzare una AWS Lambda funzione per eseguire il backup di un metodo API Gateway. Usa questa opzione se hai bisogno di un'API RESTful per integrare il tuo provider di identità o se desideri utilizzarla AWS WAF per sfruttare le sue funzionalità di blocco geografico o di limitazione della velocità delle richieste.

Per la maggior parte dei casi d'uso, il modo consigliato per configurare un provider di identità personalizzato è utilizzare il. Soluzione personalizzata per provider di identità

Limitazioni se si utilizza un API Gateway per integrare il provider di identità

  • Questa configurazione non supporta domini personalizzati.

  • Questa configurazione non supporta un URL API Gateway privato.

Se hai bisogno di uno di questi, puoi utilizzare Lambda come provider di identità, senza API Gateway. Per informazioni dettagliate, vedi Utilizzo AWS Lambda per integrare il tuo provider di identità.

Autenticazione tramite un metodo API Gateway

Puoi creare un metodo API Gateway da utilizzare come provider di identità per Transfer Family. Questo approccio fornisce un modo altamente sicuro per creare e fornire API. Con API Gateway, puoi creare un endpoint HTTPS in modo che tutte le operazioni API in entrata vengano trasmesse con maggiore sicurezza. Per maggiori dettagli sul servizio API Gateway, consulta la API Gateway Developer Guide.

API Gateway offre un metodo di autorizzazione denominatoAWS_IAM, che fornisce la stessa autenticazione basata su AWS Identity and Access Management (IAM) AWS utilizzata internamente. Se abiliti l'autenticazione conAWS_IAM, solo i chiamanti con autorizzazioni esplicite per chiamare un'API possono accedere al metodo API Gateway di quell'API.

Per utilizzare il metodo API Gateway come provider di identità personalizzato per Transfer Family, abilita IAM per il metodo API Gateway. Come parte di questo processo, fornisci a un ruolo IAM le autorizzazioni per consentire a Transfer Family di utilizzare il tuo gateway.

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.

Non abilitare la memorizzazione nella cache di 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 alcun vantaggio 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 utilizzare il metodo API Gateway per l'autenticazione personalizzata con Transfer Family
  1. Crea uno CloudFormation stack. Per farlo:

    Nota

    I modelli di stack sono stati aggiornati per utilizzare BASE64-encoded le password: per i dettagli, consultaMiglioramenti al CloudFormation modelli.

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

    2. Segui le istruzioni per distribuire uno CloudFormation stack da un modello esistente in Selezione di un modello di stack nella Guida per l'AWS CloudFormation utente.

    3. Utilizza uno dei seguenti modelli di base per creare un metodo API Gateway AWS Lambda supportato da utilizzare come provider di identità personalizzato in Transfer Family.

    L'implementazione di uno di questi stack è il modo più semplice per integrare un provider di identità personalizzato nel flusso di lavoro di Transfer Family. Ogni stack utilizza la funzione Lambda per supportare il metodo API basato su API Gateway. Puoi quindi utilizzare il tuo metodo API come provider di identità personalizzato in Transfer Family. Per impostazione predefinita, la funzione Lambda autentica un singolo utente chiamato myuser con una password di. MySuperSecretPassword Dopo la distribuzione, puoi modificare queste credenziali o aggiornare il codice della funzione Lambda per fare qualcosa di diverso.

    Importante

    Ti consigliamo di modificare le credenziali utente e password predefinite.

    Dopo che lo stack è stato distribuito, puoi visualizzarne i dettagli nella scheda Outputs della console. CloudFormation Questi dettagli includono l'Amazon Resource Name (ARN) dello stack, l'ARN del ruolo IAM creato dallo stack e l'URL del tuo nuovo gateway.

    Nota

    Se utilizzi l'opzione del provider di identità personalizzato per abilitare l'autenticazione basata su password per i tuoi utenti e abiliti la registrazione delle richieste e delle risposte fornita da API Gateway, API Gateway registra le password degli utenti nei tuoi Amazon Logs. CloudWatch Non è consigliabile utilizzare questo registro nel tuo ambiente di produzione. Per ulteriori informazioni, consulta Configurare la registrazione delle CloudWatch API in API Gateway nella API Gateway Developer Guide.

  2. Controlla la configurazione del metodo API Gateway per il tuo server. Per farlo:

    1. Apri la console API Gateway all'indirizzo https://console.aws.amazon.com/apigateway/.

    2. Scegli l'API del modello di base di Transfer Custom Identity Provider generata dal CloudFormation modello. Potresti dover selezionare la tua regione per vedere i tuoi gateway.

    3. Nel riquadro Risorse, scegli GET. La schermata seguente mostra la corretta configurazione del metodo.

      Dettagli sulla configurazione dell'API, che mostrano i parametri di configurazione del metodo per i Request Paths e per la URL Query String.

    A questo punto, il tuo gateway API è pronto per essere distribuito.

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

    Una volta implementato correttamente il metodo API Gateway, visualizzane le prestazioni in Stages > Stage details, come mostrato nella schermata seguente.

    Nota

    Copia l'indirizzo URL Invoke che appare nella parte superiore dello schermo. Potrebbe servirti per il passaggio successivo.

    Dettagli della fase con l'URL Invoke evidenziato.
  4. Apri la AWS Transfer Family console all'indirizzo. https://console.aws.amazon.com/transfer/

  5. Una Transfer Family dovrebbe essere stata creata per te, quando hai creato lo stack. In caso contrario, configura il tuo server seguendo questi passaggi.

    1. Scegli Crea server per aprire la pagina Crea server. Per Scegli un provider di identità, scegli Personalizzato, quindi seleziona Usa Amazon API Gateway per connetterti al tuo provider di identità, come mostrato nella schermata seguente.

      La schermata del provider di identità con Custom Identity Provider selezionato e con l'API Gateway scelto per la connessione al tuo provider di identità.
    2. Nella casella di testo Fornisci un URL di Amazon API Gateway, incolla l'indirizzo URL di richiamo dell'endpoint API Gateway che hai creato nel passaggio 3 di questa procedura.

    3. Per Ruolo, scegli il ruolo IAM creato dal CloudFormation modello. Questo ruolo consente a Transfer Family di richiamare il tuo metodo API gateway.

      Il ruolo di chiamata contiene il nome CloudFormation dello stack selezionato per lo stack creato nel passaggio 1. Ha il seguente formato:. CloudFormation-stack-name-TransferIdentityProviderRole-ABC123DEF456GHI

    4. Compila le caselle rimanenti, quindi scegli Crea server. Per informazioni dettagliate sui passaggi rimanenti per la creazione di un server, consultaConfigurazione di un endpoint server SFTP, FTPS o FTP.

Implementazione del metodo API Gateway

Per creare un provider di identità personalizzato per Transfer Family, il metodo API Gateway deve implementare un unico metodo con un percorso di risorse pari a/servers/serverId/users/username/config. I username valori serverId e provengono dal percorso delle risorse RESTful. Inoltre, aggiungete sourceIp e protocol come parametri della stringa di query URL nella Method Request, come mostrato nell'immagine seguente.

La schermata Risorse dell'API Gateway mostra i dettagli del GET metodo.
Nota

Il nome utente deve contenere un minimo di 3 e un massimo di 100 caratteri. È possibile utilizzare i seguenti caratteri nel nome utente: a—z,, 0—9 A-Z, trattino basso '_', trattino '-', punto '.' e segno '@'. Il nome utente non può iniziare con il trattino «-», il punto «.» o con il segno «@».

Se Transfer Family tenta l'autenticazione tramite password per l'utente, il servizio fornisce un Password: campo di intestazione. In assenza di un'Password:intestazione, Transfer Family tenta l'autenticazione con chiave pubblica per autenticare l'utente.

Quando si utilizza un provider di identità per autenticare e autorizzare gli utenti finali, oltre a convalidare le loro credenziali, è possibile consentire o negare le richieste di accesso in base agli indirizzi IP dei client utilizzati dagli utenti finali. Puoi utilizzare questa funzionalità per assicurarti che i dati archiviati nei bucket S3 o nel tuo file system Amazon EFS siano accessibili tramite i protocolli supportati solo dagli indirizzi IP che hai specificato come attendibili. Per abilitare questa funzionalità, devi includerla sourceIp nella stringa di query.

Se hai più protocolli abilitati per il tuo server e desideri fornire l'accesso utilizzando lo stesso nome utente su più protocolli, puoi farlo purché le credenziali specifiche per ciascun protocollo siano state impostate nel tuo provider di identità. Per abilitare questa funzionalità, è necessario includere il protocol valore nel percorso delle risorse RESTful.

Il metodo API Gateway deve sempre restituire il codice 200 di stato HTTP. Qualsiasi altro codice di stato HTTP indica che si è verificato un errore durante l'accesso all'API.

Esempio di risposta Amazon S3

Il corpo della risposta di esempio è un documento JSON del seguente formato per Amazon S3.

{ "Role": "IAM role with configured S3 permissions", "PublicKeys": [ "ssh-rsa public-key1", "ssh-rsa public-key2" ], "Policy": "STS Assume role session policy", "HomeDirectory": "/amzn-s3-demo-bucket/path/to/home/directory" }
Nota

La policy è sottoposta a escape in formato JSON come stringa. Ad esempio:

"Policy": "{ \"Version\": \"2012-10-17\", \"Statement\": [ {\"Condition\": {\"StringLike\": {\"s3:prefix\": [\"user/*\", \"user/\"]}}, \"Resource\": \"arn:aws:s3:::amzn-s3-demo-bucket\", \"Action\": \"s3:ListBucket\", \"Effect\": \"Allow\", \"Sid\": \"ListHomeDir\"}, {\"Resource\": \"arn:aws:s3:::*\", \"Action\": [\"s3:PutObject\", \"s3:GetObject\", \"s3:DeleteObjectVersion\", \"s3:DeleteObject\", \"s3:GetObjectVersion\", \"s3:GetObjectACL\", \"s3:PutObjectACL\"], \"Effect\": \"Allow\", \"Sid\": \"HomeDirObjectAccess\"}] }"

La seguente risposta di esempio mostra che un utente ha un tipo di home directory logico.

{ "Role": "arn:aws:iam::123456789012:role/transfer-access-role-s3", "HomeDirectoryType":"LOGICAL", "HomeDirectoryDetails":"[{\"Entry\":\"/\",\"Target\":\"/amzn-s3-demo-bucket1\"}]", "PublicKeys":[""] }
Esempio di risposta Amazon EFS

Il corpo della risposta di esempio è un documento JSON del seguente formato per Amazon EFS.

{ "Role": "IAM role with configured EFS permissions", "PublicKeys": [ "ssh-rsa public-key1", "ssh-rsa public-key2" ], "PosixProfile": { "Uid": "POSIX user ID", "Gid": "POSIX group ID", "SecondaryGids": [Optional list of secondary Group IDs], }, "HomeDirectory": "/fs-id/path/to/home/directory" }

Il Role campo mostra che l'autenticazione è avvenuta con successo. Quando si esegue l'autenticazione con password (quando si fornisce un'Password:intestazione), non è necessario fornire chiavi pubbliche SSH. Se un utente non può essere autenticato, ad esempio, se la password non è corretta, il metodo dovrebbe restituire una risposta senza impostazione. Role Un esempio di tale risposta è un oggetto JSON vuoto.

Il seguente esempio di risposta mostra un utente con un tipo di home directory logico.

{ "Role": "arn:aws:iam::123456789012:role/transfer-access-role-efs", "HomeDirectoryType": "LOGICAL", "HomeDirectoryDetails":"[{\"Entry\":\"/\",\"Target\":\"/faa1a123\"}]", "PublicKeys":[""], "PosixProfile":{"Uid":65534,"Gid":65534} }

È possibile includere le politiche utente nella funzione Lambda in formato JSON. Per ulteriori informazioni sulla configurazione delle politiche utente in Transfer Family, vedere. Gestione dei controlli di accesso

Funzione Lambda predefinita

Per implementare diverse strategie di autenticazione, modifica la funzione Lambda utilizzata dal gateway. Per aiutarti a soddisfare le esigenze della tua applicazione, puoi utilizzare il seguente esempio di funzioni Lambda in. Node.js Per ulteriori informazioni su Lambda, consulta la AWS Lambda Developer Guide o Building Lambda functions with. Node.js

Il seguente esempio di funzione Lambda utilizza il nome utente, la password (se si esegue l'autenticazione con password), l'ID del server, il protocollo e l'indirizzo IP del client. Puoi utilizzare una combinazione di questi input per cercare il tuo provider di identità e determinare se l'accesso deve essere accettato.

Nota

Se hai più protocolli abilitati per il tuo server e desideri fornire l'accesso utilizzando lo stesso nome utente su più protocolli, puoi farlo purché le credenziali specifiche del protocollo siano state impostate nel tuo provider di identità.

Per il File Transfer Protocol (FTP), consigliamo di mantenere credenziali separate da Secure Shell (SSH) File Transfer Protocol (SFTP) e File Transfer Protocol over SSL (FTPS). Consigliamo di mantenere credenziali separate per l'FTP perché, a differenza di SFTP e FTPS, l'FTP trasmette le credenziali in testo non crittografato. Isolando le credenziali FTP da SFTP o FTPS, se le credenziali FTP sono condivise o esposte, i carichi di lavoro che utilizzano SFTP o FTPS rimangono sicuri.

Questa funzione di esempio restituisce il ruolo e i dettagli logici della home directory, insieme alle chiavi pubbliche (se esegue l'autenticazione con chiave pubblica).

Quando si creano utenti gestiti dal servizio, si imposta la loro home directory, logica o fisica. Allo stesso modo, abbiamo bisogno dei risultati della funzione Lambda per trasmettere la struttura di directory fisica o logica desiderata dall'utente. I parametri impostati dipendono dal valore del campo. HomeDirectoryType

  • HomeDirectoryTypeimpostato suPATH: il HomeDirectory campo deve quindi essere un prefisso del bucket Amazon S3 assoluto o un percorso assoluto di Amazon EFS visibile agli utenti.

  • HomeDirectoryTypeset to LOGICAL — Non impostare un campo. HomeDirectory Invece, impostiamo un HomeDirectoryDetails campo che fornisce le Entry/Target mappature desiderate, simili ai valori descritti nel HomeDirectoryDetails parametro per gli utenti gestiti dal servizio.

Le funzioni di esempio sono elencate in. Esempio di funzioni Lambda

Funzione Lambda da utilizzare con AWS Secrets Manager

Per AWS Secrets Manager utilizzarla come provider di identità, puoi utilizzare la funzione Lambda nel modello di esempio CloudFormation . La funzione Lambda interroga il servizio Secrets Manager con le tue credenziali e, in caso di successo, restituisce un segreto designato. Per ulteriori informazioni su Secrets Manager, consultare la Guida per l'utente di AWS Secrets Manager.

Per scaricare un CloudFormation modello di esempio che utilizza questa funzione Lambda, accedi al bucket Amazon S3 fornito da. AWS Transfer Family

Miglioramenti al CloudFormation modelli

Sono stati apportati miglioramenti all'interfaccia API Gateway ai CloudFormation modelli pubblicati. I modelli ora utilizzano BASE64-encoded le password con l'API Gateway. Le distribuzioni esistenti continuano a funzionare senza questo miglioramento, ma non consentono password con caratteri diversi dal set di caratteri di base US-ASCII .

Le modifiche al modello che abilitano questa funzionalità sono le seguenti:

  • La GetUserConfigRequest AWS::ApiGateway::Method risorsa deve avere questo RequestTemplates codice (la riga in corsivo è la riga aggiornata)

    RequestTemplates: application/json: | { "username": "$util.urlDecode($input.params('username'))", "password": "$util.escapeJavaScript($util.base64Decode($input.params('PasswordBase64'))).replaceAll("\\'","'")", "protocol": "$input.params('protocol')", "serverId": "$input.params('serverId')", "sourceIp": "$input.params('sourceIp')" }
  • La RequestParameters forma della GetUserConfig risorsa deve essere modificata per utilizzare l'PasswordBase64intestazione (la riga in corsivo è la riga aggiornata):

    RequestParameters: method.request.header.PasswordBase64: false method.request.querystring.protocol: false method.request.querystring.sourceIp: false
Per verificare se il modello per il tuo stack è l'ultimo
  1. Apri la CloudFormation console all'indirizzo https://console.aws.amazon.com/cloudformation.

  2. Dall'elenco delle pile, scegli la tua pila.

  3. Dal pannello dei dettagli, scegli la scheda Modello.

  4. Cerca quanto segue:

    • Cerca RequestTemplates e assicurati di avere questa riga:

      "password": "$util.escapeJavaScript($util.base64Decode($input.params('PasswordBase64'))).replaceAll("\\'","'")",
    • Cerca RequestParameters e assicurati di avere questa riga:

      method.request.header.PasswordBase64: false

Se non vedi le righe aggiornate, modifica il tuo stack. Per dettagli su come aggiornare CloudFormation lo stack, consulta Modificare un modello di stack nella AWS CloudFormation; Guida per l'utente.