Siapkan logging terpusat pada skala perusahaan dengan menggunakan Terraform - AWS Prescriptive Guidance

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

Siapkan logging terpusat pada skala perusahaan dengan menggunakan Terraform

Aarti Rajput, Yashwant Patel, dan Nishtha Yadav, Amazon Web Services

Ringkasan

Pencatatan terpusat sangat penting untuk infrastruktur cloud organisasi, karena memberikan visibilitas ke dalam operasi, keamanan, dan kepatuhannya. Saat organisasi Anda menskalakan AWS lingkungannya di beberapa akun, strategi manajemen log terstruktur menjadi dasar untuk menjalankan operasi keamanan, memenuhi persyaratan audit, dan mencapai keunggulan operasional.

Pola ini menyediakan kerangka kerja yang dapat diskalakan dan aman untuk memusatkan log dari beberapa Akun AWS dan layanan, untuk memungkinkan manajemen logging skala perusahaan di seluruh penerapan yang kompleks. AWS Solusinya otomatis dengan menggunakan Terraform, yang merupakan alat infrastruktur sebagai kode (IAc) HashiCorp yang memastikan penerapan yang konsisten dan berulang, serta meminimalkan konfigurasi manual. Dengan menggabungkan Amazon CloudWatch Logs, Amazon Data Firehose, dan Amazon Simple Storage Service (Amazon S3), Anda dapat menerapkan alur agregasi dan analisis log yang kuat yang memberikan:

  • Manajemen log terpusat di seluruh organisasi Anda di AWS Organizations

  • Pengumpulan log otomatis dengan kontrol keamanan bawaan

  • Pemrosesan log yang dapat diskalakan dan penyimpanan yang tahan lama

  • Pelaporan kepatuhan dan jejak audit yang disederhanakan

  • Wawasan dan pemantauan operasional waktu nyata

Solusi ini mengumpulkan log dari wadah, fungsi, dan instans database Amazon Elastic Kubernetes Service (Amazon EKS AWS Lambda ), dan instans database Amazon Relational Database Service (Amazon RDS) melalui Log. CloudWatch Secara otomatis meneruskan log ini ke akun logging khusus dengan menggunakan filter CloudWatch berlangganan. Firehose mengelola pipeline streaming log throughput tinggi ke Amazon S3 untuk penyimpanan jangka panjang. Amazon Simple Queue Service (Amazon Simple Service) dikonfigurasi untuk menerima pemberitahuan peristiwa Amazon S3 setelah pembuatan objek. Ini memungkinkan integrasi dengan layanan analitik, termasuk:

  • OpenSearch Layanan Amazon untuk penelusuran log, visualisasi, dan analitik waktu nyata

  • Amazon Athena untuk kueri berbasis SQL

  • Amazon EMR untuk pemrosesan skala besar

  • Lambda untuk transformasi kustom

  • Amazon QuickSight untuk dasbor

Semua data dienkripsi dengan menggunakan AWS Key Management Service (AWS KMS), dan seluruh infrastruktur diterapkan dengan menggunakan Terraform untuk konfigurasi yang konsisten di seluruh lingkungan.

Pendekatan logging terpusat ini memungkinkan organisasi untuk meningkatkan postur keamanan mereka, mempertahankan persyaratan kepatuhan, dan mengoptimalkan efisiensi operasional di seluruh AWS infrastruktur mereka.

Prasyarat dan batasan

Prasyarat

Untuk petunjuk pengaturan AWS Control Tower, AFT, dan akun Aplikasi, lihat bagian Epik.

Akun yang diperlukan

Organisasi Anda AWS Organizations harus menyertakan akun-akun ini:

  • Akun aplikasi - Satu atau beberapa akun sumber tempat Layanan AWS (Amazon EKS, Lambda, dan Amazon RDS) menjalankan dan menghasilkan log

  • Akun Arsip Log - Akun khusus untuk penyimpanan dan manajemen log terpusat

Versi produk

Arsitektur

Diagram berikut menggambarkan arsitektur logging AWS terpusat yang menyediakan solusi terukur untuk mengumpulkan, memproses, dan menyimpan log dari beberapa akun Aplikasi ke akun Arsip Log khusus. Arsitektur ini secara efisien menangani log dari Layanan AWS, termasuk Amazon RDS, Amazon EKS, dan Lambda, dan merutekkannya melalui proses yang disederhanakan ke bucket Regional S3 di akun Arsip Log.

Arsitektur logging terpusat AWS untuk mengumpulkan log dari beberapa akun Aplikasi.

Alur kerja mencakup lima proses:

  1. Proses aliran log

    • Proses alur log dimulai di akun Aplikasi, di mana Layanan AWS menghasilkan berbagai jenis log, seperti umum, kesalahan, audit, log kueri lambat dari Amazon RDS, log bidang kontrol dari Amazon EKS, dan eksekusi fungsi dan log kesalahan dari Lambda.

    • CloudWatch berfungsi sebagai titik pengumpulan awal. Ini mengumpulkan log ini di tingkat grup log dalam setiap akun aplikasi.

    • Di CloudWatch, filter langganan menentukan log mana yang harus diteruskan ke akun pusat. Filter ini memberi Anda kontrol granular atas penerusan log, sehingga Anda dapat menentukan pola log yang tepat atau aliran log lengkap untuk sentralisasi.

  2. Transfer log lintas akun

    • Log pindah ke akun Arsip Log. CloudWatch filter berlangganan memfasilitasi transfer lintas akun dan mempertahankan konteks Regional.

    • Arsitektur menetapkan beberapa aliran paralel untuk menangani sumber log yang berbeda secara efisien, untuk memastikan kinerja dan skalabilitas yang optimal.

  3. Pemrosesan log di akun Arsip Log

    • Di akun Arsip Log, Firehose memproses aliran log yang masuk.

    • Setiap Wilayah mengelola aliran pengiriman Firehose khusus yang dapat mengubah, mengonversi, atau memperkaya log sesuai kebutuhan.

    • Aliran Firehose ini mengirimkan log yang diproses ke bucket S3 di akun Arsip Log, yang terletak di Wilayah yang sama dengan akun Aplikasi sumber (Wilayah A dalam diagram) untuk mempertahankan persyaratan kedaulatan data.

  4. Pemberitahuan dan alur kerja tambahan

    • Saat log mencapai bucket S3 tujuan, arsitektur mengimplementasikan sistem notifikasi dengan menggunakan Amazon SQS.

    • Antrian SQS Regional memungkinkan pemrosesan asinkron dan dapat memicu alur kerja tambahan, analitik, atau sistem peringatan berdasarkan log yang disimpan.

  5. AWS KMS untuk keamanan

    Arsitektur menggabungkan AWS KMS untuk keamanan. AWS KMS menyediakan kunci enkripsi untuk bucket S3. Ini memastikan bahwa semua log yang disimpan mempertahankan enkripsi saat istirahat sambil menjaga enkripsi Regional untuk memenuhi persyaratan residensi data.

Alat

Layanan AWS

  • Amazon CloudWatch adalah layanan pemantauan dan observabilitas yang mengumpulkan data pemantauan dan operasional dalam bentuk log, metrik, dan peristiwa. Ini memberikan tampilan terpadu AWS sumber daya, aplikasi, dan layanan yang berjalan di AWS dan server lokal.

  • CloudWatch Filter langganan log adalah ekspresi yang cocok dengan pola dalam peristiwa log masuk dan mengirimkan peristiwa log yang cocok ke AWS sumber daya yang ditentukan untuk diproses atau dianalisis lebih lanjut.

  • AWS Control Tower Account Factory For Terraform (AFT) menyiapkan pipeline Terraform untuk membantu Anda menyediakan dan menyesuaikan akun. AWS Control Tower AFT menyediakan penyediaan akun berbasis Terraform sambil memungkinkan Anda untuk mengatur akun Anda. AWS Control Tower

  • Amazon Data Firehose memberikan data streaming real-time ke tujuan seperti Amazon S3, Amazon Redshift, dan Amazon Service. OpenSearch Ini secara otomatis menskalakan agar sesuai dengan throughput data Anda dan tidak memerlukan administrasi yang berkelanjutan.

  • Amazon Elastic Kubernetes Service (Amazon EKS) adalah layanan orkestrasi kontainer terkelola yang memudahkan penerapan, pengelolaan, dan skala aplikasi kontainer dengan menggunakan Kubernetes. Secara otomatis mengelola ketersediaan dan skalabilitas node bidang kontrol Kubernetes.

  • AWS Key Management Service (AWS KMS) membuat dan mengontrol kunci enkripsi untuk mengenkripsi data Anda. AWS KMS terintegrasi dengan yang lain Layanan AWS untuk membantu Anda melindungi data yang Anda simpan dengan layanan ini.

  • AWS Lambdaadalah layanan komputasi tanpa server yang memungkinkan Anda menjalankan kode tanpa menyediakan atau mengelola server. Ini secara otomatis menskalakan aplikasi Anda dengan menjalankan kode sebagai respons terhadap setiap pemicu, dan hanya mengenakan biaya untuk waktu komputasi yang Anda gunakan.

  • Amazon Relational Database Service (Amazon RDS) adalah layanan database relasional terkelola yang memudahkan pengaturan, pengoperasian, dan skala database relasional di cloud. Ini memberikan kapasitas hemat biaya dan dapat diubah ukurannya sambil mengotomatiskan tugas administrasi yang memakan waktu.

  • Amazon Simple Queue Service (Amazon SQS) adalah layanan antrian pesan yang memungkinkan Anda memisahkan dan menskalakan layanan mikro, sistem terdistribusi, dan aplikasi tanpa server. Ini menghilangkan kompleksitas mengelola dan mengoperasikan middleware berorientasi pesan.

  • Amazon Simple Storage Service (Amazon S3) adalah layanan penyimpanan objek berbasis cloud yang menawarkan skalabilitas, ketersediaan data, keamanan, dan kinerja. Ini dapat menyimpan dan mengambil sejumlah data dari mana saja di web.

Alat-alat lainnya

  • Terraform adalah alat infrastruktur sebagai kode (IAc) HashiCorp yang membantu Anda membuat dan mengelola sumber daya cloud dan lokal.

Kode

Kode untuk pola ini tersedia di repositori logging GitHub terpusat.

Praktik terbaik

Epik

TugasDeskripsiKeterampilan yang dibutuhkan

Siapkan AWS Control Tower lingkungan dengan AFT.

  1. Terapkan AWS Control Tower dengan mengikuti instruksi dalam AWS Control Tower dokumentasi.

  2. Menyebarkan AFT dengan mengikuti instruksi dalam AWS Control Tower dokumentasi.

Administrator AWS

Aktifkan berbagi sumber daya untuk organisasi.

  1. Configure AWS Command Line Interface (AWS CLI) dengan kredenal akun manajemen, yang memberikan izin administratif untuk dikelola. AWS Control Tower

  2. Jalankan AWS CLI perintah berikut di salah satu Wilayah AWS:

    aws ram enable-sharing-with-aws-organization

    Ini memungkinkan berbagi sumber daya dalam organisasi Anda di AWS Organizations seluruh Wilayah yang mendukung AWS Resource Access Manager (AWS RAM).

Administrator AWS

Verifikasi atau berikan akun Aplikasi.

Untuk menyediakan akun Aplikasi baru untuk kasus penggunaan Anda, buat melalui AFT. Untuk informasi selengkapnya, lihat Menyediakan akun baru dengan AFT dalam AWS Control Tower dokumentasi.

Administrator AWS
TugasDeskripsiKeterampilan yang dibutuhkan

Salin isi Application_account folder ke dalam aft-account-customizations repositori.

  1. Buat folder bernama Application_account di jalur root aft-account-customizations repositori. Repositori ini dibuat secara otomatis saat Anda mengatur AFT (lihat epik sebelumnya).

  2. Arahkan ke direktori root scale-using-terraform repositori centralised-logging-at-enterprise-, salin isi aft/account direktori, lalu tempelkan ke Application_account direktori yang Anda buat pada langkah 1 di repositori. aft-account-customizations

  3. Dari direktori root centralised-logging-at-enterprise-scale-using-terraform repositori, salin isi Application_account direktori ke Application_account/terraform direktori di repositori. aft-account-customizations

  4. Dalam aft-account-customizations/Application_account/terraform.tfvars file, konfirmasikan bahwa semua parameter diteruskan sebagai argumen dalam file konfigurasi Terraform yang sesuai.

DevOps insinyur

Tinjau dan edit parameter input untuk menyiapkan akun Aplikasi.

Pada langkah ini, Anda menyiapkan file konfigurasi untuk membuat sumber daya di akun Aplikasi, termasuk grup CloudWatch log, filter CloudWatch langganan, peran dan kebijakan IAM, serta detail konfigurasi untuk fungsi Amazon RDS, Amazon EKS, dan Lambda.

Di aft-account-customizations repositori Anda, di Application_account folder, konfigurasikan parameter input dalam terraform.tfvars file berdasarkan persyaratan organisasi Anda:

  • environment: Nama lingkungan (misalnya,, proddev,staging) tempat sumber daya akan digunakan.

  • account_name: Nama Akun AWS tempat sumber daya akan dibuat.

  • log_archive_account_id: Akun AWS ID tempat log akan diarsipkan.

  • admin_role_name: Nama peran administratif yang akan digunakan untuk mengelola sumber daya.

  • tags: Peta pasangan kunci-nilai yang mewakili tag umum untuk diterapkan ke semua sumber daya.

  • rds_config: Objek yang berisi detail konfigurasi untuk instans Amazon RDS.

  • allowed_cidr_blocks: Daftar blok CIDR yang diizinkan untuk mengakses sumber daya.

  • destination_name:Variabel yang digunakan untuk membuat Nama Sumber Daya Amazon (ARN) CloudWatch tujuan tempat log akan dialirkan.

  • rds_parameters:Objek yang berisi pengaturan grup parameter Amazon RDS.

  • vpc_config: Objek yang berisi detail konfigurasi VPC.

  • eks_config: Objek yang berisi detail konfigurasi untuk kluster Amazon EKS.

  • lambda_config: Objek yang berisi detail konfigurasi untuk fungsi Lambda.

  • restrictive_cidr_range: Daftar rentang CIDR yang membatasi untuk aturan grup keamanan.

  • target_account_id: Akun AWS ID akun Arsip Log target tempat sumber daya akan digunakan.

DevOps insinyur
TugasDeskripsiKeterampilan yang dibutuhkan

Salin isi Log_archive_account folder ke dalam aft-account-customizations repositori.

  1. Buat folder bernama Log_archive_account di jalur root repositori, aft-account-customizations Repositori ini dibuat secara otomatis ketika Anda mengatur AFT.

  2. Arahkan ke direktori root centralised-logging-at-enterprise-scale-using-terraform repositori, salin isi aft/account direktori, lalu tempelkan ke Log_archive_account direktori yang Anda buat pada langkah sebelumnya di repositori. aft-account-customizations

  3. Dari direktori root centralised-logging-at-enterprise-scale-using-terraform repositori, salin isi Log_archive_account direktori ke Log_archive_account/terraform direktori di repositori. aft-account-customizations

  4. Dalam aft-account-customizations/Log_archive_account/terraform.tfvars file, konfirmasikan bahwa semua parameter diteruskan sebagai argumen dalam file konfigurasi Terraform yang sesuai.

DevOps insinyur

Tinjau dan edit parameter input untuk menyiapkan akun Arsip Log.

Pada langkah ini, Anda menyiapkan file konfigurasi untuk membuat resource di akun Arsip Log, termasuk aliran pengiriman Firehose, bucket S3, antrian SQS, serta peran dan kebijakan IAM.

Di Log_archive_account folder aft-account-customizations repositori Anda, konfigurasikan parameter input dalam terraform.tfvars file berdasarkan persyaratan organisasi Anda:

  • environment: Nama lingkungan (misalnya,, proddev,staging) tempat sumber daya akan digunakan.

  • destination_name: Variabel yang digunakan untuk membuat ARN CloudWatch tujuan tempat log akan dialirkan.

  • source_account_ids: Daftar Akun AWS IDs yang diizinkan untuk menempatkan filter berlangganan di tujuan log. Anda dapat memasukkan akun IDs sebanyak yang ingin Anda aktifkan untuk pencatatan terpusat.

DevOps insinyur
TugasDeskripsiKeterampilan yang dibutuhkan

Opsi 1 - Menyebarkan file konfigurasi Terraform dari AFT.

Di AFT, pipeline AFT dipicu setelah Anda mendorong kode dengan perubahan konfigurasi ke GitHub aft-account-customizations repositori. AFT secara otomatis mendeteksi perubahan dan memulai proses kustomisasi akun.

Setelah Anda membuat perubahan pada file Terraform (terraform.tfvars) Anda, komit dan dorong perubahan Anda ke repositori Andaaft-account-customizations:

$ git add * $ git commit -m "update message" $ git push origin main
catatan

Jika Anda menggunakan cabang yang berbeda (sepertidev), ganti main dengan nama cabang Anda.

DevOps insinyur

Opsi 2 - Menyebarkan file konfigurasi Terraform secara manual.

Jika Anda tidak menggunakan AFT atau ingin menerapkan solusi secara manual, Anda dapat menggunakan perintah Terraform berikut dari folder danApplication_account: Log_archive_account

  1. Kloning GitHub repositori dan konfigurasikan parameter input dalam file. terraform.tfvars

  2. Jalankan perintah berikut:

    $ terraform init
  3. Perubahan pratinjau:

    $ terraform plan

    Perintah ini mengevaluasi konfigurasi Terraform untuk menentukan status sumber daya yang diinginkan dan membandingkannya dengan status infrastruktur Anda saat ini.

  4. Terapkan perubahan:

    $ terraform apply
  5. Tinjau perubahan yang direncanakan dan ketik ya pada prompt untuk melanjutkan aplikasi.

DevOps insinyur
TugasDeskripsiKeterampilan yang dibutuhkan

Verifikasi filter langganan.

Untuk memverifikasi bahwa langganan memfilter meneruskan log dengan benar dari grup log akun Aplikasi ke akun Arsip Log:

  1. Di akun Aplikasi, buka CloudWatch konsol.

  2. Pada panel navigasi kiri, pilih Grup log.

  3. Pilih setiap grup log (/aws/rds,/aws/eks,/aws/lambda) dan pilih tab Filter langganan.

    Anda akan melihat filter langganan aktif yang mengarah ke ARN tujuan, berdasarkan nama yang Anda tentukan dalam file konfigurasi Terraform.

  4. Pilih filter langganan apa pun untuk memverifikasi konfigurasi dan statusnya.

DevOps insinyur

Verifikasi aliran Firehose.

Untuk memverifikasi bahwa Firehose melakukan streaming di log aplikasi proses akun Arsip Log berhasil:

  1. Di akun Arsip Log, buka konsol Firehose.

  2. Di panel navigasi kiri, pilih Firehose stream.

  3. Pilih aliran Firehose dan verifikasi hal berikut:

    • Tujuan menunjukkan bucket S3 yang benar.

    • Tab Monitoring menunjukkan metrik pengiriman yang berhasil.

    • Stempel waktu pengiriman baru-baru ini adalah saat ini.

DevOps insinyur

Validasi bucket S3 terpusat.

Untuk memverifikasi bahwa bucket S3 terpusat menerima dan mengatur log dengan benar:

  1. Di akun Arsip Log, buka konsol Amazon S3.

  2. Pilih setiap bucket logging pusat.

  3. Arahkan melalui struktur folder: AWSLogs/AccountID/Region/Service.

    Anda akan melihat file log yang diatur oleh timestamp () YYYY/MM/DD/HH.

  4. Pilih file log terbaru dan verifikasi format dan integritas datanya.

DevOps insinyur

Validasi antrian SQS.

Untuk memverifikasi bahwa antrian SQS menerima pemberitahuan untuk file log baru:

  1. Di akun Arsip Log, buka konsol Amazon SQS.

  2. Di panel navigasi kiri, pilih Antrian.

  3. Pilih setiap antrian yang dikonfigurasi dan pilih Kirim dan terima pesan.

    Anda akan melihat pesan yang berisi pemberitahuan acara S3 untuk file log baru.

  4. Pilih pesan apa pun untuk memverifikasi bahwa pesan tersebut berisi informasi objek S3 yang benar.

DevOps insinyur
TugasDeskripsiKeterampilan yang dibutuhkan

Opsi 1 - Nonaktifkan file konfigurasi Terraform dari AFT.

Saat Anda menghapus file konfigurasi Terraform dan mendorong perubahan, AFT secara otomatis memulai proses penghapusan sumber daya.

  1. Arahkan ke aft-account-customizations repositori.

  2. Pergi ke terraform direktori.

  3. Hapus file-file berikut:

    • modulesdirektori

    • iam.tf

    • versions.tf

    • variables.tf

    • outputs.tf

    • terraform.tfvars

  4. Hapus isi main.tf file.

  5. Dorong perubahan Anda ke repositori:

    # Stage all changes $ git add * # Commit cleanup changes $ git commit -m "Remove AFT customizations" # Push to repository $ git push origin main
    catatan

    Jika Anda menggunakan cabang yang berbeda (sepertidev), ganti main dengan nama cabang Anda.

DevOps insinyur

Opsi 2 — Bersihkan sumber daya Terraform secara manual.

Jika Anda tidak menggunakan AFT atau Anda ingin membersihkan sumber daya secara manual, gunakan perintah Terraform berikut dari folder Application_account danLog_archive_account:

  1. Inisialisasi konfigurasi Terraform:

    $ terraform init

    Perintah ini menginisialisasi Terraform dan memastikan akses ke status saat ini.

  2. Pratinjau perubahan pembersihan:

    $ terraform destroy

    Perintah ini mengevaluasi sumber daya mana yang akan dihancurkan dan membandingkan keadaan yang diinginkan dengan keadaan infrastruktur Anda saat ini.

  3. Jalankan pembersihan. Saat Anda diminta, ketik ya untuk mengonfirmasi dan menjalankan rencana penghancuran.

DevOps insinyur

Pemecahan Masalah

IsuSolusi

Tujuan CloudWatch Log tidak dibuat atau tidak aktif.

Validasi berikut ini:

  1. Di akun Arsip Log, verifikasi bahwa kebijakan tujuan mencakup:

    • Prinsipal akun sumber yang benar.

    • Tindakan yang benar (logs:PutSubscriptionFilter).

    • ARN tujuan yang valid.

  2. Konfirmasikan bahwa aliran Firehose ada dan aktif.

  3. Verifikasi bahwa peran IAM yang dilampirkan ke tujuan memiliki izin untuk Firehose.

Filter langganan gagal atau macet dalam status tertunda.

Periksa hal-hal berikut:

  1. Di akun Aplikasi, verifikasi bahwa peran IAM memiliki:

    • Izin untuk meneleponPutSubscriptionFilter.

    • Hubungan kepercayaan dengan CloudWatch Log.

  2. Konfirmasikan bahwa ARN tujuan sudah benar.

  3. Periksa CloudWatch Log untuk pesan kesalahan tertentu.

Aliran pengiriman Firehose tidak menunjukkan catatan yang masuk.

Verifikasi hal berikut:

  1. Konfirmasikan bahwa peran Firehose IAM memiliki:

    • Izin untuk menulis ke Amazon S3.

    • Akses ke AWS KMS kunci jika enkripsi diaktifkan.

  2. Tinjau CloudWatch metrik untuk:

    • IncomingRecords

    • DeliveryToS3.Records

  3. Verifikasi pengaturan buffer dan konfigurasi pengiriman.

Sumber daya terkait