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 AWS Lambda per integrare il proprio provider di identità
Crea una AWS Lambda funzione che si connetta al tuo provider di identità personalizzato. Puoi utilizzare qualsiasi provider di identità personalizzato, come Okta, Secrets Manager OneLogin, o un data store personalizzato che includa la logica di autorizzazione e autenticazione.
Nota
Prima di creare un server Transfer Family che utilizza Lambda come provider di identità, è necessario creare la funzione. Per un esempio di funzione Lambda, consulta Esempi di funzioni Lambda. In alternativa, puoi distribuire uno CloudFormation stack che utilizza uno dei. Modelli di funzioni Lambda Inoltre, assicurati che la tua funzione Lambda utilizzi una politica basata sulle risorse che si affidi a Transfer Family. Per un esempio di policy, consulta Policy Lambda basata sulle risorse.
-
Apri la AWS Transfer Family console
. -
Scegli Crea server per aprire la pagina Crea server. Per Scegli un provider di identità, scegli Custom Identity Provider, come mostrato nella schermata seguente.
Nota
La scelta dei metodi di autenticazione è disponibile solo se abiliti SFTP come uno dei protocolli per il tuo server Transfer Family.
-
Assicurati che il valore predefinito, Usa AWS Lambda per connettere il tuo provider di identità, sia selezionato.
-
Per AWS Lambda la funzione, scegli il nome della tua funzione Lambda.
-
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.
Policy Lambda basata sulle risorse
È necessario disporre di una politica che faccia riferimento al server Transfer Family e a ARNs Lambda. Ad esempio, puoi utilizzare la seguente politica con la funzione Lambda che si connette al tuo provider di identità. La policy viene salvata sotto JSON forma di stringa.
"Policy": "{ "Version": "2012-10-17", "Id": "default", "Statement": [ { "Sid": "AllowTransferInvocation", "Effect": "Allow", "Principal": { "Service": "transfer.amazonaws.com" }, "Action": "lambda:InvokeFunction", "Resource": "arn:aws:transfer:
region
:account-id
:function:my-lambda-auth-function
", "Condition": { "ArnLike": { "AWS:SourceArn": "arn:aws:transfer:region
:account-id
:server/server-id
" } } } ] }"
Nota
Nella politica di esempio precedente, sostituisci ogni user input
placeholder
con le tue informazioni.
Struttura del messaggio di evento
La struttura dei messaggi di evento dal SFTP server inviati alla funzione Lambda dell'autorizzatore per una IDP personalizzazione è la seguente.
{ 'username': 'value', 'password': 'value', 'protocol': 'SFTP', 'serverId': 's-abcd123456', 'sourceIp': '192.168.0.100' }
Dove username
e password
sono i valori delle credenziali di accesso inviate al server.
Ad esempio, si immette il seguente comando per connettersi:
sftp bobusa@server_hostname
Ti viene quindi richiesto di inserire la password:
Enter password: mysecretpassword
Puoi verificarlo dalla tua funzione Lambda stampando l'evento passato dall'interno della funzione Lambda. Dovrebbe essere simile al seguente blocco di testo.
{ 'username': 'bobusa', 'password': 'mysecretpassword', 'protocol': 'SFTP', 'serverId': 's-abcd123456', 'sourceIp': '192.168.0.100' }
La struttura degli eventi è simile per FTP eFTPS: l'unica differenza è che i valori vengono utilizzati per il protocol
parametro, anzichéSFTP.
Funzioni Lambda per l'autenticazione
Per implementare diverse strategie di autenticazione, modifica la funzione Lambda. Per aiutarti a soddisfare le esigenze della tua applicazione, puoi implementare uno CloudFormation stack. Per ulteriori informazioni su Lambda, consulta la AWS Lambda Developer Guide o Building Lambda functions with Node.js.
Argomenti
Modelli di funzioni Lambda
È possibile distribuire uno AWS CloudFormation stack che utilizza una funzione Lambda per l'autenticazione. Forniamo diversi modelli che autenticano e autorizzano gli utenti utilizzando le credenziali di accesso. Puoi modificare questi modelli o AWS Lambda codici per personalizzare ulteriormente l'accesso degli utenti.
Nota
È possibile creare un AWS Transfer Family server FIPS abilitato AWS CloudFormation specificando una politica di sicurezza FIPS abilitata nel modello. Le politiche di sicurezza disponibili sono descritte in Politiche di sicurezza per AWS Transfer Family
Per creare uno AWS CloudFormation stack da utilizzare per l'autenticazione
-
Apri la AWS CloudFormation console in https://console.aws.amazon.com/cloudformazione.
-
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
-
Utilizza uno dei seguenti modelli per creare una funzione Lambda da utilizzare per l'autenticazione in Transfer Family.
-
Modello di pila classico (Amazon Cognito)
Un modello di base per la creazione di un AWS Lambda file da utilizzare come provider di identità personalizzato in. AWS Transfer Family Si autentica con Amazon Cognito per l'autenticazione basata su password e le chiavi pubbliche vengono restituite da un bucket Amazon S3 se viene utilizzata l'autenticazione basata su chiave pubblica. Dopo la distribuzione, puoi modificare il codice della funzione Lambda per fare qualcosa di diverso.
-
AWS Secrets Manager modello di pila
Un modello di base che si utilizza AWS Lambda con un AWS Transfer Family server per integrare Secrets Manager come provider di identità. Si autentica in base a una voce AWS 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.server-id
/username
-
Modello stack Okta: un modello
di base che utilizza AWS Lambda un AWS Transfer Family server per integrare Okta come provider di identità personalizzato. -
Modello di stack Okta-MFA: un modello
di base che viene utilizzato AWS Lambda con un AWS Transfer Family server per integrare Okta, con autenticazione, come provider di identità personalizzato. MultiFactor -
Modello di Azure Active Directory
: i dettagli per questo stack sono descritti nel post del blog Authenticating to with Azure Active Directory and. AWS Transfer FamilyAWS Lambda
Dopo aver distribuito lo stack, puoi visualizzarne i dettagli nella scheda Output della console. CloudFormation
L'implementazione di uno di questi stack è il modo più semplice per integrare un provider di identità personalizzato nel flusso di lavoro Transfer Family.
-
Valori Lambda validi
La tabella seguente descrive i dettagli dei valori che Transfer Family accetta per le funzioni Lambda utilizzate per i provider di identità personalizzati.
Valore | Descrizione | Richiesto |
---|---|---|
|
Speciifica l'Amazon Resource Name (ARN) del IAM ruolo che controlla l'accesso degli utenti al bucket Amazon S3 o al file system Amazon. EFS Le policy associate a questo ruolo determinano il livello di accesso che desideri fornire ai tuoi utenti durante il trasferimento di file da e verso il tuo file system Amazon S3 o EFS Amazon. Il IAM ruolo deve contenere anche una relazione di fiducia che consenta al server di accedere alle tue risorse per soddisfare le richieste di trasferimento degli utenti. Per i dettagli su come stabilire una relazione di fiducia, vedere. Per stabilire una relazione di trust |
Richiesto |
|
L'POSIXidentità completa, inclusi ID utente ( |
Necessario per lo storage di EFS backup di Amazon |
|
Un elenco di valori di chiave SSH pubblica validi per questo utente. Un elenco vuoto implica che non si tratta di un accesso valido. Non deve essere restituito durante l'autenticazione della password. |
Facoltativo |
|
Una politica di sessione per l'utente in modo da poter utilizzare lo stesso IAM ruolo tra più utenti. Questa policy definisce gli ambiti di accesso degli utenti alle porzioni dei loro bucket di Amazon S3. |
Facoltativo |
|
Il tipo di directory (cartella) di destinazione in cui deve trovarsi la directory home degli utenti quando accedono al server.
|
Facoltativo |
|
Mappature logiche delle directory che specificano quali percorsi e chiavi di EFS Amazon S3 o Amazon devono essere visibili all'utente e in che modo desideri renderli visibili. È necessario specificare la |
Obbligatorio se |
|
La directory di destinazione di un utente quando accede al server utilizzando il client. |
Facoltativo |
Nota
HomeDirectoryDetails
è una rappresentazione in formato stringa di una JSON mappa. Questo è in contrasto conPosixProfile
, che è un vero oggetto della JSON mappa e PublicKeys
che è una JSON matrice di stringhe. Vedi gli esempi di codice per i dettagli specifici della lingua.
Esempi di funzioni Lambda
Questa sezione presenta alcuni esempi di funzioni Lambda, sia in NodeJS che in Python.
Nota
In questi esempi, i dettagli relativi a utente, ruolo, POSIX profilo, password e home directory sono tutti esempi e devono essere sostituiti con i valori effettivi.
Verifica della configurazione
Dopo aver creato il tuo provider di identità personalizzato, dovresti testare la configurazione.
Se l'autenticazione dell'utente ha esito positivo, il test restituisce una StatusCode: 200
HTTP risposta, una stringa vuota Message: ""
(che altrimenti conterrebbe un motivo dell'errore) e un campo. Response
Nota
Nell'esempio di risposta riportato di seguito, il Response
campo è un JSON oggetto che è stato «stringato» (convertito in una JSON stringa semplice che può essere utilizzata all'interno di un programma) e contiene i dettagli dei ruoli e delle autorizzazioni dell'utente.
{ "Response":"{\"Policy\":\"{\\\"Version\\\":\\\"2012-10-17\\\",\\\"Statement\\\":[{\\\"Sid\\\":\\\"ReadAndListAllBuckets\\\",\\\"Effect\\\":\\\"Allow\\\",\\\"Action\\\":[\\\"s3:ListAllMybuckets\\\",\\\"s3:GetBucketLocation\\\",\\\"s3:ListBucket\\\",\\\"s3:GetObjectVersion\\\",\\\"s3:GetObjectVersion\\\"],\\\"Resource\\\":\\\"*\\\"}]}\",\"Role\":\"arn:aws:iam::000000000000:role/MyUserS3AccessRole\",\"HomeDirectory\":\"/\"}", "StatusCode": 200, "Message": "" }