Buat aturan AWS Config khusus dengan menggunakan AWS CloudFormation Guard kebijakan - AWS Prescriptive Guidance

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

Buat aturan AWS Config khusus dengan menggunakan AWS CloudFormation Guard kebijakan

Andrew Lok, Nicole Brown, Kailash Havildar, dan Tanya Howell, Amazon Web Services

Ringkasan

AWS Configaturan membantu Anda mengevaluasi AWS sumber daya dan status konfigurasi targetnya. Ada dua jenis AWS Config aturan: dikelola dan kustom. Anda dapat membuat aturan kustom dengan AWS Lambda fungsi atau dengan AWS CloudFormation Guard(GitHub), policy-as-code bahasa.

Aturan yang dibuat dengan Guard memberikan kontrol yang lebih terperinci daripada aturan terkelola, dan biasanya lebih mudah dikonfigurasi daripada aturan Lambda yang sepenuhnya disesuaikan. Pendekatan ini memberi insinyur dan arsitek kemampuan untuk membangun aturan tanpa perlu mengetahui Python, NodeJS, atau Java, yang diperlukan untuk menerapkan aturan khusus melalui Lambda.

Pola ini menyediakan templat yang dapat diterapkan, contoh kode, dan pendekatan penerapan untuk membantu Anda mengadopsi aturan khusus dengan Guard. Dengan menggunakan pola ini, administrator dapat menggunakan AWS Config untuk membuat aturan kepatuhan khusus yang memiliki atribut item konfigurasi. Misalnya, pengembang dapat menggunakan kebijakan Guard terhadap item AWS Config konfigurasi untuk terus memantau status penerapan AWS dan AWS non-sumber daya, mendeteksi pelanggaran aturan, dan secara otomatis memulai remediasi.

Tujuan

Setelah membaca pola ini, Anda harus dapat:

Prasyarat dan batasan

Prasyarat

  • Aktif Akun AWS

  • AWS Config, atur di Anda Akun AWS

Batasan

  • Aturan kustom penjaga hanya dapat menanyakan pasangan kunci-nilai dalam item konfigurasi target catatan JSON

Arsitektur

Anda menerapkan sintaks Guard ke AWS Config aturan sebagai kebijakan kustom. AWS Config menangkap JSON hierarkis dari masing-masing sumber daya yang ditentukan. JSON dari item AWS Config konfigurasi berisi pasangan kunci-nilai. Atribut ini digunakan dalam sintaks Guard sebagai variabel yang ditetapkan ke nilai yang sesuai. 

Berikut ini adalah penjelasan dari sintaks Guard. Variabel dari item konfigurasi JSON digunakan dan ditambahkan dengan karakter. %

# declare variable let <variable name> = <'value'> # create rule and assign condition and policy rule <rule name> when <CI json key> == <"CI json value"> { <top level CI json key>.<next level CI json key> == %<variable name> }

Skenario 1: Volume Amazon EBS

Skenario 1 menerapkan aturan AWS Config kustom yang menggunakan sintaks Guard untuk memvalidasi kepatuhan untuk volume terenkripsi. Aturan ini memverifikasi bahwa drive sedang digunakan dan memverifikasi bahwa jenis drive adalah gp3.

Berikut ini adalah contoh item AWS Config konfigurasi untuk skenario 1. Ada tiga pasangan kunci-nilai dalam item konfigurasi ini yang digunakan sebagai variabel dalam kebijakan Guard:volumestatus,volumeencryptionstatus, dan. volumetype Juga, resourceType kunci digunakan sebagai filter dalam kebijakan Penjaga.

{ "version": "1.3", "accountId": "111111111111", "configurationItemCaptureTime": "2023-01-15T19:04:45.402Z", "configurationItemStatus": "ResourceDiscovered", "configurationStateId": "4444444444444", "configurationItemMD5Hash": "", "arn": "arn:aws:ec2:us-west-2:111111111111:volume/vol-222222222222", "resourceType": "AWS::EC2::Volume", "resourceId": "vol-222222222222", "awsRegion": "us-west-2", "availabilityZone": "us-west-2b", "resourceCreationTime": "2023-01-15T19:03:22.247Z", "tags": {}, "relatedEvents": [], "relationships": [ { "resourceType": "AWS::EC2::Instance", "resourceId": "i-33333333333333333", "relationshipName": "Is attached to Instance" } ], "configuration": { "attachments": [ { "attachTime": "2023-01-15T19:03:22.000Z", "device": "/dev/xvda", "instanceId": "i-33333333333333333", "state": "attached", "volumeId": "vol-222222222222", "deleteOnTermination": true, "associatedResource": null, "instanceOwningService": null } ], "availabilityZone": "us-west-2b", "createTime": "2023-01-15T19:03:22.247Z", "encrypted": false, "kmsKeyId": null, "outpostArn": null, "size": 8, "snapshotId": "snap-55555555555555555", "state": "in-use", "volumeId": "vol-222222222222", "iops": 100, "tags": [], "volumeType": "gp2", "fastRestored": null, "multiAttachEnabled": false, "throughput": null, "sseType": null }, "supplementaryConfiguration": {} }

Berikut ini adalah contoh menggunakan sintaks Guard untuk menentukan variabel dan aturan dalam skenario 1. Dalam contoh berikut:

  • Tiga baris pertama mendefinisikan variabel dengan menggunakan let perintah.  Mereka diberi nama dan nilai yang berasal dari atribut item konfigurasi.

  • Blok compliancecheck aturan menambahkan dependensi kondisional when yang mencari pasangan resourceType kunci-nilai yang cocok. AWS::EC2::Volume Jika kecocokan ditemukan, aturan berlanjut melalui atribut JSON lainnya dan mencari kecocokan pada tiga kondisi berikut:state,encrypted, dan. volumeType

let volumestatus = 'available' let volumetype = 'gp3' let volumeencryptionstatus = true rule compliancecheck when resourceType == "AWS::EC2::Volume" { configuration.state == %volumestatus configuration.encrypted == %volumeencryptionstatus configuration.volumeType == %volumetype }

Untuk kebijakan kustom Guard lengkap yang mengimplementasikan aturan kustom ini, lihat awsconfig-guard-cft.yaml atau awsconfig-guard-tf-ec2vol.json di repositori kode. GitHub Untuk kode HashiCorp Terraform yang menerapkan kebijakan kustom ini di Guard, lihat awsconfig-guard-tf-example.json di repositori kode.

Skenario 2: GuardDuty kepatuhan

Skenario 2 menerapkan aturan AWS Config khusus yang menggunakan sintaks Guard untuk memvalidasi kepatuhan Amazon GuardDuty . Aturan ini memverifikasi bahwa GuardDuty perekam mengaktifkan Perlindungan Amazon S3 dan Perlindungan Amazon EKS. Ini juga memverifikasi bahwa GuardDuty temuan dipublikasikan setiap 15 menit. Skenario ini dapat diterapkan di semua Akun AWS dan Wilayah AWS dalam organisasi (in AWS Organizations).

Berikut ini adalah contoh item AWS Config konfigurasi untuk skenario 2. Ada tiga pasangan kunci-nilai dalam item konfigurasi ini yang digunakan sebagai variabel dalam kebijakan Guard:FindingPublishingFrequency,S3Logs, dan. Kubernetes Juga, resourceType kunci digunakan sebagai filter dalam kebijakan.

{ "version": "1.3", "accountId": "111111111111", "configurationItemCaptureTime": "2023-11-27T13:34:28.888Z", "configurationItemStatus": "OK", "configurationStateId": "7777777777777", "configurationItemMD5Hash": "", "arn": "arn:aws:guardduty:us-west-2:111111111111:detector/66666666666666666666666666666666", "resourceType": "AWS::GuardDuty::Detector", "resourceId": "66666666666666666666666666666666", "resourceName": "66666666666666666666666666666666", "awsRegion": "us-west-2", "availabilityZone": "Regional", "resourceCreationTime": "2020-02-17T02:48:04.511Z", "tags": {}, "relatedEvents": [], "relationships": [], "configuration": { "Enable": true, "FindingPublishingFrequency": "FIFTEEN_MINUTES", "DataSources": { "S3Logs": { "Enable": true }, "Kubernetes": { "AuditLogs": { "Enable": true } } }, "Id": "66666666666666666666666666666666", "Tags": [] }, "supplementaryConfiguration": { "CreatedAt": "2020-02-17T02:48:04.511Z" } }

Berikut ini adalah contoh menggunakan sintaks Guard untuk menentukan variabel dan aturan dalam skenario 2. Dalam contoh berikut:

  • Tiga baris pertama mendefinisikan variabel dengan menggunakan let perintah.  Mereka diberi nama dan nilai yang berasal dari atribut item konfigurasi.

  • Blok compliancecheck aturan menambahkan dependensi kondisional when yang mencari pasangan resourceType kunci-nilai yang cocok. AWS::GuardDuty::Detector Jika kecocokan ditemukan, aturan berlanjut melalui atribut JSON lainnya dan mencari kecocokan pada tiga kondisi berikut:S3Logs.Enable,Kubernetes.AuditLogs.Enable, dan. FindingPublishingFrequency

let s3protection = true let kubernetesprotection = true let publishfrequency = 'FIFTEEN_MINUTES' rule compliancecheck when resourceType == "AWS::GuardDuty::Detector" { configuration.DataSources.S3Logs.Enable == %s3protection configuration.DataSources.Kubernetes.AuditLogs.Enable == %kubernetesprotection configuration.FindingPublishingFrequency == %publishfrequency }

Untuk kebijakan kustom Guard lengkap yang mengimplementasikan aturan kustom ini, lihat awsconfig-guard-cft-gd.yaml di repositori kode. GitHub Untuk kode HashiCorp Terraform yang menerapkan kebijakan kustom ini di Guard, lihat awsconfig-guard-tf-gd.json di repositori kode.

Alat

Layanan AWS

  • AWS CloudFormationmembantu Anda menyiapkan AWS sumber daya, menyediakannya dengan cepat dan konsisten, dan mengelolanya sepanjang siklus hidupnya di seluruh Akun AWS dan Wilayah.

  • 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.

Alat lainnya

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

Repositori kode

Kode untuk pola ini tersedia di AWS CloudFormation Guard repositori GitHub AWS Config with. Repositori kode ini berisi sampel untuk kedua skenario yang dijelaskan dalam pola ini.

Epik

TugasDeskripsiKeterampilan yang dibutuhkan

(Opsional) Pilih pasangan kunci-nilai untuk aturan.

Selesaikan langkah-langkah ini jika Anda mendefinisikan kebijakan Penjaga kustom. Jika Anda menggunakan salah satu contoh kebijakan untuk skenario 1 atau 2, lewati langkah-langkah ini.

  1. Masuk ke AWS Management Console dan buka AWS Config konsol.

  2. Di navigasi kiri, pilih Resources.

  3. Dalam inventaris sumber daya, pilih jenis sumber daya yang ingin Anda buat aturan AWS Config kustom.

  4. Pilih Lihat detail.

  5. Pilih Lihat Item Konfigurasi (JSON). Bagian ini diperluas untuk menampilkan item konfigurasi dalam format JSON.

  6. Identifikasi pasangan nilai kunci yang ingin Anda buat aturan AWS Config khusus.

Administrator AWS, Insinyur keamanan

Buat aturan khusus.

Menggunakan pasangan kunci-nilai yang Anda identifikasi sebelumnya atau menggunakan salah satu contoh kebijakan Guard yang disediakan, ikuti petunjuk dalam Membuat Aturan Kebijakan AWS Config Kustom untuk membuat aturan kustom.

Administrator AWS, Insinyur keamanan

Validasi aturan kustom.

Lakukan salah satu hal berikut untuk memvalidasi aturan Penjaga kustom:

  • Masukkan perintah berikut di AWS Command Line Interface (AWS CLI).

    cfn-guard validate -r guard-s3.guard -d s3bucket-prod-pass.json
  • Ikuti instruksi dalam mode Detektif dalam Mengevaluasi Sumber Daya Anda dengan AWS Config Aturan untuk menerapkan aturan. AWS Config Konfirmasikan bahwa sintaks Guard cocok dengan benar dengan sumber daya yang sesuai di akun atau file target.

Administrator AWS, Insinyur keamanan

Pemecahan Masalah

IsuSolusi

Uji kebijakan Penjaga di luar AWS Config

Pengujian unit dapat dilakukan pada perangkat lokal Anda atau dalam lingkungan pengembangan terintegrasi (IDE), seperti AWS Cloud9 IDE. Untuk melakukan pengujian unit, lakukan hal berikut:

  1. Instal AWS CloudFormation Guard CLI dan dependensinya.

  2. Simpan sampel CI berformat JSON ke workstation Anda sebagai file.json.

  3. Simpan GuardDuty kebijakan ke workstation Anda sebagai file.guard.

  4. Di CLI Penjaga, masukkan perintah berikut untuk memvalidasi file JSON sampel dengan menggunakan kebijakan Guard.

    cfn-guard validate \ -r guard-s3.guard \ -d s3bucket-prod-pass.json

Debug aturan AWS Config kustom

Dalam kebijakan Penjaga Anda, ubah EnableDebugLogDelivery nilainya menjaditrue. Nilai default-nya adalah false. Pesan log disimpan di Amazon CloudWatch.

Sumber daya terkait

AWS dokumentasi

AWS posting blog dan lokakarya

Sumber daya lainnya