Menyebarkan kontrol akses berbasis atribut detektif untuk subnet publik dengan menggunakan AWS Config - AWS Prescriptive Guidance

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

Menyebarkan kontrol akses berbasis atribut detektif untuk subnet publik dengan menggunakan AWS Config

Alberto Menendez, Amazon Web Services

Ringkasan

Arsitektur jaringan edge terdistribusi bergantung pada keamanan tepi jaringan yang berjalan di samping beban kerja di cloud pribadi virtual mereka ()VPCs. Ini memberikan skalabilitas yang belum pernah terjadi sebelumnya dibandingkan dengan pendekatan yang lebih umum dan terpusat. Meskipun menyebarkan subnet publik di akun beban kerja dapat memberikan manfaat, itu juga memperkenalkan risiko keamanan baru karena meningkatkan permukaan serangan. Kami menyarankan agar Anda hanya menggunakan sumber daya Elastic Load Balancing, seperti Application Load Balancers, atau gateway NAT di subnet publik ini. VPCs Menggunakan penyeimbang beban dan gateway NAT di subnet publik khusus membantu Anda menerapkan kontrol halus untuk lalu lintas masuk dan keluar.

Kami menyarankan Anda menerapkan kontrol pencegahan dan detektif untuk membatasi jenis sumber daya yang dapat digunakan di subnet publik. Untuk informasi selengkapnya tentang penggunaan kontrol akses berbasis atribut (ABAC) untuk menerapkan kontrol pencegahan untuk subnet publik, lihat Menerapkan kontrol akses berbasis atribut preventif untuk subnet publik. Meskipun efektif untuk sebagian besar situasi, kontrol pencegahan ini mungkin tidak mengatasi semua kemungkinan kasus penggunaan. Oleh karena itu, pola ini dibangun berdasarkan pendekatan ABAC dan membantu Anda mengonfigurasi peringatan tentang sumber daya yang tidak sesuai yang digunakan di subnet publik. Solusinya memeriksa apakah antarmuka jaringan elastis milik sumber daya yang tidak diizinkan di subnet publik.

Untuk mencapai ini, pola ini menggunakan aturan AWS Config khusus dan ABAC. Aturan kustom memproses konfigurasi elastic network interface setiap kali dibuat atau dimodifikasi. Pada tingkat tinggi, aturan ini melakukan dua tindakan untuk menentukan apakah antarmuka jaringan sesuai:

  1. Untuk menentukan apakah antarmuka jaringan berada dalam lingkup aturan, aturan memeriksa apakah subnet memiliki AWS tag tertentu yang menunjukkan itu adalah subnet publik. Misalnya, tag ini mungkinIsPublicFacing=True.

  2. Jika antarmuka jaringan dikerahkan di subnet publik, aturan akan memeriksa sumber daya yang Layanan AWS dibuat. Jika sumber daya bukan sumber daya Elastic Load Balancing atau gateway NAT, sumber daya tersebut menandai sumber daya sebagai tidak sesuai.

Prasyarat dan batasan

Prasyarat

  • Aktif Akun AWS

  • AWS Config, atur di akun beban kerja

  • Izin untuk menyebarkan sumber daya yang diperlukan di akun beban kerja

  • VPC dengan subnet publik

  • Tag diterapkan dengan benar untuk mengidentifikasi subnet publik target

  • (Opsional) Sebuah organisasi di AWS Organizations

  • (Opsional) Akun keamanan pusat yang merupakan administrator yang didelegasikan untuk AWS Config dan AWS Security Hub

Arsitektur

Arsitektur target

Menggunakan aturan kustom AWS Config untuk mendeteksi sumber daya yang tidak sesuai di subnet publik

Diagram ini menggambarkan hal sebagai berikut:

  1. Ketika sebuah elastic network interface resource (AWS::EC2::NetworkInterface) dikerahkan atau dimodifikasi, AWS Config menangkap peristiwa dan konfigurasi.

  2. AWS Config mencocokkan acara ini dengan aturan khusus yang digunakan untuk mengevaluasi konfigurasi.

  3. AWS Lambda Fungsi yang terkait dengan aturan kustom ini dipanggil. Fungsi mengevaluasi sumber daya dan menerapkan logika yang ditentukan untuk menentukan apakah konfigurasi sumber dayaCOMPLIANT, NON_COMPLIANT atauNOT_APPLICABLE.

  4. Jika sumber daya ditentukanNON_COMPLIANT, AWS Config kirimkan peringatan melalui Amazon Simple Notification Service (Amazon SNS).

    Catatan: Jika akun ini adalah akun anggota AWS Organizations, Anda dapat mengirim data kepatuhan ke akun keamanan pusat melalui AWS Config atau AWS Security Hub.

Logika evaluasi fungsi Lambda

Diagram berikut menunjukkan logika yang diterapkan oleh fungsi Lambda untuk mengevaluasi kepatuhan antarmuka elastic network.

Diagram logika fungsi Lambda

Otomatisasi dan skala

Pola ini adalah solusi detektif. Anda juga dapat melengkapinya dengan aturan remediasi untuk secara otomatis menyelesaikan sumber daya yang tidak sesuai. Untuk informasi selengkapnya, lihat Memulihkan Sumber Daya yang Tidak Sesuai dengan Aturan. AWS Config

Anda dapat menskalakan solusi ini dengan:

  • Menegakkan penerapan AWS tag terkait yang Anda buat untuk mengidentifikasi subnet yang menghadap publik. Untuk informasi selengkapnya, lihat Kebijakan tag dalam AWS Organizations dokumentasi.

  • Mengonfigurasi akun keamanan pusat yang menerapkan aturan AWS Config khusus untuk setiap akun beban kerja di organisasi. Untuk informasi selengkapnya, lihat Mengotomatiskan kepatuhan konfigurasi sesuai skala AWS (posting AWS blog).

  • Mengintegrasikan AWS Config dengan AWS Security Hub untuk menangkap, memusatkan, dan memberi tahu dalam skala besar. Untuk informasi selengkapnya, lihat Mengkonfigurasi AWS Config dalam AWS Security Hub dokumentasi.

Alat

  • AWS Configmemberikan tampilan rinci tentang sumber daya di Anda Akun AWS dan bagaimana mereka dikonfigurasi. Ini membantu Anda mengidentifikasi bagaimana sumber daya terkait satu sama lain dan bagaimana konfigurasinya telah berubah dari waktu ke waktu.

  • Elastic Load Balancing mendistribusikan lalu lintas aplikasi atau jaringan yang masuk ke beberapa target. Misalnya, Anda dapat mendistribusikan lalu lintas di seluruh instans, container, dan alamat IP Amazon Elastic Compute Cloud (Amazon EC2) di satu atau beberapa Availability Zone.

  • AWS Lambdaadalah layanan komputasi yang membantu Anda menjalankan kode tanpa perlu menyediakan atau mengelola server. Ini menjalankan kode Anda hanya bila diperlukan dan skala secara otomatis, jadi Anda hanya membayar untuk waktu komputasi yang Anda gunakan.

  • Amazon Simple Notification Service (Amazon SNS) membantu Anda mengoordinasikan dan mengelola pertukaran pesan antara penayang dan klien, termasuk server web dan alamat email. 

  • 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

Praktik terbaik

Untuk lebih banyak contoh dan praktik terbaik untuk mengembangkan AWS Config aturan kustom, lihat Repositori AWS Config Aturan resmi di. GitHub

Epik

TugasDeskripsiKeterampilan yang dibutuhkan

Buat fungsi Lambda.

  1. Masuk ke AWS Management Console, lalu buka AWS Lambda konsol.

  2. Pada halaman Fungsi, pilih Buat fungsi.

  3. Pilih Penulis dari awal.

  4. Di panel Informasi dasar, untuk nama Fungsi, masukkan nama.

  5. Untuk Runtime, pilih Python 3.12.

  6. Biarkan arsitektur diatur ke x86_64.

  7. Pilih Buat fungsi.

  8. Pilih tab Kode.

  9. Di file explorer, pilih lambda_function.py.

  10. Tempelkan kode sampel yang disediakan di bagian Informasi tambahan dari pola ini ke tab lambda_function.py. Sesuaikan kode sampel untuk mengidentifikasi logika evaluasi kustom dalam evaluate_change_notification_compliance fungsi.

  11. Pilih Deploy.

AWS Umum

Tambahkan izin ke peran eksekusi fungsi Lambda.

  1. Di panel navigasi, pilih Fungsi.

  2. Pilih fungsi yang baru saja Anda buat.

  3. Pilih Konfigurasi, lalu pilih Izin.

  4. Pilih nama peran untuk membuka peran di konsol AWS Identity and Access Management (IAM).

  5. Di bawah Kebijakan izin, pilih Tambahkan izin, lalu pilih Buat kebijakan sebaris.

  6. PilihJSON.

  7. Tempelkan kebijakan berikut ke editor kebijakan. Ini memungkinkan fungsi Lambda untuk:

    • Dapatkan detail tag subnet.

    • Kirim hasil kepatuhan kembali ke AWS Config.

    { "Version": "2012-10-17", "Statement": [ { "Action": [ "config:PutEvaluations", "ec2:DescribeSubnets" ], "Resource": "*", "Effect": "Allow" } ] }
  8. Pilih Berikutnya.

  9. Masukkan nama untuk kebijakan tersebut, lalu pilih Buat kebijakan.

AWS Umum

Ambil fungsi Lambda Amazon Resource Name (ARN).

  1. Buka Konsol Lambda.

  2. Di panel navigasi, pilih Fungsi.

  3. Pilih fungsi yang baru saja Anda buat.

  4. Di bagian Ikhtisar fungsi, di bawah Fungsi ARN, salin nilainya.

AWS Umum

Buat aturan AWS Config khusus.

  1. Buka konsol AWS Config.

  2. Pada halaman Aturan, pilih Tambahkan aturan.

  3. Pada halaman Tentukan tipe aturan, pilih Buat aturan Lambda kustom, lalu pilih Berikutnya.

  4. Pada halaman Konfigurasi aturan, lakukan hal berikut:

    1. Masukkan nama dan deskripsi.

    2. Untuk AWS Lambda fungsi ARN, tempel ARN yang sebelumnya Anda salin.

    3. Untuk jenis Pemicu, pilih Saat konfigurasi berubah.

    4. Untuk Lingkup perubahan, pilih Sumber Daya.

    5. Untuk jenis Sumber Daya, pilih AWS EC2 NetworkInterface.

    6. Pilih Berikutnya.

  5. Pada halaman Tinjau dan buat, verifikasi aturan Anda, lalu pilih Simpan.

AWS Umum

Konfigurasikan pemberitahuan.

AWS Umum
TugasDeskripsiKeterampilan yang dibutuhkan

Buat sumber daya yang sesuai.

  1. Gunakan petunjuk berikut untuk membuat salah satu sumber daya yang didukung di subnet publik:

  2. Setelah sumber daya dibuat, aturan AWS Config kustom mengevaluasi antarmuka jaringan elastis yang terkait dengan sumber daya. Ini menandai antarmuka jaringan ini sebagaiCOMPLIANT. Anda dapat melihat sumber daya AWS Config dengan mengikuti langkah-langkah berikut:

    1. Buka konsol AWS Config.

    2. Pada halaman Aturan, pilih aturan Anda.

    3. Pada halaman Rule Detail, buka bagian bawah halaman.

    4. Di bawah Resources in scope, pilih Compliant. Konfirmasikan bahwa Anda melihat antarmuka jaringan yang dibuat. IDs

    5. Untuk detail lebih lanjut tentang konfigurasi antarmuka jaringan, pilih ID sumber daya.

AWS Umum

Buat sumber daya yang tidak sesuai.

  1. Gunakan petunjuk berikut untuk membuat sumber daya yang tidak sesuai di subnet publik:

  2. Setelah sumber daya dibuat, aturan AWS Config kustom mengevaluasi antarmuka jaringan elastis yang terkait dengan sumber daya. Ini menandai antarmuka jaringan ini sebagaiNON_COMPLIANT. Anda dapat melihat sumber daya AWS Config dengan mengikuti langkah-langkah berikut:

    1. Buka konsol AWS Config.

    2. Pada halaman Aturan, pilih aturan Anda.

    3. Pada halaman Rule Detail, buka bagian bawah halaman.

    4. Di bawah Resources in scope, pilih NonCompliant. Konfirmasikan bahwa Anda melihat antarmuka jaringan yang dibuat. IDs

    5. Untuk detail lebih lanjut tentang konfigurasi antarmuka jaringan, pilih ID sumber daya.

  3. Konfirmasikan bahwa Anda menerima pemberitahuan di titik akhir yang Anda konfigurasikan di Amazon SNS.

AWS Umum

Buat sumber daya yang tidak berlaku.

  1. Dalam subnet pribadi, buat sumber daya apa pun yang membutuhkan elastic network interface.

  2. Setelah sumber daya dibuat, aturan AWS Config kustom mengevaluasi antarmuka jaringan elastis yang terkait dengan sumber daya. Ini menandai antarmuka jaringan ini sebagaiNOT_APPLICABLE. Sumber daya ini tidak ditampilkan di AWS Config konsol.

AWS Umum

Sumber daya terkait

AWS dokumentasi

AWS Sumber daya lainnya

Informasi tambahan

Berikut ini adalah contoh fungsi Lambda yang disediakan untuk tujuan demonstrasi.

import boto3 import json import os # Init clients config_client = boto3.client('config') ec2_client = boto3.client('ec2') def lambda_handler(event, context): # Init values compliance_value = 'NOT_APPLICABLE' invoking_event = json.loads(event['invokingEvent']) configuration_item = invoking_event['configurationItem'] status = configuration_item['configurationItemStatus'] eventLeftScope = event['eventLeftScope'] # First check if the event configuration applies. Ex. resource event is not delete if (status == 'OK' or status == 'ResourceDiscovered') and not eventLeftScope: compliance_value = evaluate_change_notification_compliance(configuration_item) config_client.put_evaluations( Evaluations=[ { 'ComplianceResourceType': invoking_event['configurationItem']['resourceType'], 'ComplianceResourceId': invoking_event['configurationItem']['resourceId'], 'ComplianceType': compliance_value, 'OrderingTimestamp': invoking_event['configurationItem']['configurationItemCaptureTime'] }, ], ResultToken=event['resultToken']) # Function with the logs to evaluate the resource def evaluate_change_notification_compliance(configuration_item): is_in_scope = is_in_scope_subnet(configuration_item['configuration']['subnetId']) if (configuration_item['resourceType'] != 'AWS::EC2::NetworkInterface') or not is_in_scope: return 'NOT_APPLICABLE' else: alb_condition = configuration_item['configuration']['requesterId'] in ['amazon-elb'] nlb_condition = configuration_item['configuration']['interfaceType'] in ['network_load_balancer'] nat_gateway_condition = configuration_item['configuration']['interfaceType'] in ['nat_gateway'] if alb_condition or nlb_condition or nat_gateway_condition: return 'COMPLIANT' return 'NON_COMPLIANT' # Function to check if elastic network interface is in public subnet def is_in_scope_subnet(eni_subnet): subnet_description = ec2_client.describe_subnets( SubnetIds=[eni_subnet] ) for subnet in subnet_description['Subnets']: for tag in subnet['Tags']: if tag['Key'] == os.environ.get('TAG_KEY') and tag['Value'] == os.environ.get('TAG_VALUE'): return True return False