Aktifkan Amazon GuardDuty secara kondisional dengan menggunakan templat AWS CloudFormation - AWS Prescriptive Guidance

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

Aktifkan Amazon GuardDuty secara kondisional dengan menggunakan templat AWS CloudFormation

Ram Kandaswamy, Amazon Web Services

Ringkasan

AWS CloudFormation, alat infrastruktur sebagai kode (IAc), membantu Anda mengelola AWS sumber daya melalui penerapan berbasis template. CloudFormation Biasanya digunakan untuk mengelola AWS sumber daya. Menggunakannya untuk mengaktifkan Layanan AWS, seperti Amazon GuardDuty, dapat menghadirkan tantangan unik. GuardDuty adalah layanan deteksi ancaman yang terus memantau aktivitas berbahaya dan perilaku tidak sah Anda Akun AWS . Tidak seperti sumber daya tipikal yang dapat dibuat beberapa kali, GuardDuty adalah layanan yang perlu diaktifkan sekali per akun dan Wilayah AWS. CloudFormation Kondisi tradisional hanya mendukung perbandingan nilai statis, yang membuatnya sulit untuk memeriksa keadaan layanan saat ini seperti. GuardDuty Jika Anda mencoba mengaktifkan GuardDuty melalui CloudFormation akun yang sudah aktif, penerapan tumpukan gagal. Ini dapat menciptakan tantangan operasional bagi DevOps tim yang mengelola lingkungan multi-akun.

Pola ini memperkenalkan solusi untuk tantangan ini. Ini menggunakan sumber daya CloudFormation khusus yang didukung oleh AWS Lambdafungsi untuk melakukan pemeriksaan status dinamis. Logika kondisional GuardDuty hanya memungkinkan jika belum diaktifkan. Ini menggunakan output tumpukan untuk merekam GuardDuty status untuk referensi future.

Dengan mengikuti pola ini, Anda dapat mengotomatiskan GuardDuty penerapan di seluruh AWS infrastruktur sambil mempertahankan operasi tumpukan yang bersih dan dapat diprediksi CloudFormation . Pendekatan ini sangat berharga bagi organisasi yang:

  • Mengelola beberapa Akun AWS melalui IAc

  • Menerapkan layanan keamanan dalam skala besar

  • Membutuhkan penyebaran infrastruktur idempoten

  • Mengotomatiskan penyebaran layanan keamanan

Prasyarat dan batasan

Prasyarat

  • Aktif Akun AWS

  • Peran AWS Identity and Access Management (IAM) yang memiliki izin untuk membuat, memperbarui, dan menghapus tumpukan CloudFormation

  • AWS Command Line Interface (AWS CLI), diinstal dan dikonfigurasi

Batasan

Jika GuardDuty telah dinonaktifkan secara manual untuk Akun AWS atau Wilayah AWS, pola ini tidak diaktifkan GuardDuty untuk akun target atau Wilayah tersebut.

Arsitektur

Tumpukan teknologi target

Pola ini digunakan CloudFormation untuk infrastruktur sebagai kode (IAc). Anda menggunakan sumber daya CloudFormation khusus yang didukung oleh fungsi Lambda untuk mencapai kemampuan pemberdayaan layanan dinamis.

Arsitektur target

Diagram arsitektur tingkat tinggi berikut menunjukkan proses pengaktifan GuardDuty dengan menggunakan templat: CloudFormation

Menggunakan CloudFormation tumpukan untuk mengaktifkan GuardDuty akun AWS.
  1. Anda menyebarkan CloudFormation template untuk membuat CloudFormation tumpukan.

  2. Tumpukan menciptakan peran IAM dan fungsi Lambda.

  3. Fungsi Lambda mengasumsikan peran IAM.

  4. Jika belum GuardDuty diaktifkan pada target Akun AWS, fungsi Lambda mengaktifkannya.

Otomatisasi dan skala

Anda dapat menggunakan AWS CloudFormation StackSet fitur ini untuk memperluas solusi ini ke beberapa Akun AWS dan Wilayah AWS. Untuk informasi selengkapnya, lihat Bekerja dengan AWS CloudFormation StackSets dalam CloudFormation dokumentasi.

Alat

  • AWS Command Line Interface (AWS CLI) adalah alat sumber terbuka yang membantu Anda berinteraksi Layanan AWS melalui perintah di shell baris perintah Anda.

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

  • Amazon GuardDuty adalah layanan pemantauan keamanan berkelanjutan yang menganalisis dan memproses log untuk mengidentifikasi aktivitas tak terduga dan berpotensi tidak sah di lingkungan Anda AWS .

  • AWS Identity and Access Management (IAM) membantu Anda mengelola akses ke AWS sumber daya dengan aman dengan mengontrol siapa yang diautentikasi dan diberi wewenang untuk menggunakannya.

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

Epik

TugasDeskripsiKeterampilan yang dibutuhkan

Simpan kode di Amazon S3.

  1. Salin kode Python di bagian Informasi tambahan dari pola ini.

  2. Tempel kode di editor teks.

  3. Simpan file sebagai index.py.

  4. Unggah file ke bucket Amazon Simple Storage Service (Amazon S3). Untuk petunjuk, lihat Mengunggah objek dalam dokumentasi Amazon S3.

AWS DevOps

Buat CloudFormation template.

  1. Buka konsol CloudFormation .

  2. Di panel navigasi kiri, pilih Infrastructure Composer.

  3. Jika Anda tidak melihat kanvas kosong, buat proyek baru.

  4. Seret dan jatuhkan AWS Lambda fungsi ke kanvas.

  5. Dalam tampilan template, validasi bahwa fungsi Lambda dan grup log hadir.

  6. RuntimeUbah fungsi Lambda ke versi terbaru Python.

  7. Validasi bahwa Handler properti memiliki nilai index.lambda_handler.

  8. Konfigurasikan CodeUri properti menjadi lokasi Amazon S3 tempat Anda mengunggah kode Python. Contoh nilai adalah s3://amzn-s3-demo-bucket/key-name.

  9. Tambahkan Policies properti untuk sumber daya. Ikuti praktik terbaik keamanan untuk memberikan izin akses hak istimewa paling sedikit yang memungkinkan CloudFormation dan GuardDuty tindakan. Misalnya, Anda dapat menggunakan kebijakan AWSLambdaExecute terkelola untuk log dan kustom iam:CreateServiceLinkedRole untuk GuardDuty.

  10. Tambahkan definisi sumber daya khusus ke cuplikan dengan menavigasi ke tampilan templat.

    CheckResourceExist: Type: 'Custom::LambdaCustomResource' Properties: ServiceToken: !GetAtt Function.Arn
  11. Simpan template sebagaisample.yaml.

AWS DevOps

Buat CloudFormation tumpukan.

  1. Di AWS CLI, masukkan perintah berikut. Ini membuat CloudFormation tumpukan baru menggunakan sample.yaml file. Untuk informasi selengkapnya, lihat Membuat tumpukan dalam CloudFormation dokumentasi.

    aws cloudformation create-stack \ --stack-name guardduty-cf-stack \ --template-body file://sample.yaml
  2. Konfirmasikan nilai berikut muncul di AWS CLI, menunjukkan bahwa tumpukan telah berhasil dibuat. Jumlah waktu yang dibutuhkan untuk membuat tumpukan dapat bervariasi.

    "StackStatus": "CREATE_COMPLETE",
AWS DevOps

Validasi yang GuardDuty diaktifkan untuk file. Akun AWS

  1. Masuk ke Konsol Manajemen AWS dan buka GuardDuty konsol.

  2. Verifikasi bahwa GuardDuty layanan diaktifkan.

Administrator cloud, administrator AWS

Konfigurasikan akun atau Wilayah tambahan.

Sesuai kebutuhan untuk kasus penggunaan Anda, gunakan CloudFormation StackSet fitur ini untuk memperluas solusi ini ke beberapa Akun AWS dan Wilayah AWS. Untuk informasi selengkapnya, lihat Bekerja dengan AWS CloudFormation StackSets dalam CloudFormation dokumentasi.

Administrator cloud, administrator AWS

Sumber daya terkait

Referensi

Tutorial dan video

Informasi tambahan

Kode Python

import boto3 import os import json from botocore.exceptions import ClientError import cfnresponse guardduty=boto3.client('guardduty') cfn=boto3.client('cloudformation') def lambda_handler(event, context): print('Event: ', event) if 'RequestType' in event: if event['RequestType'] in ["Create","Update"]: enabled=False try: response=guardduty.list_detectors() if "DetectorIds" in response and len(response["DetectorIds"])>0: enabled="AlreadyEnabled" elif "DetectorIds" in response and len(response["DetectorIds"])==0: cfn_response=cfn.create_stack( StackName='guardduty-cfn-stack', TemplateBody='{ "AWSTemplateFormatVersion": "2010-09-09", "Description": "Guard duty creation template", "Resources": { "IRWorkshopGuardDutyDetector": { "Type": "AWS::GuardDuty::Detector", "Properties": { "Enable": true } } } }' ) enabled="True" except Exception as e: print("Exception: ",e) responseData = {} responseData['status'] = enabled cfnresponse.send(event, context, cfnresponse.SUCCESS, responseData, "CustomResourcePhysicalID" ) elif event['RequestType'] == "Delete": cfn_response=cfn.delete_stack( StackName='guardduty-cfn-stack') cfnresponse.send(event, context, cfnresponse.SUCCESS, {})