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 un'API RESTful per 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 relative all'utilizzo di un API Gateway per l'integrazione del 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 usare Lambda come provider di identità, senza API Gateway. Per informazioni dettagliate, vedi Utilizzo AWS Lambda per integrare il proprio 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 offre un modo estremamente sicuro per creare e fornire API. Con API Gateway, puoi creare un endpoint HTTPS in modo che tutte le chiamate API in entrata vengano trasmesse con maggiore sicurezza. Per ulteriori dettagli sul servizio API Gateway, consulta la API Gateway Developer Guide.
API Gateway 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 raggiungere il metodo API Gateway dell'API.
Per utilizzare il tuo metodo API Gateway come provider di identità personalizzato per Transfer Family, abilita IAM per il tuo metodo API Gateway. Come parte di questo processo, fornisci a un ruolo IAM le autorizzazioni affinché Transfer Family utilizzi 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.
Per utilizzare il metodo API Gateway per l'autenticazione personalizzata con Transfer Family
-
Crea uno AWS CloudFormation stack. Per farlo:
Nota
I modelli di stack sono stati aggiornati per utilizzare password con codifica Base64: per i dettagli, vedere. Miglioramenti ai modelli AWS CloudFormation
-
AWS CloudFormation Apri la console all'indirizzo https://console.aws.amazon.com/cloudformation.
-
Segui le istruzioni per distribuire uno AWS CloudFormation stack da un modello esistente in Selezione di un modello di stack nella Guida per l'AWS CloudFormation utente.
-
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.
-
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 SSH (Secure Shell) codificata. 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 in Secrets Manager del formato.
aws/transfer/
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 Managerserver-id
/username
. -
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 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 aver distribuito lo stack, puoi visualizzarne i dettagli nella scheda Output 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 nuovo gateway.
Nota
Se utilizzi l'opzione 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 registrazione delle CloudWatch API in API Gateway nella API Gateway Developer Guide.
-
-
Controlla la configurazione del metodo API Gateway per il tuo server. Per farlo:
-
Aprire la console Gateway API all'indirizzo https://console.aws.amazon.com/apigateway/
. -
Scegli l'API del modello di base di Transfer Custom Identity Provider generata dal AWS CloudFormation modello. Potrebbe essere necessario selezionare la regione per visualizzare i gateway.
-
Nel riquadro Risorse, scegli GET. La schermata seguente mostra la configurazione corretta del metodo.
A questo punto, il gateway API è pronto per essere distribuito.
-
-
Per Azioni, scegli Deploy API. 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'indirizzo URL di Invoke visualizzato nella parte superiore dello schermo. Potresti averne bisogno per il passaggio successivo.
-
Apri la AWS Transfer Family console all'indirizzo https://console.aws.amazon.com/transfer/
. -
Una Transfer Family avrebbe dovuto essere creata per te quando hai creato lo stack. In caso contrario, configura il server seguendo questi passaggi.
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.
-
Nella casella di testo Fornisci un URL di Amazon API Gateway, incolla l'indirizzo URL Invoke dell'endpoint API Gateway che hai creato nel passaggio 3 di questa procedura.
-
Per Ruolo, scegli il ruolo IAM creato dal AWS CloudFormation modello. Questo ruolo consente a Transfer Family di richiamare il metodo del gateway API.
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
-
Compila le caselle rimanenti, quindi scegli Crea server. Per i dettagli 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 di/servers/
. I serverId
/users/username
/config
valori username
and provengono dal percorso di risorse RESTful. Inoltre, aggiungete serverId
sourceIp
e protocol
come parametri della stringa di query URL nella richiesta del metodo, come mostrato nell'immagine seguente.
![La schermata Risorse dell'API Gateway che mostra i dettagli del GET metodo.](images/apig-config-method-request.png)
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 bucket S3 o nel file system Amazon EFS 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
valore nel percorso della risorsa RESTful.protocol
Il metodo API Gateway deve sempre restituire il codice di stato HTTP200
. Qualsiasi altro codice di stato HTTP indica che si è verificato un errore durante l'accesso all'API.
Esempio di risposta di Amazon S3
Il corpo della risposta di esempio è un documento JSON del seguente modulo per Amazon S3.
{ "Role": "IAM role with configured S3 permissions", "PublicKeys": [ "ssh-rsa
public-key1
", "ssh-rsapublic-key2
" ], "Policy": "STS Assume role session policy", "HomeDirectory": "/DOC-EXAMPLE-BUCKET/path
/to
/home
/directory
" }
Nota
La policy viene salvata in formato JSON come stringa. Per esempio:
"Policy": "{ \"Version\": \"2012-10-17\", \"Statement\": [ {\"Condition\": {\"StringLike\": {\"s3:prefix\": [\"user/*\", \"user/\"]}}, \"Resource\": \"arn:aws:s3:::DOC-EXAMPLE-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\":\"/DOC-EXAMPLE-BUCKET1\"}]", "PublicKeys":[""] }
Esempio di risposta Amazon EFS
Il corpo della risposta di esempio è un documento JSON del seguente modulo per Amazon EFS.
{ "Role": "
IAM role with configured EFS permissions
", "PublicKeys": [ "ssh-rsapublic-key1
", "ssh-rsapublic-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 set. Role
Un esempio di tale risposta è un oggetto JSON 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 formato JSON. 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). Consigliamo di mantenere credenziali separate per FTP perché, a differenza di SFTP e FTPS, 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 a 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 del campo. HomeDirectoryType
-
HomeDirectoryType
impostato suPATH
: ilHomeDirectory
campo deve quindi essere un prefisso assoluto del bucket Amazon S3 o un percorso assoluto di Amazon EFS visibile ai tuoi utenti. -
HomeDirectoryType
impostato suLOGICAL
— Non impostare un campo.HomeDirectory
Invece, impostiamo unHomeDirectoryDetails
campo che fornisce le mappature Entry/Target desiderate, simili ai valori descritti nel 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
Miglioramenti ai modelli AWS CloudFormation
Sono stati apportati miglioramenti all'interfaccia API Gateway ai CloudFormation modelli pubblicati. I modelli ora utilizzano password con codifica Base64 con API Gateway. Le distribuzioni esistenti continuano a funzionare anche senza questo miglioramento, ma non consentono l'utilizzo di password con caratteri diversi dal set di caratteri US-ASCII di base.
Le modifiche nel modello che abilitano questa funzionalità sono le seguenti:
-
La
GetUserConfigRequest AWS::ApiGateway::Method
risorsa deve avere questoRequestTemplates
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 theGetUserConfig
resource deve cambiare per utilizzare l'PasswordBase64
header (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
Apri la AWS CloudFormation console all'indirizzo https://console.aws.amazon.com/cloudformation
. Dall'elenco degli stack, scegli il tuo stack.
Dal pannello dei dettagli, scegli la scheda Modello.
-
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.