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
-
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
-
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 khusus 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 hard-code SSH (Secure Shell). Setelah penerapan, Anda dapat memodifikasi kode fungsi Lambda untuk melakukan sesuatu yang berbeda.
-
AWS Secrets Manager template tumpukan
Secara default, metode API Gateway Anda mengautentikasi 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 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.
-
-
Periksa konfigurasi metode API Gateway untuk server Anda. Untuk melakukannya:
-
Buka konsol API Gateway di https://console.aws.amazon.com/apigateway/
. -
Pilih template dasar Transfer Custom Identity Provider API 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, API gateway Anda siap digunakan.
-
-
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.
-
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 URL teks Berikan Amazon API Gateway, tempel URL alamat Invoke dari titik akhir API Gateway yang Anda buat di langkah 3 prosedur ini.
-
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
-
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
Nilai username
dan berasal dari jalur RESTful sumber daya. Juga, tambahkan serverId
sourceIp
dan protocol
sebagai Parameter String URL Kueri dalam Permintaan Metode, seperti yang ditunjukkan pada gambar berikut.
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
nilai di jalur RESTful sumber daya.protocol
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-rsapublic-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-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 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.
-
HomeDirectoryType
disetel kePATH
—HomeDirectory
bidang tersebut kemudian harus berupa awalan bucket Amazon S3 absolut atau jalur EFS absolut Amazon 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 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
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::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.