Menggunakan direktori logis untuk menyederhanakan struktur direktori Transfer Family - AWS Transfer Family

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Menggunakan direktori logis untuk menyederhanakan struktur direktori Transfer Family

Untuk menyederhanakan struktur direktori AWS Transfer Family server Anda, Anda dapat menggunakan direktori logis. Dengan direktori logis, Anda dapat membuat struktur direktori virtual yang menggunakan nama yang mudah digunakan yang dinavigasi pengguna saat mereka terhubung ke bucket Amazon S3 atau sistem file Amazon EFS Anda. Saat menggunakan direktori logis, Anda dapat menghindari pengungkapan jalur direktori absolut, nama bucket Amazon S3, dan nama sistem file EFS kepada pengguna akhir Anda.

catatan

Anda harus menggunakan kebijakan sesi sehingga pengguna akhir Anda hanya dapat melakukan operasi yang Anda izinkan untuk mereka lakukan.

Anda harus menggunakan direktori logis untuk membuat direktori virtual yang ramah pengguna untuk pengguna akhir Anda dan mengabstraksi nama bucket jauh. Pemetaan direktori logis hanya memungkinkan pengguna untuk mengakses jalur logis dan subdirektori yang ditunjuk, dan melarang jalur relatif yang melintasi akar logis.

Transfer Family memvalidasi setiap jalur yang mungkin menyertakan elemen relatif dan secara aktif memblokir jalur ini agar tidak diselesaikan sebelum kami meneruskan jalur ini ke Amazon S3; ini mencegah pengguna Anda bergerak melampaui pemetaan logisnya.

Meskipun Transfer Family mencegah pengguna akhir mengakses direktori di luar direktori logisnya, kami sarankan Anda juga menggunakan peran unik atau kebijakan sesi untuk menerapkan hak istimewa paling sedikit di tingkat penyimpanan.

Anda dapat menggunakan direktori logis untuk mengatur direktori root pengguna ke lokasi yang diinginkan dalam hierarki penyimpanan Anda, dengan melakukan apa yang dikenal sebagai chroot operasi. Dalam mode ini, pengguna tidak dapat menavigasi ke direktori di luar direktori home atau root yang telah Anda konfigurasi untuk mereka.

Misalnya, meskipun pengguna Amazon S3 telah dicakup untuk mengakses saja/mybucket/home/${transfer:UserName}, beberapa klien mengizinkan pengguna untuk melintasi folder ke. /mybucket/home Dalam situasi ini, pengguna kembali ke direktori home yang dimaksudkan hanya setelah keluar dari dan kembali ke server Transfer Family lagi. Melakukan chroot operasi dapat mencegah situasi ini terjadi.

Anda dapat membuat struktur direktori Anda sendiri di seluruh bucket dan awalan. Fitur ini berguna jika Anda memiliki alur kerja yang mengharapkan struktur direktori tertentu yang tidak dapat Anda tiru melalui awalan bucket. Anda juga dapat menautkan ke beberapa lokasi yang tidak berdekatan dalam Amazon S3, mirip dengan membuat tautan simbolis dalam sistem file Linux di mana jalur direktori Anda mereferensikan lokasi yang berbeda dalam sistem file.

Pemetaan FILE direktori logis

Tipe HomeDirectoryMapEntry data sekarang menyertakan Type parameter. Sebelum parameter ini ada, Anda bisa membuat pemetaan direktori logis di mana targetnya adalah file. Jika sebelumnya Anda telah membuat salah satu dari jenis pemetaan direktori logis ini, Anda harus secara eksplisit menyetelnya Type keFILE, atau pemetaan ini tidak akan berfungsi dengan benar di masa mendatang.

Salah satu cara untuk melakukannya adalah dengan memanggil UpdateUser API, dan mengatur Type ke FILE untuk pemetaan yang ada.

Aturan untuk menggunakan direktori logis

Sebelum Anda membangun pemetaan direktori logis Anda, Anda harus memahami aturan berikut:

  • EntryKapan"/", Anda hanya dapat memiliki satu pemetaan karena jalur yang tumpang tindih tidak diperbolehkan.

  • Direktori logis mendukung pemetaan hingga 2,1 MB (untuk pengguna yang dikelola layanan, batas ini adalah 2.000 entri). Artinya, struktur data yang berisi pemetaan memiliki ukuran maksimum 2,1 MB. Jika Anda memiliki banyak pemetaan, Anda dapat menghitung ukuran pemetaan Anda sebagai berikut:

    1. Tuliskan pemetaan khas dalam format{"Entry":"/entry-path","Target":"/target-path"}, di mana entry-path dan target-path merupakan nilai aktual yang akan Anda gunakan.

    2. Hitung karakter dalam string itu, lalu tambahkan satu (1).

    3. Kalikan angka itu dengan perkiraan jumlah pemetaan yang Anda miliki untuk server Anda.

    Jika jumlah yang Anda perkirakan pada langkah 3 kurang dari 2,1 MB, maka pemetaan Anda berada dalam batas yang dapat diterima.

  • Target dapat menggunakan ${transfer:UserName} variabel jika bucket atau jalur sistem file telah diparameterisasi berdasarkan nama pengguna.

  • Target dapat berupa jalur dalam bucket atau sistem file yang berbeda, tetapi Anda harus memastikan bahwa peran yang dipetakan AWS Identity and Access Management (IAM) (Roleparameter dalam respons) menyediakan akses ke bucket atau sistem file tersebut.

  • Jangan tentukan HomeDirectory parameternya, karena nilai ini tersirat oleh Entry Target pasangan saat Anda menggunakan LOGICAL nilai untuk HomeDirectoryType parameter tersebut.

  • Target harus dimulai dengan karakter garis miring (/), tetapi jangan gunakan garis miring ke depan (/) saat Anda menentukan. Target Misalnya, dapat /DOC-EXAMPLE-BUCKET/images diterima, tetapi DOC-EXAMPLE-BUCKET/images dan /DOC-EXAMPLE-BUCKET/images/ tidak.

  • Amazon S3 adalah toko objek, yang berarti folder adalah konsep virtual, dan tidak ada hierarki direktori yang sebenarnya. Jika aplikasi Anda mengeluarkan stat operasi dari klien, semuanya diklasifikasikan sebagai file saat Anda menggunakan Amazon S3 untuk penyimpanan. Perilaku ini dijelaskan dalam Mengatur objek di konsol Amazon S3 menggunakan folder di Panduan Pengguna Layanan Penyimpanan Sederhana Amazon. Jika aplikasi Anda mengharuskan untuk menunjukkan stat secara akurat apakah sesuatu adalah file atau folder, Anda dapat menggunakan Amazon Elastic File System (Amazon EFS) sebagai opsi penyimpanan untuk server Transfer Family Anda.

  • Jika Anda menentukan nilai direktori logis untuk pengguna Anda, parameter yang Anda gunakan bergantung pada jenis pengguna:

    • Untuk pengguna yang dikelola layanan, berikan nilai direktori logis di. HomeDirectoryMappings

    • Untuk pengguna penyedia identitas kustom, berikan nilai direktori logis diHomeDirectoryDetails.

penting

Kecuali Anda memilih untuk mengoptimalkan kinerja untuk direktori Amazon S3 Anda (saat Anda membuat atau memperbarui server), direktori root harus ada saat startup. Untuk Amazon S3, ini berarti Anda harus sudah membuat objek zero-byte yang diakhiri dengan garis miring maju (/) untuk membuat folder root. Menghindari masalah ini adalah alasan untuk mempertimbangkan mengoptimalkan kinerja Amazon S3.

Menerapkan direktori logis dan chroot

Untuk menggunakan direktori dan chroot fitur logis, Anda harus melakukan hal berikut:

Aktifkan direktori logis untuk setiap pengguna. Lakukan ini dengan menyetel HomeDirectoryType parameter LOGICAL saat Anda membuat atau memperbarui pengguna Anda.

"HomeDirectoryType": "LOGICAL"

chroot

Untukchroot, buat struktur direktori yang terdiri dari satu Entry dan Target pasangan untuk setiap pengguna. Folder root adalah Entry intinya, dan lokasi di bucket atau sistem file Anda untuk dipetakan. Target

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

Anda dapat menggunakan jalur absolut seperti pada contoh sebelumnya, atau Anda dapat menggunakan substitusi dinamis untuk nama pengguna dengan${transfer:UserName}, seperti pada contoh berikut.

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

Dalam contoh sebelumnya, pengguna dikunci ke direktori root mereka dan tidak dapat melintasi lebih tinggi dalam hierarki.

Struktur direktori virtual

Untuk struktur direktori virtual, Anda dapat membuat beberapa Entry Target pasangan, dengan target di mana saja di bucket S3 atau sistem file EFS Anda, termasuk di beberapa bucket atau sistem file, selama pemetaan peran IAM pengguna memiliki izin untuk mengaksesnya.

Dalam contoh struktur virtual berikut, ketika pengguna login ke AWS SFTP, mereka berada di direktori root dengan sub-direktori/pics,,, /doc dan. /reporting /anotherpath/subpath/financials

catatan

Kecuali Anda memilih untuk mengoptimalkan kinerja untuk direktori Amazon S3 Anda (saat Anda membuat atau memperbarui server), baik pengguna atau administrator perlu membuat direktori jika belum ada. Menghindari masalah ini adalah alasan untuk mempertimbangkan mengoptimalkan kinerja Amazon S3.

Untuk Amazon EFS, Anda masih memerlukan administrator untuk membuat pemetaan logis atau direktori. /

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

catatan

Anda hanya dapat mengunggah file ke folder tertentu yang Anda petakan. Ini berarti bahwa dalam contoh sebelumnya, Anda tidak dapat mengunggah ke /anotherpath atau anotherpath/subpath direktori; hanyaanotherpath/subpath/financials. Anda juga tidak dapat memetakan ke jalur tersebut secara langsung, karena jalur yang tumpang tindih tidak diperbolehkan.

Misalnya, asumsikan bahwa Anda membuat pemetaan berikut:

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

Anda hanya dapat mengunggah file ke bucket tersebut. Ketika Anda pertama kali terhubungsftp, Anda dijatuhkan ke direktori root,/. Jika Anda mencoba mengunggah file ke direktori itu, unggahan gagal. Perintah berikut menunjukkan urutan contoh:

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

Untuk mengunggah ke salah satudirectory/sub-directory, Anda harus secara eksplisit memetakan jalur ke file. sub-directory

Untuk informasi selengkapnya tentang mengonfigurasi direktori logis dan chroot untuk pengguna Anda, termasuk AWS CloudFormation templat yang dapat Anda unduh dan gunakan, lihat Menyederhanakan Struktur AWS SFTP Anda dengan direktori chroot dan logis di Blog Penyimpanan. AWS

Konfigurasikan contoh direktori logis

Dalam contoh ini, kami membuat pengguna dan menetapkan dua direktori logis. Perintah berikut membuat pengguna baru (untuk server Transfer Family yang sudah ada) dengan direktori logis pics dandoc.

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

Jika marymajor adalah pengguna yang sudah ada dan jenis direktori home nyaPATH, Anda dapat mengubahnya LOGICAL dengan perintah yang sama seperti yang sebelumnya.

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\"}]"

Perhatikan hal berikut:

  • Jika direktori /DOC-EXAMPLE-BUCKET1/pics dan /DOC-EXAMPLE-BUCKET2/test/mydocs belum ada, pengguna (atau administrator) perlu membuatnya.

  • Ketika marymajor terhubung ke server, dan menjalankan ls -l perintah, Mary melihat yang berikut:

    drwxr--r-- 1 - - 0 Mar 17 15:42 doc drwxr--r-- 1 - - 0 Mar 17 16:04 pics
  • marymajortidak dapat membuat file atau direktori apa pun pada level ini. Namun, di dalam pics dandoc, dia dapat menambahkan sub-direktori.

  • File yang ditambahkan Mary pics dan doc ditambahkan ke jalur Amazon S3 /DOC-EXAMPLE-BUCKET1/pics dan /DOC-EXAMPLE-BUCKET2/test/mydocs masing-masing.

  • Dalam contoh ini, kami menentukan dua ember berbeda untuk mengilustrasikan kemungkinan itu. Namun, Anda dapat menggunakan bucket yang sama untuk beberapa atau semua direktori logis yang Anda tentukan untuk pengguna.

Konfigurasikan direktori logis untuk Amazon EFS

Jika server Transfer Family Anda menggunakan Amazon EFS, direktori home untuk pengguna harus dibuat dengan akses baca dan tulis sebelum pengguna dapat bekerja di direktori home logisnya. Pengguna tidak dapat membuat direktori ini sendiri, karena mereka akan kekurangan izin untuk mkdir direktori home logis mereka.

Jika direktori home pengguna tidak ada, dan mereka menjalankan ls perintah, sistem merespons sebagai berikut:

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

Seorang pengguna dengan akses administratif ke direktori induk perlu membuat direktori home logis pengguna.

AWS Lambda Tanggapan khusus

Anda dapat menggunakan direktori logis dengan fungsi Lambda yang terhubung ke penyedia identitas kustom Anda. Untuk melakukannya, dalam fungsi Lambda Anda, Anda menentukan HomeDirectoryType sebagaiLOGICAL, dan menambahkan Entry dan Target nilai untuk parameter. HomeDirectoryDetails Sebagai contoh:

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

Kode berikut adalah contoh respons yang berhasil dari panggilan otentikasi Lambda kustom.

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 }
catatan

"Url":Baris dikembalikan hanya jika Anda menggunakan metode API Gateway sebagai penyedia identitas kustom Anda.