

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
<a name="deploy-detective-attribute-based-access-controls-for-public-subnets-by-using-aws-config"></a>

*Alberto Menendez, Amazon Web Services*

## Ringkasan
<a name="deploy-detective-attribute-based-access-controls-for-public-subnets-by-using-aws-config-summary"></a>

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 preventif 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](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/deploy-preventative-attribute-based-access-controls-for-public-subnets.html) 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](https://docs.aws.amazon.com/config/latest/developerguide/evaluate-config_develop-rules.html) dan [ABAC](https://aws.amazon.com/identity/attribute-based-access-control/). 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](https://docs.aws.amazon.com/tag-editor/latest/userguide/tagging.html) tertentu yang menunjukkan itu adalah subnet publik. Misalnya, tag ini mungkin`IsPublicFacing=True`.

1. 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
<a name="deploy-detective-attribute-based-access-controls-for-public-subnets-by-using-aws-config-prereqs"></a>

**Prasyarat**
+ Aktif Akun AWS
+ AWS Config, [atur](https://docs.aws.amazon.com/config/latest/developerguide/gs-console.html) 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 CSPM

## Arsitektur
<a name="deploy-detective-attribute-based-access-controls-for-public-subnets-by-using-aws-config-architecture"></a>

**Arsitektur target**

![\[Menggunakan aturan kustom AWS Config untuk mendeteksi sumber daya yang tidak sesuai di subnet publik\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/85d54ead-7f00-4381-89fb-cffe307c4cfc/images/a8c19913-d260-4b70-96ba-732bb1b9881f.png)


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.

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

1.  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_COMPLIANT` atau`NOT_APPLICABLE`.

1. Jika sumber daya ditentukan`NON_COMPLIANT`, AWS Config kirimkan peringatan melalui Amazon Simple Notification Service (Amazon SNS).    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/deploy-detective-attribute-based-access-controls-for-public-subnets-by-using-aws-config.html)

**Logika evaluasi fungsi Lambda**

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

![\[Diagram logika fungsi Lambda\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/85d54ead-7f00-4381-89fb-cffe307c4cfc/images/9575e20f-142b-4eba-b34d-3b9bda163144.png)


**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](https://docs.aws.amazon.com/config/latest/developerguide/remediation.html). 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](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_tag-policies.html) 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](https://aws.amazon.com/blogs/mt/automate-configuration-compliance-at-scale-in-aws/) (posting AWS blog).
+ Mengintegrasikan AWS Config dengan AWS Security Hub CSPM untuk menangkap, memusatkan, dan memberi tahu dalam skala besar. Untuk informasi selengkapnya, lihat [Mengkonfigurasi AWS Config](https://docs.aws.amazon.com/securityhub/latest/userguide/securityhub-prereq-config.html) dalam AWS Security Hub CSPM dokumentasi.

## Alat
<a name="deploy-detective-attribute-based-access-controls-for-public-subnets-by-using-aws-config-tools"></a>
+ [AWS Config](https://docs.aws.amazon.com/config/latest/developerguide/WhatIsConfig.html)memberikan 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](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/what-is-load-balancing.html) 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 Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)adalah 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](https://docs.aws.amazon.com/sns/latest/dg/welcome.html)) membantu Anda mengoordinasikan dan mengelola pertukaran pesan antara penayang dan klien, termasuk server web dan alamat email. 
+ [Amazon Virtual Private Cloud (Amazon VPC)](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html) 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
<a name="deploy-detective-attribute-based-access-controls-for-public-subnets-by-using-aws-config-best-practices"></a>

Untuk lebih banyak contoh dan praktik terbaik untuk mengembangkan AWS Config aturan kustom, lihat [Repositori AWS Config Aturan](https://github.com/awslabs/aws-config-rules) resmi di. GitHub

## Epik
<a name="deploy-detective-attribute-based-access-controls-for-public-subnets-by-using-aws-config-epics"></a>

### Terapkan solusinya
<a name="deploy-the-solution"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat fungsi Lambda. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/deploy-detective-attribute-based-access-controls-for-public-subnets-by-using-aws-config.html) | AWS Umum | 
| Tambahkan izin ke peran eksekusi fungsi Lambda. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/deploy-detective-attribute-based-access-controls-for-public-subnets-by-using-aws-config.html) | AWS Umum | 
| Ambil fungsi Lambda Amazon Resource Name (ARN). | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/deploy-detective-attribute-based-access-controls-for-public-subnets-by-using-aws-config.html) | AWS Umum | 
| Buat aturan AWS Config kustom. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/deploy-detective-attribute-based-access-controls-for-public-subnets-by-using-aws-config.html) | AWS Umum | 
| Konfigurasikan pemberitahuan. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/deploy-detective-attribute-based-access-controls-for-public-subnets-by-using-aws-config.html) | AWS Umum | 

### Pengujian solusi
<a name="test-the-solution"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat sumber daya yang sesuai. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/deploy-detective-attribute-based-access-controls-for-public-subnets-by-using-aws-config.html) | AWS Umum | 
| Buat sumber daya yang tidak sesuai. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/deploy-detective-attribute-based-access-controls-for-public-subnets-by-using-aws-config.html) | AWS Umum | 
| Buat sumber daya yang tidak berlaku. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/deploy-detective-attribute-based-access-controls-for-public-subnets-by-using-aws-config.html) | AWS Umum | 

## Sumber daya terkait
<a name="deploy-detective-attribute-based-access-controls-for-public-subnets-by-using-aws-config-resources"></a>

**AWS dokumentasi**
+ [Menyiapkan AWS Config](https://docs.aws.amazon.com/config/latest/developerguide/gs-console.html)
+ [AWS Config aturan kustom](https://docs.aws.amazon.com/config/latest/developerguide/evaluate-config_develop-rules.html)
+ [ABAC untuk AWS](https://aws.amazon.com/identity/attribute-based-access-control/)
+ [Menyebarkan kontrol akses berbasis atribut preventif untuk subnet publik](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/deploy-preventative-attribute-based-access-controls-for-public-subnets.html)

** AWS Sumber daya lainnya**
+ [Otomatiskan kepatuhan konfigurasi pada skala besar AWS](https://aws.amazon.com/blogs/mt/automate-configuration-compliance-at-scale-in-aws/)
+ [Arsitektur Inspeksi Terdistribusi dengan Load Balancer Gateway](https://d1.awsstatic.com/architecture-diagrams/ArchitectureDiagrams/distributed-inspection-architectures-gwlb-ra.pdf)

## Informasi tambahan
<a name="deploy-detective-attribute-based-access-controls-for-public-subnets-by-using-aws-config-additional"></a>

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
```