Utilizzo di directory logiche per semplificare le strutture di directory Transfer Family - 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 directory logiche per semplificare le strutture di directory Transfer Family

Per semplificare la struttura delle directory AWS Transfer Family del server, è possibile utilizzare le directory logiche. Con le directory logiche, puoi creare una struttura di directory virtuale che utilizza nomi intuitivi che gli utenti utilizzano quando si connettono al tuo bucket Amazon S3 o al file system Amazon. EFS Quando utilizzi le directory logiche, puoi evitare di divulgare percorsi di directory assoluti, nomi di bucket Amazon S3 EFS e nomi di file system agli utenti finali.

Nota

Sebbene dipenda dall'utilizzo delle politiche di sessione e da altri requisiti interni, in genere non sono necessarie sia le politiche di sessione che le directory logiche per garantire che gli utenti accedano solo ai file a cui sono destinati. Se state configurando directory logiche, non create anche politiche di sessione, poiché avere entrambe può causare errori di autorizzazione negata.

È possibile utilizzare le directory logiche per impostare la directory principale dell'utente nella posizione desiderata all'interno della gerarchia di archiviazione, eseguendo una cosiddetta operazione. chroot In questa modalità, gli utenti non sono in grado di accedere a una directory esterna alla home o alla directory principale configurata per loro.

Ad esempio, sebbene un utente Amazon S3 sia stato limitato al solo accesso/mybucket/home/${transfer:UserName}, alcuni client consentono agli utenti di attraversare una cartella fino a. /mybucket/home In questa situazione, l'utente torna alla home directory desiderata solo dopo essersi disconnesso e aver nuovamente effettuato il login al server Transfer Family. L'esecuzione di un'chrootoperazione può impedire il verificarsi di questa situazione.

È possibile creare una struttura di directory personalizzata tra bucket e prefissi. Questa funzionalità è utile se hai un flusso di lavoro che prevede una struttura di directory specifica che non puoi replicare tramite i prefissi dei bucket. Puoi anche collegarti a più posizioni non contigue all'interno di Amazon S3, in modo simile alla creazione di un collegamento simbolico in un file system Linux in cui il percorso della directory fa riferimento a una posizione diversa nel file system.

Mappature logiche delle directory FILE

Il tipo di HomeDirectoryMapEntry dati ora include un Type parametro. Prima che questo parametro esistesse, avresti potuto creare una mappatura logica di directory in cui la destinazione era un file. Se in precedenza è stato creato uno di questi tipi di mappature di directory logiche, è necessario Type impostarlo in modo esplicito suFILE, altrimenti tali mappature non funzioneranno correttamente in futuro.

Un modo per farlo è chiamare e impostare il to per UpdateUser API la mappatura esistenteType. FILE

Regole per l'utilizzo delle directory logiche

Prima di creare le mappature delle directory logiche, è necessario comprendere le seguenti regole:

  • In caso Entry "/" affermativo, è possibile avere una sola mappatura perché non sono consentiti percorsi sovrapposti.

  • Le directory logiche supportano mappature fino a 2,1 MB (per gli utenti gestiti dai servizi, questo limite è di 2.000 voci). Cioè, la struttura dati che contiene le mappature ha una dimensione massima di 2,1 MB. Se disponi di molte mappature, puoi calcolarne le dimensioni nel modo seguente:

    1. Scrivi una mappatura tipica nel formato{"Entry":"/entry-path","Target":"/target-path"}, dove entry-path e dove target-path sono i valori effettivi che utilizzerai.

    2. Conta i caratteri in quella stringa, quindi aggiungine uno (1).

    3. Moltiplica quel numero per il numero approssimativo di mappature che hai per il tuo server.

    Se il numero stimato nel passaggio 3 è inferiore a 2,1 MB, le mappature rientrano nel limite accettabile.

  • Le destinazioni possono utilizzare la ${transfer:UserName} variabile se il percorso del bucket o del file system è stato parametrizzato in base al nome utente.

  • Le destinazioni possono essere percorsi in diversi bucket o file system, ma è necessario assicurarsi che il ruolo mapped AWS Identity and Access Management (IAM) (il Role parametro nella risposta) fornisca l'accesso a tali bucket o file system.

  • Non specificate il HomeDirectory parametro, perché questo valore è implicito nelle Entry Target coppie quando utilizzate il LOGICAL valore per il parametro. HomeDirectoryType

  • Le destinazioni devono iniziare con un carattere forward slash (/), ma non utilizzare la barra finale (/) quando si specifica il. Target Ad esempio, /DOC-EXAMPLE-BUCKET/images è accettabile, ma non lo DOC-EXAMPLE-BUCKET/images è. /DOC-EXAMPLE-BUCKET/images/

  • Amazon S3 è un archivio di oggetti, il che significa che le cartelle sono un concetto virtuale e non esiste una vera gerarchia di directory. Se la tua applicazione esegue un'statoperazione da un client, tutto viene classificato come file quando utilizzi Amazon S3 per lo storage. Questo comportamento è descritto in Organizzazione degli oggetti nella console Amazon S3 utilizzando le cartelle nella Guida per l'utente di Amazon Simple Storage Service. Se la tua applicazione richiede che mostri stat con precisione se qualcosa è un file o una cartella, puoi utilizzare Amazon Elastic File System (AmazonEFS) come opzione di storage per i tuoi server Transfer Family.

  • Se stai specificando valori di directory logica per il tuo utente, il parametro che usi dipende dal tipo di utente:

    • Per gli utenti gestiti dal servizio, fornisci i valori della directory logica in. HomeDirectoryMappings

    • Per gli utenti di provider di identità personalizzati, fornisci i valori della directory logica in. HomeDirectoryDetails

Importante

A meno che tu non scelga di ottimizzare le prestazioni per le tue directory Amazon S3 (quando crei o aggiorni un server), la directory principale deve esistere all'avvio. Per Amazon S3, ciò significa che devi aver già creato un oggetto a zero byte che termina con una barra (/) per creare la cartella principale. Evitare questo problema è un motivo per prendere in considerazione l'ottimizzazione delle prestazioni di Amazon S3.

Implementazione di directory logiche e chroot

Per utilizzare le directory e le chroot funzionalità logiche, è necessario effettuare le seguenti operazioni:

Attiva le directory logiche per ogni utente. A tale scopo, imposta il HomeDirectoryType parametro su LOGICAL quando crei o aggiorni l'utente.

"HomeDirectoryType": "LOGICAL"

chroot

Perchroot, crea una struttura di directory composta da una singola Entry Target combinazione per ogni utente. La cartella principale è il Entry punto e la Target posizione nel bucket o nel file system a cui mappare.

Example for Amazon S3
[{"Entry": "/", "Target": "/mybucket/jane"}]
Example for Amazon EFS
[{"Entry": "/", "Target": "/fs-faa1a123/jane"}]

È possibile utilizzare un percorso assoluto come nell'esempio precedente oppure utilizzare una sostituzione dinamica del nome utente con${transfer:UserName}, come nell'esempio seguente.

[{"Entry": "/", "Target": "/mybucket/${transfer:UserName}"}]

Nell'esempio precedente, l'utente è bloccato nella propria directory principale e non può spostarsi più in alto nella gerarchia.

Struttura delle directory virtuali

Per una struttura di directory virtuale, puoi creare più Entry Target abbinamenti, con destinazioni ovunque nei bucket o nei file system S3, anche su più bucket o EFS file system, purché la mappatura dei IAM ruoli dell'utente disponga delle autorizzazioni per accedervi.

Nel seguente esempio di struttura virtuale, quando l'utente accede, si trova nella directory principale con le sottodirectory di AWS SFTP,, e. /pics /doc /reporting /anotherpath/subpath/financials

Nota

A meno che tu non scelga di ottimizzare le prestazioni per le tue directory Amazon S3 (quando crei o aggiorni un server), l'utente o un amministratore devono creare le directory se non esistono già. Evitare questo problema è un motivo per prendere in considerazione l'ottimizzazione delle prestazioni di Amazon S3.

Per AmazonEFS, è comunque necessario che l'amministratore crei le mappature logiche o la / directory.

[ {"Entry": "/pics", "Target": "/bucket1/pics"}, {"Entry": "/doc", "Target": "/bucket1/anotherpath/docs"}, {"Entry": "/reporting", "Target": "/reportingbucket/Q1"}, {"Entry": "/anotherpath/subpath/financials", "Target": "/reportingbucket/financials"}]

Nota

Puoi caricare file solo nelle cartelle specifiche che mappi. Ciò significa che nell'esempio precedente non è possibile caricare /anotherpath solo anotherpath/subpath anotherpath/subpath/financials nelle nostre directory. Inoltre, non è possibile eseguire la mappatura diretta su tali percorsi, poiché non sono consentiti percorsi sovrapposti.

Ad esempio, si supponga di creare le seguenti mappature:

{ "Entry": "/pics", "Target": "/mybucket/pics" }, { "Entry": "/doc", "Target": "/mybucket/mydocs" }, { "Entry": "/temp", "Target": "/mybucket" }

Puoi caricare file solo in quei bucket. La prima volta che ti connettisftp, verrai inserito nella directory principale,/. Se tenti di caricare un file in quella directory, il caricamento non riesce. I comandi seguenti mostrano una sequenza di esempio:

sftp> pwd Remote working directory: / sftp> put file Uploading file to /file remote open("/file"): No such file or directory

Per eseguire il caricamento su qualsiasidirectory/sub-directory, è necessario mappare in modo esplicito il percorso a. sub-directory

Per ulteriori informazioni sulla configurazione delle directory logiche e chroot per i vostri utenti, incluso un AWS CloudFormation modello che potete scaricare e utilizzare, vedete Simplify your AWS SFTP Structure with chroot and logical directories nel blog Storage. AWS

Esempio di configurazione delle directory logiche

In questo esempio, creiamo un utente e assegniamo due directory logiche. Il comando seguente crea un nuovo utente (per un server Transfer Family esistente) con directory logiche pics edoc.

aws transfer create-user --user-name marymajor-logical --server-id s-11112222333344445 --role arn:aws:iam::1234abcd5678:role/marymajor-role --home-directory-type LOGICAL \ --home-directory-mappings "[{\"Entry\":\"/pics\", \"Target\":\"/DOC-EXAMPLE-BUCKET1/pics\"}, {\"Entry\":\"/doc\", \"Target\":\"/DOC-EXAMPLE-BUCKET2/test/mydocs\"}]" \ --ssh-public-key-body file://~/.ssh/id_rsa.pub

Se marymajor è un utente esistente e il suo tipo di home directory èPATH, puoi cambiarlo LOGICAL con un comando simile a quello precedente.

aws transfer update-user --user-name marymajor-logical \ --server-id s-11112222333344445 --role arn:aws:iam::1234abcd5678:role/marymajor-role \ --home-directory-type LOGICAL --home-directory-mappings "[{\"Entry\":\"/pics\", \"Target\":\"/DOC-EXAMPLE-BUCKET1/pics\"}, \ {\"Entry\":\"/doc\", \"Target\":\"/DOC-EXAMPLE-BUCKET2/test/mydocs\"}]"

Tieni presente quanto segue:

  • Se le directory /DOC-EXAMPLE-BUCKET1/pics e /DOC-EXAMPLE-BUCKET2/test/mydocs io non esistono già, l'utente (o un amministratore) deve crearle.

  • Quando marymajor si connette al server ed esegue il ls -l comando, vede quanto segue:

    drwxr--r-- 1 - - 0 Mar 17 15:42 doc drwxr--r-- 1 - - 0 Mar 17 16:04 pics
  • marymajornon può creare file o directory a questo livello. Tuttavia, all'interno di pics anddoc, può aggiungere sottodirectory.

  • File che aggiunge pics e che doc vengono aggiunti rispettivamente ai percorsi /DOC-EXAMPLE-BUCKET1/pics di Amazon S3. /DOC-EXAMPLE-BUCKET2/test/mydocs

  • In questo esempio, specifichiamo due diversi bucket per illustrare questa possibilità. Tuttavia, è possibile utilizzare lo stesso bucket per diverse o tutte le directory logiche specificate per l'utente.

Configura le directory logiche per Amazon EFS

Se il tuo server Transfer Family utilizza AmazonEFS, la home directory dell'utente deve essere creata con accesso in lettura e scrittura prima che l'utente possa lavorare nella sua home directory logica. L'utente non può creare questa directory da solo, poiché non avrebbe le autorizzazioni per la mkdir sua home directory logica.

Se la directory home dell'utente non esiste e l'utente esegue un ls comando, il sistema risponde come segue:

sftp> ls remote readdir ("/"): No such file or directory

Un utente con accesso amministrativo alla directory principale deve creare la home directory logica dell'utente.

AWS Lambda Risposta personalizzata

Puoi utilizzare le directory logiche con una funzione Lambda che si connette al tuo provider di identità personalizzato. A tale scopo, nella funzione Lambda, si specificano i Target valori HomeDirectoryType as LOGICAL e add Entry and per il HomeDirectoryDetails parametro. Per esempio:

HomeDirectoryType: "LOGICAL" HomeDirectoryDetails: "[{\"Entry\": \"/\", \"Target\": \"/DOC-EXAMPLE-BUCKET/theRealFolder"}]"

Il codice seguente è un esempio di risposta riuscita da una chiamata di autenticazione Lambda personalizzata.

aws transfer test-identity-provider --server-id s-1234567890abcdef0 --user-name myuser { "Url": "https://a1b2c3d4e5.execute-api.us-east-2.amazonaws.com/prod/servers/s-1234567890abcdef0/users/myuser/config", "Message": "", "Response": "{\"Role\": \"arn:aws:iam::123456789012:role/bob-usa-role\",\"HomeDirectoryType\": \"LOGICAL\",\"HomeDirectoryDetails\": \"[{\\\"Entry\\\":\\\"/myhome\\\",\\\"Target\\\":\\\"/DOC-EXAMPLE-BUCKET/theRealFolder\\\"}]\",\"PublicKeys\": \"[ssh-rsa myrsapubkey]\"}", "StatusCode": 200 }
Nota

La "Url": riga viene restituita solo se si utilizza un metodo API Gateway come provider di identità personalizzato.