Menggunakan Amazon API Gateway untuk mengintegrasikan penyedia identitas Anda - AWS Transfer Family

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

Menggunakan Amazon API Gateway untuk mengintegrasikan penyedia identitas Anda

Topik ini menjelaskan cara menggunakan AWS Lambda fungsi untuk mendukung metode API Gateway. Gunakan opsi ini jika Anda memerlukan RESTful API untuk mengintegrasikan penyedia identitas Anda atau jika Anda ingin menggunakannya untuk memanfaatkan kemampuannya AWS WAF untuk permintaan pemblokiran geografis atau pembatasan laju.

Batasan jika menggunakan API Gateway untuk mengintegrasikan penyedia identitas Anda

  • Konfigurasi ini tidak mendukung domain kustom.

  • Konfigurasi ini tidak mendukung URL API Gateway pribadi.

Jika Anda membutuhkan salah satu dari ini, Anda dapat menggunakan Lambda sebagai penyedia identitas, tanpa API Gateway. Lihat perinciannya di Menggunakan AWS Lambda untuk mengintegrasikan penyedia identitas Anda.

Mengautentikasi menggunakan metode API Gateway

Anda dapat membuat metode API Gateway untuk digunakan sebagai penyedia identitas untuk Transfer Family. Pendekatan ini menyediakan cara yang sangat aman bagi Anda untuk membuat dan menyediakan API. Dengan API Gateway, Anda dapat membuat titik akhir HTTPS sehingga semua panggilan API yang masuk ditransmisikan dengan keamanan yang lebih besar. Untuk detail selengkapnya tentang layanan API Gateway, lihat Panduan Pengembang API Gateway.

API Gateway menawarkan metode otorisasi bernamaAWS_IAM, yang memberi Anda autentikasi yang sama berdasarkan AWS Identity and Access Management (IAM) yang AWS digunakan secara internal. Jika Anda mengaktifkan autentikasiAWS_IAM, hanya penelepon dengan izin eksplisit untuk memanggil API yang dapat mencapai metode API Gateway API tersebut.

Untuk menggunakan metode API Gateway Anda sebagai penyedia identitas khusus untuk Transfer Family, aktifkan IAM untuk metode API Gateway Anda. Sebagai bagian dari proses ini, Anda memberikan peran IAM dengan izin untuk Transfer Family untuk menggunakan gateway Anda.

catatan

Untuk meningkatkan keamanan, Anda dapat mengkonfigurasi firewall aplikasi web. AWS WAF adalah firewall aplikasi web yang memungkinkan Anda memantau permintaan HTTP dan HTTPS yang diteruskan ke Amazon API Gateway. Lihat perinciannya di Tambahkan firewall aplikasi web.

Untuk menggunakan metode API Gateway Anda untuk autentikasi kustom dengan Transfer Family
  1. Buat AWS CloudFormation tumpukan. Untuk melakukannya:

    catatan

    Templat tumpukan telah diperbarui untuk menggunakan kata sandi yang disandikan Base64: untuk detailnya, lihat. Perbaikan AWS CloudFormation template

    1. Buka AWS CloudFormation konsol di https://console.aws.amazon.com/cloudformation.

    2. Ikuti petunjuk untuk menerapkan AWS CloudFormation tumpukan dari template yang ada di Memilih template tumpukan di Panduan AWS CloudFormation Pengguna.

    3. Gunakan salah satu templat dasar berikut untuk membuat metode API Gateway yang AWS Lambda didukung untuk digunakan sebagai penyedia identitas kustom di Transfer Family.

    Menerapkan salah satu tumpukan ini adalah cara termudah untuk mengintegrasikan penyedia identitas kustom ke dalam alur kerja Transfer Family. Setiap tumpukan menggunakan fungsi Lambda untuk mendukung metode API Anda berdasarkan API Gateway. Anda kemudian dapat menggunakan metode API Anda sebagai penyedia identitas kustom di Transfer Family. Secara default, fungsi Lambda mengotentikasi satu pengguna yang dipanggil myuser dengan kata sandi. MySuperSecretPassword Setelah penerapan, Anda dapat mengedit kredensyal ini atau memperbarui kode fungsi Lambda untuk melakukan sesuatu yang berbeda.

    penting

    Kami menyarankan Anda mengedit kredensyal pengguna dan kata sandi default.

    Setelah tumpukan digunakan, Anda dapat melihat detailnya di tab Output di CloudFormation konsol. Detail ini termasuk Amazon Resource Name (ARN) stack, ARN dari peran IAM yang dibuat stack, dan URL untuk gateway baru Anda.

    catatan

    Jika Anda menggunakan opsi penyedia identitas khusus untuk mengaktifkan autentikasi berbasis kata sandi bagi pengguna Anda, dan Anda mengaktifkan pencatatan permintaan dan respons yang disediakan oleh API Gateway, API Gateway akan mencatat kata sandi pengguna Anda ke Log Amazon Anda. CloudWatch Kami tidak menyarankan menggunakan log ini di lingkungan produksi Anda. Untuk informasi selengkapnya, lihat Menyiapkan pencatatan CloudWatch API di API Gateway di Panduan Pengembang API Gateway.

  2. Periksa konfigurasi metode API Gateway untuk server Anda. Untuk melakukannya:

    1. Buka konsol API Gateway di https://console.aws.amazon.com/apigateway/.

    2. Pilih API template dasar Transfer Custom Identity Provider yang dihasilkan AWS CloudFormation template. Anda mungkin perlu memilih wilayah Anda untuk melihat gateway Anda.

    3. Di panel Resources, pilih GET. Tangkapan layar berikut menunjukkan konfigurasi metode yang benar.

      Detail konfigurasi API, menampilkan parameter konfigurasi metode untuk Jalur Permintaan dan String Kueri URL.

    Pada titik ini, gateway API Anda siap digunakan.

  3. Untuk Tindakan, pilih Deploy API. Untuk tahap Deployment, pilih prod, lalu pilih Deploy.

    Setelah metode API Gateway berhasil diterapkan, lihat kinerjanya di Tahapan> Detail tahap, seperti yang ditunjukkan pada gambar berikut.

    catatan

    Salin alamat URL Invoke yang muncul di bagian atas layar. Anda mungkin membutuhkannya untuk langkah selanjutnya.

    Detail tahap dengan URL Invoke disorot.
  4. Buka AWS Transfer Family konsol di https://console.aws.amazon.com/transfer/.

  5. Transfer Family seharusnya dibuat untuk Anda, saat Anda membuat tumpukan. Jika tidak, konfigurasikan server Anda menggunakan langkah-langkah ini.

    1. Pilih Buat server untuk membuka halaman Buat server. Untuk Pilih penyedia identitas, pilih Kustom, lalu pilih Gunakan Amazon API Gateway untuk terhubung ke penyedia identitas Anda, seperti yang ditunjukkan pada gambar berikut.

      Layar penyedia identitas dengan Penyedia Identitas Kustom dipilih, dan dengan API Gateway dipilih untuk terhubung ke penyedia identitas Anda.
    2. Di kotak teks Berikan URL Amazon API Gateway, tempelkan alamat URL Panggilan titik akhir API Gateway yang Anda buat di langkah 3 prosedur ini.

    3. Untuk Peran, pilih peran IAM yang dibuat oleh AWS CloudFormation template. Peran ini memungkinkan Transfer Family untuk menjalankan metode gateway API Anda.

      Peran pemanggilan berisi nama AWS CloudFormation tumpukan yang Anda pilih untuk tumpukan yang Anda buat di langkah 1. Ini memiliki format berikut:CloudFormation-stack-name-TransferIdentityProviderRole-ABC123DEF456GHI.

    4. Isi kotak yang tersisa, lalu pilih Buat server. Untuk detail tentang langkah-langkah yang tersisa untuk membuat server, lihatMengkonfigurasi titik akhir server SFTP, FTPS, atau FTP.

Menerapkan metode API Gateway

Untuk membuat penyedia identitas khusus untuk Transfer Family, metode API Gateway Anda harus mengimplementasikan satu metode yang memiliki jalur sumber daya/servers/serverId/users/username/config. usernameNilai serverId dan berasal dari jalur sumber daya RESTful. Juga, tambahkan sourceIp dan protocol sebagai Parameter String Kueri URL dalam Permintaan Metode, seperti yang ditunjukkan pada gambar berikut.

Layar Resources API Gateway yang menampilkan detail GET metode.
catatan

Nama pengguna harus minimal 3 dan maksimal 100 karakter. Anda dapat menggunakan karakter berikut dalam nama pengguna: a—z, A-Z, 0—9, garis bawah (_), tanda hubung (-), titik (.), dan di tanda (@). Namun, nama pengguna tidak dapat memulai dengan tanda hubung (-), titik (.), atau di tanda (@).

Jika Transfer Family mencoba otentikasi kata sandi untuk pengguna Anda, layanan akan menyediakan bidang Password: header. Jika tidak ada Password: header, Transfer Family mencoba otentikasi kunci publik untuk mengautentikasi pengguna Anda.

Saat Anda menggunakan penyedia identitas untuk mengautentikasi dan mengotorisasi pengguna akhir, selain memvalidasi kredensialnya, Anda dapat mengizinkan atau menolak permintaan akses berdasarkan alamat IP klien yang digunakan oleh pengguna akhir Anda. Anda dapat menggunakan fitur ini untuk memastikan bahwa data yang disimpan di bucket S3 atau sistem file Amazon EFS Anda dapat diakses melalui protokol yang didukung hanya dari alamat IP yang telah Anda tentukan sebagai tepercaya. Untuk mengaktifkan fitur ini, Anda harus menyertakan sourceIp dalam string Query.

Jika Anda memiliki beberapa protokol yang diaktifkan untuk server Anda dan ingin memberikan akses menggunakan nama pengguna yang sama melalui beberapa protokol, Anda dapat melakukannya selama kredensyal khusus untuk setiap protokol telah diatur di penyedia identitas Anda. Untuk mengaktifkan fitur ini, Anda harus menyertakan protocol nilai di jalur sumber daya RESTful.

Metode API Gateway Anda harus selalu menampilkan kode status HTTP200. Kode status HTTP lainnya berarti ada kesalahan saat mengakses API.

Contoh respons Amazon S3

Contoh badan respons adalah dokumen JSON dari formulir berikut untuk 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" }
catatan

Kebijakan ini lolos dari JSON sebagai string. Sebagai contoh:

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

Contoh respon berikut menunjukkan bahwa pengguna memiliki tipe direktori home logis.

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

Contoh badan respons adalah dokumen JSON dari formulir berikut untuk Amazon EFS.

{ "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" }

RoleBidang menunjukkan bahwa otentikasi berhasil terjadi. Saat melakukan otentikasi kata sandi (saat Anda menyediakan Password: header), Anda tidak perlu memberikan kunci publik SSH. Jika pengguna tidak dapat diautentikasi, misalnya, jika kata sandi salah, metode Anda harus mengembalikan respons tanpa Role disetel. Contoh dari respon tersebut adalah objek JSON kosong.

Contoh respon berikut menunjukkan pengguna yang memiliki tipe direktori home logis.

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

Anda dapat menyertakan kebijakan pengguna dalam fungsi Lambda dalam format JSON. Untuk informasi selengkapnya tentang mengonfigurasi kebijakan pengguna di Transfer Family, lihatMengelola kontrol akses.

Fungsi Lambda default

Untuk menerapkan strategi otentikasi yang berbeda, edit fungsi Lambda yang digunakan gateway Anda. Untuk membantu Anda memenuhi kebutuhan aplikasi Anda, Anda dapat menggunakan contoh fungsi Lambda berikut di Node.js. Untuk informasi selengkapnya tentang Lambda, lihat Panduan AWS Lambda Pengembang atau Membangun fungsi Lambda dengan Node.js.

Contoh fungsi Lambda berikut mengambil nama pengguna, kata sandi (jika Anda melakukan otentikasi kata sandi), ID server, protokol, dan alamat IP klien. Anda dapat menggunakan kombinasi input ini untuk mencari penyedia identitas Anda dan menentukan apakah login harus diterima.

catatan

Jika Anda memiliki beberapa protokol yang diaktifkan untuk server Anda dan ingin memberikan akses menggunakan nama pengguna yang sama melalui beberapa protokol, Anda dapat melakukannya selama kredensyal khusus untuk protokol telah diatur di penyedia identitas Anda.

Untuk File Transfer Protocol (FTP), kami sarankan untuk mempertahankan kredensyal terpisah dari Secure Shell (SSH) File Transfer Protocol (SFTP) dan File Transfer Protocol melalui SSL (FTPS). Sebaiknya pertahankan kredensyal terpisah untuk FTP karena, tidak seperti SFTP dan FTPS, FTP mentransmisikan kredensyal dalam teks yang jelas. Dengan mengisolasi kredensyal FTP dari SFTP atau FTPS, jika kredensyal FTP dibagikan atau diekspos, beban kerja Anda menggunakan SFTP atau FTPS tetap aman.

Fungsi contoh ini mengembalikan peran dan rincian direktori home logis, bersama dengan kunci publik (jika melakukan otentikasi kunci publik).

Saat Anda membuat pengguna yang dikelola layanan, Anda mengatur direktori home mereka, baik logis maupun fisik. Demikian pula, kita membutuhkan hasil fungsi Lambda untuk menyampaikan struktur direktori fisik atau logis pengguna yang diinginkan. Parameter yang Anda tetapkan bergantung pada nilai untuk HomeDirectoryTypebidang tersebut.

  • HomeDirectoryTypedisetel ke PATHHomeDirectory bidang tersebut kemudian harus berupa awalan bucket Amazon S3 absolut atau jalur absolut Amazon EFS yang dapat dilihat oleh pengguna Anda.

  • HomeDirectoryTypeset ke LOGICAL - Jangan mengatur HomeDirectory bidang. Sebagai gantinya, kami menetapkan HomeDirectoryDetails bidang yang menyediakan pemetaan Entry/Target yang diinginkan, mirip dengan nilai yang dijelaskan dalam HomeDirectoryDetailsparameter untuk pengguna yang dikelola layanan.

Contoh fungsi tercantum dalamContoh fungsi Lambda.

Fungsi Lambda untuk digunakan dengan AWS Secrets Manager

Untuk digunakan AWS Secrets Manager sebagai penyedia identitas Anda, Anda dapat bekerja dengan fungsi Lambda di template sampel AWS CloudFormation . Fungsi Lambda menanyakan layanan Secrets Manager dengan kredensyal Anda dan, jika berhasil, mengembalikan rahasia yang ditentukan. Untuk informasi selengkapnya tentang Secrets Manager, lihat Panduan Pengguna AWS Secrets Manager.

Untuk mengunduh contoh AWS CloudFormation template yang menggunakan fungsi Lambda ini, buka bucket Amazon S3 yang disediakan oleh. AWS Transfer Family

Perbaikan AWS CloudFormation template

Perbaikan antarmuka API Gateway telah dilakukan pada CloudFormation template yang diterbitkan. Template sekarang menggunakan kata sandi yang dienkode Base64 dengan API Gateway. Penerapan Anda yang ada terus berfungsi tanpa peningkatan ini, tetapi jangan izinkan kata sandi dengan karakter di luar set karakter AS-ASCII dasar.

Perubahan dalam template yang mengaktifkan kemampuan ini adalah sebagai berikut:

  • GetUserConfigRequest AWS::ApiGateway::MethodSumber daya harus memiliki RequestTemplates kode ini (baris miring adalah baris yang diperbarui)

    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')" }
  • GetUserConfigSumber daya harus diubah untuk menggunakan PasswordBase64 header (baris miring adalah baris yang diperbarui): RequestParameters

    RequestParameters: method.request.header.PasswordBase64: false method.request.querystring.protocol: false method.request.querystring.sourceIp: false
Untuk memeriksa apakah template untuk tumpukan Anda adalah yang terbaru
  1. Buka AWS CloudFormation konsol di https://console.aws.amazon.com/cloudformation.

  2. Dari daftar tumpukan, pilih tumpukan Anda.

  3. Dari panel detail, pilih tab Template.

  4. Cari yang berikut ini:

    • CariRequestTemplates, dan pastikan Anda memiliki baris ini:

      "password": "$util.escapeJavaScript($util.base64Decode($input.params('PasswordBase64'))).replaceAll("\\'","'")",
    • CariRequestParameters, dan pastikan Anda memiliki baris ini:

      method.request.header.PasswordBase64: false

Jika Anda tidak melihat baris yang diperbarui, edit tumpukan Anda. Untuk detail tentang cara memperbarui AWS CloudFormation tumpukan Anda, lihat Memodifikasi template tumpukan di AWS CloudFormation; Panduan Pengguna.