Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Akses host bastion menggunakan Session Manager dan Amazon EC2 Instance Connect
Piotr Chotkowski dan Witold Kowalik, Amazon Web Services
Ringkasan
Sebuah bastion host, kadang-kadang disebut jump box, adalah server yang menyediakan satu titik akses dari jaringan eksternal ke sumber daya yang terletak di jaringan pribadi. Server yang terpapar ke jaringan publik eksternal, seperti internet, menimbulkan risiko keamanan potensial untuk akses yang tidak sah. Sangat penting untuk mengamankan dan mengontrol akses ke server ini.
Pola ini menjelaskan cara Anda dapat menggunakan Session Manager dan Amazon EC2 Instance Connect untuk terhubung dengan aman ke host bastion Amazon Elastic Compute Cloud EC2 (Amazon) yang digunakan di host Anda. Akun AWS Session Manager adalah kemampuan AWS Systems Manager. Manfaat dari pola ini meliputi:
Host benteng yang dikerahkan tidak memiliki port terbuka dan masuk yang terpapar ke internet publik. Ini mengurangi permukaan serangan potensial.
Anda tidak perlu menyimpan dan memelihara kunci Secure Shell (SSH) jangka panjang di dalam. Akun AWS Sebagai gantinya, setiap pengguna menghasilkan key pair SSH baru setiap kali mereka terhubung ke host bastion. AWS Identity and Access Management (IAM) kebijakan yang dilampirkan pada AWS kredensyal pengguna mengontrol akses ke host bastion.
Audiens yang dituju
Pola ini ditujukan untuk pembaca yang memiliki pengalaman dengan pemahaman dasar tentang Amazon EC2, Amazon Virtual Private Cloud (Amazon VPC), dan Hashicorp Terraform.
Prasyarat dan batasan
Prasyarat
Aktif Akun AWS
AWS Command Line Interface (AWS CLI) versi 2, diinstal dan dikonfigurasi
Plugin Session Manager untuk AWS CLI, diinstal
Penyimpanan untuk status
Terraform, seperti bucket Amazon Simple Storage Service (Amazon S3) Simple Storage Service (Amazon S3) dan tabel Amazon DynamoDB yang berfungsi sebagai backend jarak jauh untuk menyimpan status Terraform. Untuk informasi selengkapnya tentang penggunaan backend jarak jauh untuk status Terraform, lihat Backend Amazon S3 (dokumentasi Terraform). Untuk contoh kode yang menyiapkan manajemen status jarak jauh dengan backend Amazon S3, lihat remote-state-s3-backend (Terraform Registry). Perhatikan persyaratan berikut: Bucket Amazon S3 dan tabel DynamoDB harus sama. Wilayah AWS
Saat membuat tabel DynamoDB, kunci partisi
LockIDharus (peka huruf besar/kecil), dan tipe kunci partisi harus.StringSemua pengaturan tabel lainnya harus pada nilai default mereka. Untuk informasi selengkapnya, lihat Tentang kunci utama dan Membuat tabel di dokumentasi DynamoDB.
Klien SSH, diinstal
Batasan
Pola ini dimaksudkan sebagai bukti konsep (PoC) atau sebagai dasar untuk pengembangan lebih lanjut. Seharusnya tidak digunakan dalam bentuknya saat ini di lingkungan produksi. Sebelum penerapan, sesuaikan kode sampel di repositori untuk memenuhi persyaratan dan kasus penggunaan Anda.
Pola ini mengasumsikan bahwa target bastion host menggunakan Amazon Linux 2 sebagai sistem operasinya. Meskipun dimungkinkan untuk menggunakan Amazon Machine Images (AMIs) lainnya, sistem operasi lain berada di luar cakupan untuk pola ini.
catatan
Amazon Linux 2 mendekati akhir dukungan. Untuk informasi selengkapnya, lihat Amazon Linux 2 FAQs
. Dalam pola ini, host benteng terletak di subnet pribadi tanpa gateway NAT dan gateway internet. Desain ini mengisolasi EC2 instance Amazon dari internet publik. Anda dapat menambahkan konfigurasi jaringan tertentu yang memungkinkannya berkomunikasi dengan internet. Untuk informasi selengkapnya, lihat Connect virtual private cloud (VPC) Anda ke jaringan lain dalam dokumentasi Amazon VPC. Demikian pula, mengikuti prinsip hak istimewa terkecil, host bastion tidak memiliki akses ke sumber daya lain di Anda Akun AWS kecuali Anda secara eksplisit memberikan izin. Untuk informasi selengkapnya, lihat Kebijakan berbasis sumber daya dalam dokumentasi IAM.
Versi produk
AWS CLI versi 2
Terraform versi 1.3.9
Arsitektur
Tumpukan teknologi target
VPC dengan subnet pribadi tunggal
Antarmuka berikut titik akhir VPC:
amazonaws.<region>.ssm— Titik akhir untuk AWS Systems Manager layanan.amazonaws.<region>.ec2messages— Systems Manager menggunakan endpoint ini untuk melakukan panggilan dari Agen SSM ke layanan Systems Manager.amazonaws.<region>.ssmmessages— Session Manager menggunakan endpoint ini untuk terhubung ke EC2 instans Amazon Anda melalui saluran data yang aman.
EC2 Instans
t3.nanoAmazon yang menjalankan Amazon Linux 2Peran IAM dan profil contoh
Grup keamanan Amazon VPC dan aturan grup keamanan untuk titik akhir dan instans Amazon EC2
Arsitektur target

Diagram menunjukkan proses berikut:
Pengguna mengasumsikan peran IAM yang memiliki izin untuk melakukan hal berikut:
Mengautentikasi, mengotorisasi, dan menghubungkan ke instans Amazon EC2
Memulai sesi dengan Manajer Sesi
Pengguna memulai sesi SSH melalui Session Manager.
Session Manager mengautentikasi pengguna, memverifikasi izin dalam kebijakan IAM terkait, memeriksa pengaturan konfigurasi, dan mengirim pesan ke Agen SSM untuk membuka koneksi dua arah.
Pengguna mendorong kunci publik SSH ke host benteng melalui metadata Amazon. EC2 Ini harus dilakukan sebelum setiap koneksi. Kunci publik SSH tetap tersedia selama 60 detik.
Host benteng berkomunikasi dengan titik akhir VPC antarmuka untuk Systems Manager dan Amazon. EC2
Pengguna mengakses host bastion melalui Session Manager dengan menggunakan saluran komunikasi dua arah terenkripsi TLS 1.2.
Otomatisasi dan skala
Opsi berikut tersedia untuk mengotomatiskan penerapan atau untuk menskalakan arsitektur ini:
Anda dapat menerapkan arsitektur melalui pipeline continuous integration dan continuous delivery (CI/CD).
Anda dapat memodifikasi kode untuk mengubah jenis instance dari host bastion.
Anda dapat memodifikasi kode untuk menyebarkan beberapa host bastion. Dalam
bastion-host/main.tffile, di blokaws_instancesumber daya, tambahkancountmeta-argumen. Untuk informasi selengkapnya, lihat dokumentasi Terraform.
Alat
Layanan AWS
AWS Command Line Interface (AWS CLI) adalah alat open source yang membantu Anda berinteraksi Layanan AWS melalui perintah di shell baris perintah Anda.
Amazon Elastic Compute Cloud (Amazon EC2) menyediakan kapasitas komputasi yang dapat diskalakan di. AWS Cloud Anda dapat meluncurkan server virtual sebanyak yang Anda butuhkan dan dengan cepat meningkatkannya ke atas atau ke bawah.
AWS Identity and Access Management (IAM) membantu Anda mengelola akses ke AWS sumber daya dengan aman dengan mengontrol siapa yang diautentikasi dan diberi wewenang untuk menggunakannya.
AWS Systems Managermembantu Anda mengelola aplikasi dan infrastruktur yang berjalan di AWS Cloud. Ini menyederhanakan aplikasi dan manajemen sumber daya, mempersingkat waktu untuk mendeteksi dan menyelesaikan masalah operasional, dan membantu Anda mengelola AWS sumber daya Anda dengan aman dalam skala besar. Pola ini menggunakan Session Manager, kemampuan Systems Manager.
Amazon Virtual Private Cloud (Amazon VPC) membantu Anda meluncurkan AWS sumber daya ke jaringan virtual yang telah Anda tentukan. Jaringan virtual ini menyerupai jaringan tradisional yang akan Anda operasikan di pusat data Anda sendiri, dengan manfaat menggunakan infrastruktur yang dapat diskalakan. AWS
Alat lainnya
HashiCorp Terraform
adalah alat infrastruktur sebagai kode (IAc) yang membantu Anda menggunakan kode untuk menyediakan dan mengelola infrastruktur dan sumber daya cloud. Pola ini menggunakan Terraform CLI .
Repositori kode
Kode untuk pola ini tersedia di host GitHub Access a bastion dengan menggunakan Session Manager dan Amazon EC2 Instance Connect
Praktik terbaik
Sebaiknya gunakan alat pemindaian kode otomatis untuk meningkatkan keamanan dan kualitas kode. Pola ini dipindai dengan menggunakan Checkov
, alat analisis kode statis untuk IAc. Minimal, kami menyarankan Anda melakukan pemeriksaan validasi dan pemformatan dasar dengan menggunakan perintah terraform validatedanterraform fmt -check -recursiveTerraform.Ini adalah praktik yang baik untuk menambahkan tes otomatis untuk IAc. Untuk informasi lebih lanjut tentang berbagai pendekatan untuk menguji kode Terraform, lihat Menguji HashiCorp Terraform (posting blog Terraform
). Selama penerapan, Terraform menggunakan instans pengganti EC2 Amazon setiap kali versi baru AMI Amazon Linux 2 terdeteksi
. Ini menyebarkan versi baru dari sistem operasi, termasuk tambalan dan peningkatan. Jika jadwal penerapan jarang terjadi, ini dapat menimbulkan risiko keamanan karena instance tidak memiliki tambalan terbaru. Penting untuk sering memperbarui dan menerapkan tambalan keamanan ke instans Amazon EC2 yang diterapkan. Untuk informasi selengkapnya, lihat Memperbarui manajemen di Amazon EC2. Karena pola ini adalah bukti konsep, ia menggunakan kebijakan AWS terkelola, seperti
AmazonSSMManagedInstanceCore. AWS kebijakan terkelola mencakup kasus penggunaan umum tetapi tidak memberikan izin hak istimewa paling sedikit. Jika diperlukan untuk kasus penggunaan Anda, sebaiknya Anda membuat kebijakan khusus yang memberikan izin hak istimewa paling sedikit untuk sumber daya yang digunakan dalam arsitektur ini. Untuk informasi selengkapnya, lihat Memulai kebijakan AWS terkelola dan beralih ke izin hak istimewa paling sedikit.Gunakan kata sandi untuk melindungi akses ke kunci SSH dan menyimpan kunci di lokasi yang aman.
Siapkan logging dan monitoring untuk host bastion. Pencatatan dan pemantauan adalah bagian penting dari pemeliharaan sistem, baik dari perspektif operasional maupun keamanan. Ada beberapa cara untuk memantau koneksi dan aktivitas di host bastion Anda. Untuk informasi selengkapnya, lihat topik berikut dalam dokumentasi Systems Manager:
Epik
| Tugas | Deskripsi | Keterampilan yang dibutuhkan |
|---|---|---|
Kloning repositori kode. |
| DevOps insinyur, Pengembang |
Inisialisasi direktori kerja Terraform. | Langkah ini diperlukan hanya untuk penerapan pertama. Jika Anda menerapkan kembali pola, lompat ke langkah berikutnya. Di direktori root repositori kloning, masukkan perintah berikut, di mana:
catatanAtau, Anda dapat membuka file config.tf dan, di | DevOps insinyur, Pengembang, Terraform |
Menyebarkan sumber daya. |
| DevOps insinyur, Pengembang, Terraform |
| Tugas | Deskripsi | Keterampilan yang dibutuhkan |
|---|---|---|
Konfigurasikan koneksi SSH. | Perbarui file konfigurasi SSH untuk memungkinkan koneksi SSH melalui Session Manager. Untuk petunjuk, lihat Mengizinkan koneksi SSH untuk Pengelola Sesi. Hal ini memungkinkan pengguna yang berwenang untuk memasukkan perintah proxy yang memulai sesi Session Manager dan mentransfer semua data melalui koneksi dua arah. | DevOps insinyur |
Hasilkan kunci SSH. | Masukkan perintah berikut untuk menghasilkan private dan public SSH key pair lokal. Anda menggunakan key pair ini untuk terhubung ke host bastion.
| DevOps insinyur, Pengembang |
| Tugas | Deskripsi | Keterampilan yang dibutuhkan |
|---|---|---|
Dapatkan ID instance. |
| AWS Umum |
Kirim kunci publik SSH. | catatanDi bagian ini, Anda mengunggah kunci publik ke metadata instance dari host bastion. Setelah kunci diunggah, Anda memiliki 60 detik untuk memulai koneksi dengan host bastion. Setelah 60 detik, kunci publik dihapus. Untuk informasi selengkapnya, lihat bagian Pemecahan Masalah dari pola ini. Selesaikan langkah selanjutnya dengan cepat untuk mencegah kunci dihapus sebelum Anda terhubung ke host bastion.
| AWS Umum |
Connect ke host bastion. |
catatanAda opsi lain untuk membuka koneksi SSH dengan host bastion. Untuk informasi lebih lanjut, lihat Pendekatan alternatif untuk membuat koneksi SSH dengan host bastion di bagian Informasi tambahan dari pola ini. | AWS Umum |
| Tugas | Deskripsi | Keterampilan yang dibutuhkan |
|---|---|---|
Hapus sumber daya yang digunakan. |
| DevOps insinyur, Pengembang, Terraform |
Pemecahan Masalah
| Isu | Solusi |
|---|---|
|
|
| Setelah kunci publik diunggah ke host bastion, Anda hanya memiliki 60 detik untuk memulai koneksi. Setelah 60 detik, kunci secara otomatis dihapus, dan Anda tidak dapat menggunakannya untuk terhubung ke instance. Jika ini terjadi, Anda dapat mengulangi langkah untuk mengirim ulang kunci ke instance. |
Sumber daya terkait
AWS dokumentasi
AWS Systems Manager Session Manager(Dokumentasi Systems Manager)
Instal plugin Session Manager untuk dokumentasi AWS CLI(Systems Manager)
Mengizinkan koneksi SSH untuk Session Manager (dokumentasi Systems Manager)
Tentang menggunakan EC2 Instance Connect ( EC2 dokumentasi Amazon)
Connect menggunakan EC2 Instance Connect ( EC2 dokumentasi Amazon)
Manajemen identitas dan akses untuk Amazon EC2 ( EC2 dokumentasi Amazon)
Menggunakan peran IAM untuk memberikan izin ke aplikasi yang berjalan di EC2 instans Amazon (dokumentasi IAM)
Praktik terbaik keamanan dalam IAM (dokumentasi IAM)
Kontrol lalu lintas ke sumber daya menggunakan grup keamanan (dokumentasi Amazon VPC)
Sumber daya lainnya
Perintah: memvalidasi
(dokumentasi Terraform) Perintah: fmt (dokumentasi
Terraform) Menguji HashiCorp Terraform
(HashiCorp posting blog)
Informasi tambahan
Pendekatan alternatif untuk membangun koneksi SSH dengan host bastion
Penerusan port
Anda dapat menggunakan -D 8888 opsi untuk membuka koneksi SSH dengan penerusan port dinamis. Untuk informasi lebih lanjut, lihat petunjuk
ssh -i $PRIVATE_KEY_FILE -D 8888 ec2-user@$INSTANCE_ID
Ini adalah jenis koneksi membuka proxy SOCKS yang dapat meneruskan lalu lintas dari browser lokal Anda melalui host bastion. Jika Anda menggunakan Linux atau macOS, untuk melihat semua opsi, masukkan. man ssh Ini menampilkan manual referensi SSH.
Menggunakan skrip yang disediakan
Alih-alih menjalankan langkah-langkah yang dijelaskan di Connect to the bastion host secara manual dengan menggunakan Session Manager di bagian Epics, Anda dapat menggunakan skrip connect.sh yang disertakan dalam repositori kode. Skrip ini menghasilkan key pair SSH, mendorong kunci publik ke EC2 instance Amazon, dan memulai koneksi dengan host bastion. Saat Anda menjalankan skrip, Anda meneruskan tag dan nama kunci sebagai argumen. Berikut ini adalah contoh dari perintah untuk menjalankan script.
./connect.sh sandbox-dev-bastion-host my_key