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
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 mungkin
IsPublicFacing=True.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

Diagram ini menggambarkan hal sebagai berikut:
Ketika sebuah elastic network interface resource (
AWS::EC2::NetworkInterface) dikerahkan atau dimodifikasi, AWS Config menangkap peristiwa dan konfigurasi.AWS Config mencocokkan acara ini dengan aturan khusus yang digunakan untuk mengevaluasi konfigurasi.
AWS Lambda Fungsi yang terkait dengan aturan kustom ini dipanggil. Fungsi mengevaluasi sumber daya dan menerapkan logika yang ditentukan untuk menentukan apakah konfigurasi sumber daya
COMPLIANT,NON_COMPLIANTatauNOT_APPLICABLE.Jika sumber daya ditentukan
NON_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.

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
Epik
| Tugas | Deskripsi | Keterampilan yang dibutuhkan |
|---|---|---|
Buat fungsi Lambda. |
| AWS Umum |
Tambahkan izin ke peran eksekusi fungsi Lambda. |
| AWS Umum |
Ambil fungsi Lambda Amazon Resource Name (ARN). |
| AWS Umum |
Buat aturan AWS Config khusus. |
| AWS Umum |
Konfigurasikan pemberitahuan. |
| AWS Umum |
| Tugas | Deskripsi | Keterampilan yang dibutuhkan |
|---|---|---|
Buat sumber daya yang sesuai. |
| AWS Umum |
Buat sumber daya yang tidak sesuai. |
| AWS Umum |
Buat sumber daya yang tidak berlaku. |
| 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