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 a 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 API Gateway pribadiURL.

Jika Anda membutuhkan salah satu dari ini, Anda dapat menggunakan Lambda sebagai penyedia identitas, tanpa API Gateway. Untuk detailnya, lihat 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 memberikan cara yang sangat aman bagi Anda untuk membuat dan menyediakanAPIs. Dengan API Gateway, Anda dapat membuat HTTPS titik akhir sehingga semua API panggilan masuk ditransmisikan dengan keamanan yang lebih besar. Untuk detail selengkapnya tentang layanan API Gateway, lihat Panduan Pengembang API Gateway.

APIGateway 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 autentikasi denganAWS_IAM, hanya penelepon dengan izin eksplisit untuk memanggil yang API dapat mencapai metode Gateway ituAPI. API

Untuk menggunakan metode API Gateway Anda sebagai penyedia identitas khusus untuk Transfer Family, aktifkan IAM metode API Gateway Anda. Sebagai bagian dari proses ini, Anda memberikan IAM peran 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 HTTP dan HTTPS permintaan yang diteruskan ke Amazon API Gateway. Untuk detailnya, lihat 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 BASE64 dienkode: 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 khusus 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 API metode Anda berdasarkan API Gateway. Anda kemudian dapat menggunakan API metode Anda sebagai penyedia identitas khusus di Transfer Family. Secara default, fungsi Lambda mengotentikasi satu pengguna yang dipanggil myuser dengan kata sandi. MySuperSecretPassword Setelah penerapan, Anda dapat mengedit kredensi ini atau memperbarui kode fungsi Lambda untuk melakukan sesuatu yang berbeda.

    penting

    Kami menyarankan Anda mengedit kredensi 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, IAM peran yang dibuat stack, dan URL untuk gateway baru Anda. ARN

    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 mencatat kata sandi pengguna Anda ke Log Amazon Anda. CloudWatch Kami tidak menyarankan menggunakan log ini di lingkungan produksi Anda. Untuk informasi selengkapnya, lihat Mengatur CloudWatch API login 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 template dasar Transfer Custom Identity Provider API 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.

      APIrincian konfigurasi, menunjukkan parameter konfigurasi metode untuk Request Paths dan untuk URL Query String.

    Pada titik ini, API gateway Anda siap digunakan.

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

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

    catatan

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

    Detail panggung dengan Invoke URL 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 URL teks Berikan Amazon API Gateway, tempel URL alamat Invoke dari titik akhir API Gateway yang Anda buat di langkah 3 prosedur ini.

    3. Untuk Peran, pilih IAM peran yang dibuat oleh AWS CloudFormation template. Peran ini memungkinkan Transfer Family untuk memanggil metode API gateway 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 SFTP akhir,FTPS, atau FTP server.

Menerapkan metode API Gateway Anda

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

Layar Resources dari 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 EFS file Amazon 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 kredensil khusus untuk setiap protokol telah diatur di penyedia identitas Anda. Untuk mengaktifkan fitur ini, Anda harus menyertakan protocol nilai di jalur RESTful sumber daya.

Metode API Gateway Anda harus selalu mengembalikan kode HTTP status200. Kode HTTP status lainnya berarti ada kesalahan saat mengakses file. API

Contoh respons Amazon S3

Contoh badan respons adalah JSON dokumen 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 diloloskan 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":[""] }
EFSContoh respons Amazon

Contoh badan respons adalah JSON dokumen formulir berikut untuk AmazonEFS.

{ "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 SSH publik. Jika pengguna tidak dapat diautentikasi, misalnya, jika kata sandi salah, metode Anda harus mengembalikan respons tanpa Role disetel. Contoh respons semacam itu adalah JSON objek 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 JSON format. 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 kredensil khusus untuk protokol telah diatur di penyedia identitas Anda.

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

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 tergantung pada nilai untuk HomeDirectoryTypelapangan.

  • HomeDirectoryTypedisetel ke PATHHomeDirectory bidang tersebut kemudian harus berupa awalan bucket Amazon S3 absolut atau jalur EFS absolut Amazon 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 di 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 kredensi 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 pada antarmuka API Gateway telah dilakukan pada CloudFormation templat yang diterbitkan. Template sekarang menggunakan BASE64 -encoded password dengan Gateway. API Penerapan Anda yang ada terus berfungsi tanpa peningkatan ini, tetapi jangan izinkan kata sandi dengan karakter di luar set karakter AS dasar. ASCII

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.