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
-
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
-
Buka AWS CloudFormation konsol di https://console.aws.amazon.com/cloudformation
. -
Ikuti petunjuk untuk menerapkan AWS CloudFormation tumpukan dari template yang ada di Memilih template tumpukan di Panduan AWS CloudFormation Pengguna.
-
Gunakan salah satu templat dasar berikut untuk membuat metode API Gateway yang AWS Lambda didukung untuk digunakan sebagai penyedia identitas kustom di Transfer Family.
-
Secara default, metode API Gateway Anda digunakan sebagai penyedia identitas khusus untuk mengautentikasi satu pengguna dalam satu server menggunakan kunci atau kata sandi SSH (Secure Shell) dengan kode keras. Setelah penerapan, Anda dapat memodifikasi kode fungsi Lambda untuk melakukan sesuatu yang berbeda.
-
AWS Secrets Manager template tumpukan
Secara default, metode API Gateway Anda melakukan autentikasi terhadap entri di Secrets Manager format
aws/transfer/
. Selain itu, secret harus menyimpan pasangan kunci-nilai untuk semua properti pengguna yang dikembalikan ke Transfer Family. Setelah penerapan, Anda dapat memodifikasi kode fungsi Lambda untuk melakukan sesuatu yang berbeda. Untuk informasi selengkapnya, lihat posting blog Aktifkan otentikasi kata sandi untuk AWS Transfer Family digunakan AWS Secrets Managerserver-id
/username
. -
Metode API Gateway Anda terintegrasi dengan Okta sebagai penyedia identitas khusus di Transfer Family. Untuk informasi lebih lanjut, lihat posting blog Menggunakan Okta sebagai penyedia identitas dengan AWS 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 mengautentikasi 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 dikerahkan, 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 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.
-
-
Periksa konfigurasi metode API Gateway untuk server Anda. Untuk melakukannya:
-
Buka konsol API Gateway di https://console.aws.amazon.com/apigateway/
. -
Pilih API template dasar Transfer Custom Identity Provider yang dihasilkan AWS CloudFormation template. Anda mungkin perlu memilih wilayah Anda untuk melihat gateway Anda.
-
Di panel Resources, pilih GET. Tangkapan layar berikut menunjukkan konfigurasi metode yang benar.
Pada titik ini, gateway API Anda siap digunakan.
-
-
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.
-
Buka AWS Transfer Family konsol di https://console.aws.amazon.com/transfer/
. -
Transfer Family seharusnya dibuat untuk Anda, saat Anda membuat tumpukan. Jika tidak, konfigurasikan server Anda menggunakan langkah-langkah ini.
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.
-
Di kotak teks Berikan URL Amazon API Gateway, tempelkan alamat URL Panggilan titik akhir API Gateway yang Anda buat di langkah 3 prosedur ini.
-
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
-
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
Nilai username
dan berasal dari jalur sumber daya RESTful. Juga, tambahkan serverId
sourceIp
dan protocol
sebagai Parameter String Kueri URL dalam Permintaan Metode, seperti yang ditunjukkan pada gambar berikut.
![Layar Sumber Daya API Gateway yang menampilkan detail GET metode.](images/apig-config-method-request.png)
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
nilai di jalur sumber daya RESTful.protocol
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-rsapublic-key2
" ], "Policy": "STS Assume role session policy", "HomeDirectory": "/DOC-EXAMPLE-BUCKET/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:::DOC-EXAMPLE-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\":\"/DOC-EXAMPLE-BUCKET1\"}]", "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-rsapublic-key1
", "ssh-rsapublic-key2
" ], "PosixProfile": { "Uid": "POSIX user ID
", "Gid": "POSIX group ID
", "SecondaryGids": [Optional list of secondary Group IDs
], }, "HomeDirectory": "/fs-id
/path
/to
/home
/directory
" }
Role
Bidang 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.
-
HomeDirectoryType
disetel kePATH
—HomeDirectory
bidang tersebut kemudian harus berupa awalan bucket Amazon S3 absolut atau jalur absolut Amazon EFS yang dapat dilihat oleh pengguna Anda. -
HomeDirectoryType
set keLOGICAL
- Jangan mengaturHomeDirectory
bidang. Sebagai gantinya, kami menetapkanHomeDirectoryDetails
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 ditunjuk. 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
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::Method
Sumber daya harus memilikiRequestTemplates
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')" }
-
GetUserConfig
Sumber daya harus diubah untuk menggunakanPasswordBase64
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
Buka AWS CloudFormation konsol di https://console.aws.amazon.com/cloudformation
. Dari daftar tumpukan, pilih tumpukan Anda.
Dari panel detail, pilih tab Template.
-
Cari yang berikut ini:
Cari
RequestTemplates
, dan pastikan Anda memiliki baris ini:"password": "$util.escapeJavaScript($util.base64Decode($input.params('PasswordBase64'))).replaceAll("\\'","'")",
Cari
RequestParameters
, 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.