

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
<a name="create-aws-config-custom-rules-by-using-aws-cloudformation-guard-policies"></a>

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

## Ringkasan
<a name="create-aws-config-custom-rules-by-using-aws-cloudformation-guard-policies-summary"></a>

[AWS Config](https://docs.aws.amazon.com/config/latest/developerguide/WhatIsConfig.html)aturan 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](https://github.com/aws-cloudformation/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](https://docs.aws.amazon.com/config/latest/developerguide/config-concepts.html#config-items). 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:
+ Memahami bagaimana kode kebijakan Guard berinteraksi dengan AWS Config layanan.
+ Terapkan *Skenario 1*, yang merupakan aturan AWS Config khusus yang menggunakan sintaks Guard untuk memvalidasi kepatuhan untuk volume terenkripsi. [Aturan ini memverifikasi bahwa drive sedang digunakan dan memverifikasi bahwa jenis drive adalah gp3.](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/general-purpose.html#gp3-ebs-volume-type)
+ Terapkan *Skenario 2*, yang merupakan aturan AWS Config khusus yang menggunakan sintaks Guard untuk memvalidasi kepatuhan Amazon GuardDuty . Aturan ini memverifikasi bahwa GuardDuty perekam mengaktifkan Perlindungan [Amazon Simple Storage Service (Amazon S3) dan Perlindungan Amazon](https://docs.aws.amazon.com/guardduty/latest/ug/s3-protection.html) [Elastic Kubernetes Service (Amazon EKS](https://docs.aws.amazon.com/guardduty/latest/ug/kubernetes-protection.html)).

## Prasyarat dan batasan
<a name="create-aws-config-custom-rules-by-using-aws-cloudformation-guard-policies-prereqs"></a>

**Prasyarat**
+ Aktif Akun AWS
+ AWS Config, [atur](https://docs.aws.amazon.com/config/latest/developerguide/getting-started.html) di Anda Akun AWS

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

## Arsitektur
<a name="create-aws-config-custom-rules-by-using-aws-cloudformation-guard-policies-architecture"></a>

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](https://github.com/aws-samples/aws-config-custom-rule-cloudformation-guard/blob/main/awsconfig-guard-tf-ec2vol.json)](https://github.com/aws-samples/aws-config-custom-rule-cloudformation-guard/blob/main/awsconfig-guard-cft.yaml) di repositori kode. GitHub Untuk kode HashiCorp Terraform yang menerapkan kebijakan kustom ini di Guard, lihat [awsconfig-guard-tf-example.json](https://github.com/aws-samples/aws-config-custom-rule-cloudformation-guard/blob/main/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](https://github.com/aws-samples/aws-config-custom-rule-cloudformation-guard/blob/main/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](https://github.com/aws-samples/aws-config-custom-rule-cloudformation-guard/blob/main/awsconfig-guard-tf-gd.json) di repositori kode.

## Alat
<a name="create-aws-config-custom-rules-by-using-aws-cloudformation-guard-policies-tools"></a>

**Layanan AWS**
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)membantu Anda menyiapkan AWS sumber daya, menyediakannya dengan cepat dan konsisten, dan mengelolanya sepanjang siklus hidupnya di seluruh Akun AWS dan Wilayah.
+ [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.

**Alat lainnya**
+ [HashiCorp Terraform](https://www.terraform.io/docs) 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](https://github.com/aws-samples/aws-config-custom-rule-cloudformation-guard/tree/main). Repositori kode ini berisi sampel untuk kedua skenario yang dijelaskan dalam pola ini.

## Epik
<a name="create-aws-config-custom-rules-by-using-aws-cloudformation-guard-policies-epics"></a>

### Membuat aturan AWS Config khusus
<a name="creating-cc-custom-rules"></a>


| Tugas | Deskripsi | Keterampilan 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.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/create-aws-config-custom-rules-by-using-aws-cloudformation-guard-policies.html) | 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](https://docs.aws.amazon.com/config/latest/developerguide/evaluate-config_develop-rules_cfn-guard.html#create-cfn-guard-rule-console) kustom. | Administrator AWS, Insinyur keamanan | 
| Validasi aturan kustom. | Lakukan salah satu hal berikut untuk memvalidasi aturan Penjaga kustom:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/create-aws-config-custom-rules-by-using-aws-cloudformation-guard-policies.html) | Administrator AWS, Insinyur keamanan | 

## Pemecahan masalah
<a name="create-aws-config-custom-rules-by-using-aws-cloudformation-guard-policies-troubleshooting"></a>


| Isu | Solusi | 
| --- | --- | 
| 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:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/create-aws-config-custom-rules-by-using-aws-cloudformation-guard-policies.html) | 
| Debug aturan AWS Config kustom | Dalam kebijakan Penjaga Anda, ubah `EnableDebugLogDelivery` nilainya menjadi`true`. Nilai default-nya adalah `false`. Pesan log disimpan di Amazon CloudWatch. | 

## Sumber daya terkait
<a name="create-aws-config-custom-rules-by-using-aws-cloudformation-guard-policies-resources"></a>

**AWS dokumentasi**
+ [Membuat Aturan Kebijakan AWS Config Kustom](https://docs.aws.amazon.com/config/latest/developerguide/evaluate-config_develop-rules_cfn-guard.html) (AWS Config dokumentasi)
+ [AWS CloudFormation Guard Aturan penulisan](https://docs.aws.amazon.com/cfn-guard/latest/ug/writing-rules.html) (Dokumentasi penjaga)

**AWS posting blog dan lokakarya**
+ [Memperkenalkan AWS CloudFormation Guard 2.0](https://aws.amazon.com/blogs/mt/introducing-aws-cloudformation-guard-2-0/) (posting AWS blog)

**Sumber daya lainnya**
+ [AWS CloudFormation Guard](https://github.com/aws-cloudformation/cloudformation-guard) (GitHub)
+ [AWS CloudFormation Guard Dokumentasi CLI](https://github.com/aws-cloudformation/cloudformation-guard#guard-cli) () GitHub