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

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

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

Limitazioni se utilizzi un Gateway per integrare il tuo provider di identità API

  • Questa configurazione non supporta domini personalizzati.

  • Questa configurazione non supporta un API gateway URL privato.

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

Autenticazione tramite un metodo Gateway API

È possibile creare un metodo API Gateway da utilizzare come provider di identità per Transfer Family. Questo approccio offre un modo estremamente sicuro per creare e fornireAPIs. Con API Gateway, è possibile creare un HTTPS endpoint in modo che tutte le API chiamate in arrivo vengano trasmesse con maggiore sicurezza. Per ulteriori dettagli sul servizio API Gateway, consulta la APIGateway Developer Guide.

APIGateway offre un metodo di autorizzazione denominatoAWS_IAM, che offre 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 Gateway. API API

Per utilizzare il metodo API Gateway come provider di identità personalizzato per Transfer Family, abilitatelo IAM per il metodo API Gateway. Come parte di questo processo, fornisci a Transfer Family un IAM ruolo con le autorizzazioni per 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 HTTPS richieste HTTP e inoltrate a un Amazon API Gateway. Per informazioni dettagliate, consultare Aggiungi un firewall per applicazioni Web.

Per utilizzare il metodo API Gateway per l'autenticazione personalizzata con Transfer Family
  1. Crea uno AWS CloudFormation stack. Per farlo:

    Nota

    I modelli dello stack sono stati aggiornati per utilizzare password con BASE64 codifica: per i dettagli, consulta. Miglioramenti ai modelli AWS CloudFormation

    1. Apri la console in AWS CloudFormation /cloudformazione. https://console.aws.amazon.com

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

    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.

      • Modello di stack di base

        Per impostazione predefinita, il metodo API Gateway viene utilizzato come provider di identità personalizzato per autenticare un singolo utente in un singolo server utilizzando una chiave o una password codificata SSH (Secure Shell). Dopo la distribuzione, puoi modificare il codice della funzione Lambda per fare qualcosa di diverso.

      • AWS Secrets Manager modello di pila

        Per impostazione predefinita, il metodo API Gateway si autentica in base a una voce del formato in Secrets Manager. aws/transfer/server-id/username Inoltre, il segreto deve contenere le coppie chiave-valore per tutte le proprietà utente restituite a Transfer Family. Dopo la distribuzione, puoi modificare il codice della funzione Lambda per fare qualcosa di diverso. Per ulteriori informazioni, consulta il post del blog Abilita l'autenticazione tramite password per l' AWS Transfer Family utilizzo AWS Secrets Manager.

      • Modello di stack Okta

        Il tuo metodo API Gateway si integra con Okta come provider di identità personalizzato in Transfer Family. Per ulteriori informazioni, consulta il post del blog Utilizzo di Okta come provider di identità con. AWS Transfer Family

    L'implementazione di uno di questi stack è il modo più semplice per integrare un provider di identità personalizzato nel flusso di lavoro Transfer Family. Ogni stack utilizza la funzione Lambda per supportare API il metodo basato su API Gateway. Puoi quindi utilizzare il tuo API metodo 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 aver distribuito lo stack, puoi visualizzarne i dettagli nella scheda Output della console. CloudFormation Questi dettagli includono l'Amazon Resource Name (ARN) ARN dello stack, il IAM ruolo creato dallo stack e URL il 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 di richieste e 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 CloudWatch API registrazione 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 il modello API di base di Transfer Custom Identity Provider generato dal AWS CloudFormation modello. Potrebbe essere necessario selezionare la regione per visualizzare i gateway.

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

      APIdettagli di configurazione, che mostrano i parametri di configurazione del metodo per Request Paths e URL Query String.

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

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

    Dopo che il metodo API Gateway è stato distribuito correttamente, visualizzane le prestazioni in Stages > Stage details, come mostrato nella schermata seguente.

    Nota

    Copia l'URLindirizzo Invoke visualizzato nella parte superiore dello schermo. Potresti averne bisogno per il passaggio successivo.

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

  5. Una Transfer Family avrebbe dovuto essere creata per te quando hai creato lo stack. In caso contrario, configura il 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 il API Gateway scelto per la connessione al tuo provider di identità.
    2. Nella casella di URL testo Fornisci un Amazon API Gateway, incolla l'URLindirizzo Invoke dell'endpoint API Gateway che hai creato nel passaggio 3 di questa procedura.

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

      Il ruolo di invocazione contiene il nome AWS 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 i dettagli sui passaggi rimanenti per la creazione di un server, consultaConfigurazione di un endpoint SFTPFTPS, o server 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 di/servers/serverId/users/username/config. I username valori serverId and provengono dal percorso delle RESTful risorse. Inoltre, aggiungete sourceIp e protocol come parametri della stringa di URL query nella richiesta del metodo, come mostrato nell'immagine seguente.

La schermata Risorse del API Gateway che 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, A-Z, 0—9, trattino basso (_), trattino (-), punto (.) e segno di chiocciola (@). Tuttavia, il nome utente non può iniziare con un trattino (-), un punto (.) o un segno di chiavetta (@).

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

Quando utilizzi un provider di identità per autenticare e autorizzare gli utenti finali, oltre a convalidare le loro credenziali, puoi 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 tuoi bucket S3 o nel tuo EFS file system Amazon siano accessibili tramite i protocolli supportati solo da indirizzi IP che hai specificato come affidabili. Per abilitare questa funzionalità, devi includerla sourceIp nella stringa Query.

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

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

Esempio di risposta di Amazon S3

Il corpo della risposta di esempio è un JSON documento 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": "/bucketName/path/to/home/directory" }
Nota

La policy viene salvata JSON come stringa. Per esempio:

"Policy": "{ \"Version\": \"2012-10-17\", \"Statement\": [ {\"Condition\": {\"StringLike\": {\"s3:prefix\": [\"user/*\", \"user/\"]}}, \"Resource\": \"arn:aws:s3:::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\"}] }"

Il seguente esempio di risposta mostra che un utente ha un tipo di home directory logica.

{ "Role": "arn:aws:iam::123456789012:role/transfer-access-role-s3", "HomeDirectoryType":"LOGICAL", "HomeDirectoryDetails":"[{\"Entry\":\"/\",\"Target\":\"/MY-HOME-BUCKET\"}]", "PublicKeys":[""] }
EFSEsempio di risposta Amazon

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

{ "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 SSH pubbliche. Se un utente non può essere autenticato, ad esempio, se la password non è corretta, il metodo dovrebbe restituire una risposta senza Role set. Un esempio di tale risposta è un JSON oggetto vuoto.

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

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

È possibile includere politiche utente nella funzione Lambda in JSON formato. Per ulteriori informazioni sulla configurazione delle politiche utente in Transfer Family, vedereGestione 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 le funzioni Lambda di esempio seguenti in Node.js. Per ulteriori informazioni su Lambda, consulta la AWS Lambda Developer Guide o Building Lambda functions with Node.js.

L'esempio seguente della funzione Lambda utilizza il nome utente, la password (se si esegue l'autenticazione tramite 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 abilitato più protocolli 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 configurate nel tuo provider di identità.

Per File Transfer Protocol (FTP), consigliamo di mantenere credenziali separate da Secure Shell (SSH) File Transfer Protocol (SFTP) e File Transfer Protocol over SSL (FTPS). Si consiglia di mantenere credenziali separate FTP perché, a differenza di SFTP eFTPS, FTP trasmette le credenziali in formato non crittografato. Isolando FTP le credenziali da SFTP oFTPS, se le FTP credenziali sono condivise o esposte, i carichi di lavoro utilizzano o rimangono sicuri. SFTP FTPS

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 dai servizi, si imposta la loro home directory, logica o fisica. Allo stesso modo, abbiamo bisogno dei risultati della funzione Lambda per comunicare la struttura di directory fisica o logica desiderata dall'utente. I parametri impostati dipendono dal valore per HomeDirectoryTypecampo.

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

  • HomeDirectoryTypeimpostato su LOGICALNon impostare un campo. HomeDirectory Invece, impostiamo un HomeDirectoryDetails campo che fornisce le mappature Entry/Target desiderate, simili ai valori descritti in HomeDirectoryDetailsparametro per gli utenti gestiti dal servizio.

Le funzioni di esempio sono elencate in. Esempi 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 AWS 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 AWS CloudFormation modello di esempio che utilizza questa funzione Lambda, vai al bucket Amazon S3 fornito da. AWS Transfer Family

Miglioramenti ai modelli AWS CloudFormation

Sono stati apportati miglioramenti all'interfaccia API Gateway ai CloudFormation modelli pubblicati. I modelli ora utilizzano password BASE64 codificate con il Gateway. API Le distribuzioni esistenti continuano a funzionare anche senza questo miglioramento, ma non consentono l'utilizzo di password con caratteri diversi dal set di caratteri di base degli Stati Uniti. ASCII

Le modifiche nel 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')" }
  • Il comando RequestParameters for the GetUserConfig resource deve cambiare per utilizzare l'PasswordBase64header (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 è il più recente
  1. Apri la AWS CloudFormation console in https://console.aws.amazon.com/cloudformation.

  2. Dall'elenco degli stack, scegli il tuo stack.

  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 lo stack. Per i dettagli su come aggiornare lo AWS CloudFormation stack, consulta Modificare un modello di stack nella; Guida per l'AWS CloudFormation utente.