Mengirim log ke CloudWatch Log menggunakan titik akhir HLC - CloudWatch Log Amazon

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

Mengirim log ke CloudWatch Log menggunakan titik akhir HLC

Amazon CloudWatch Logs mendukung titik akhir HTTP Log Collector (HLC) yang memungkinkan Anda mengirim log langsung ke CloudWatch Log menggunakan protokol berbasis HTTP sederhana. Fitur ini menyederhanakan log ingestion untuk aplikasi dan layanan tanpa memerlukan AWS integrasi SDK.

Fitur endpoint HLC memungkinkan Anda untuk:

  • Kirim log ke CloudWatch Log menggunakan protokol berbasis HTTP

  • Otentikasi menggunakan kredensil khusus layanan IAM (token pembawa)

  • Menyerap log tanpa memerlukan integrasi AWS SDK

  • Gunakan permintaan HTTP POST sederhana dari aplikasi atau layanan apa pun

catatan

Kunci API (token pembawa) untuk akses titik akhir HLC saat ini dalam pratinjau dan tersedia di AWS Wilayah berikut:us-east-1,,us-west-1, us-west-2 dan. us-east-2 Silakan periksa dokumentasi ini untuk pembaruan di masa depan.

Prasyarat

Sebelum Anda dapat mengirim log menggunakan titik akhir HLC, Anda perlu:

  • Buat pengguna IAM dengan izin CloudWatch Log

  • Hasilkan kredensil khusus layanan (token pembawa)

  • Buat grup log dan aliran log

  • Aktifkan otentikasi token pembawa pada grup log

Opsi 1: Pengaturan yang disederhanakan menggunakan AWS konsol (disarankan)

AWS Management Console menyediakan alur kerja yang efisien untuk menghasilkan kunci API untuk akses titik akhir HLC.

Untuk mengatur akses titik akhir HLC menggunakan konsol
  1. Masuk ke Konsol AWS Manajemen.

  2. Arahkan CloudWatchke> Pengaturan> Log.

  3. Di bagian API Keys, pilih Generate API key.

  4. Untuk kedaluwarsa kunci API, lakukan salah satu hal berikut:

    • Pilih durasi kedaluwarsa kunci API 1, 5, 30, 90, atau 365 hari.

    • Pilih Durasi kustom untuk menentukan tanggal kedaluwarsa kunci API kustom.

    • Pilih Jangan pernah kedaluwarsa (tidak disarankan).

  5. Pilih Hasilkan kunci API.

    Konsol secara otomatis:

    • Membuat pengguna IAM baru dengan izin yang sesuai

    • Melampirkan kebijakan terkelola CloudWatchLogsAPIKeyAccess (termasuk logs:PutLogEvents dan logs:CallWithBearerToken izin)

    • Menghasilkan kredensi khusus layanan (kunci API)

  6. Salin dan simpan kredenal yang ditampilkan dengan aman:

    • ID Kunci API (ID kredensi khusus layanan)

    • Rahasia Kunci API (Token pembawa)

    penting

    Simpan Rahasia Kunci API segera. Hal itu tidak dapat diambil lagi nanti. Jika Anda kehilangannya, Anda harus membuat kunci API baru.

  7. Buat grup log dan aliran log tempat log Anda akan disimpan:

    # Create the log group aws logs create-log-group \ --log-group-name /aws/hlc-logs/my-application \ --region us-east-1 # Create the log stream aws logs create-log-stream \ --log-group-name /aws/hlc-logs/my-application \ --log-stream-name application-stream-001 \ --region us-east-1
  8. Aktifkan otentikasi token pembawa pada grup log:

    aws logs put-bearer-token-authentication \ --log-group-identifier /aws/hlc-logs/my-application \ --bearer-token-authentication-enabled \ --region us-east-1

    Verifikasi konfigurasi:

    aws logs describe-log-groups \ --log-group-name-prefix /aws/hlc-logs/my-application \ --region us-east-1

Izin disertakan: Pengguna IAM yang dibuat secara otomatis akan memiliki izin berikut:

  • logs:PutLogEvents— Kirim peristiwa log ke CloudWatch Log

  • logs:CallWithBearerToken— Otentikasi menggunakan token pembawa

  • kms:Describe*,kms:GenerateDataKey*, kms:Decrypt — Akses grup log terenkripsi KMS (dengan kondisi membatasi layanan log)

Opsi 2: Pengaturan manual

Jika Anda lebih suka kontrol lebih besar atas konfigurasi IAM atau perlu menyesuaikan izin, Anda dapat mengatur titik akhir HLC secara manual.

Langkah 1: Buat pengguna IAM

Buat pengguna IAM yang akan digunakan untuk log ingestion:

  1. Masuk ke AWS Management Console dan navigasikan ke IAM.

  2. Pada panel navigasi kiri, pilih Pengguna.

  3. Pilih Create user (Buat pengguna).

  4. Masukkan nama pengguna (misalnya,cloudwatch-logs-hlc-user).

  5. Pilih Berikutnya.

  6. Lampirkan salah satu kebijakan IAM berikut:

    Opsi A: Gunakan kebijakan terkelola (disarankan)

    Lampirkan kebijakan terkelola CloudWatchLogsAPIKeyAccess.

    Opsi B: Buat kebijakan khusus

    Buat dan lampirkan kebijakan IAM berikut:

    { "Version": "2012-10-17", "Statement": [ { "Sid": "LogsAPIs", "Effect": "Allow", "Action": [ "logs:CallWithBearerToken", "logs:PutLogEvents" ], "Resource": "*" }, { "Sid": "KMSAPIs", "Effect": "Allow", "Action": [ "kms:Describe*", "kms:GenerateDataKey*", "kms:Decrypt" ], "Condition": { "StringEquals": { "kms:ViaService": [ "logs.*.amazonaws.com" ] } }, "Resource": "arn:aws:kms:*:*:key/*" } ] }
  7. Pilih Berikutnya dan kemudian Buat pengguna.

catatan

Izin KMS diperlukan jika Anda berencana untuk mengirim log ke grup log terenkripsi KMS. Kondisi ini membatasi akses KMS ke hanya kunci yang digunakan melalui layanan CloudWatch Log.

Langkah 2: Hasilkan kredensil khusus layanan (kunci API)

Buat kunci API CloudWatch Log menggunakan CreateServiceSpecificCredentialAPI. Anda juga dapat menggunakan perintah create-service-specific-credentialCLI. Untuk usia kredenal, Anda dapat menentukan nilai antara 1—36600 hari. Jika Anda tidak menentukan usia kredensi, kunci API tidak akan kedaluwarsa.

Untuk membuat kunci API dengan masa kedaluwarsa 30 hari:

aws iam create-service-specific-credential \ --user-name cloudwatch-logs-hlc-user \ --service-name logs.amazonaws.com \ --credential-age-days 30

Responsnya adalah ServiceSpecificCredentialobjek. ServiceCredentialSecretNilainya adalah kunci API CloudWatch Log Anda (token pembawa).

penting

Simpan ServiceCredentialSecret nilainya dengan aman, karena Anda tidak dapat mengambilnya nanti. Jika Anda kehilangannya, Anda harus membuat kunci API baru.

Langkah 3: Buat grup log dan aliran log

Buat grup log dan aliran log tempat log Anda akan disimpan:

# Create the log group aws logs create-log-group \ --log-group-name /aws/hlc-logs/my-application \ --region us-east-1 # Create the log stream aws logs create-log-stream \ --log-group-name /aws/hlc-logs/my-application \ --log-stream-name application-stream-001 \ --region us-east-1

Langkah 4: Aktifkan otentikasi token pembawa

Aktifkan otentikasi token pembawa pada grup log:

aws logs put-bearer-token-authentication \ --log-group-identifier /aws/hlc-logs/my-application \ --bearer-token-authentication-enabled \ --region us-east-1

Verifikasi konfigurasi:

aws logs describe-log-groups \ --log-group-name-prefix /aws/hlc-logs/my-application \ --region us-east-1

Mengirim log ke titik akhir HLC

Format titik akhir

URL titik akhir HLC mengikuti format ini:

https://logs.<region>.amazonaws.com/services/collector/event?logGroup=<name>&logStream=<name>[&entityName=<name>&entityEnvironment=<environment>]

Parameter yang diperlukan:

  • <region>— AWS Wilayah (misalnya,us-east-1,eu-west-1)

  • logGroup— Nama grup log yang dikodekan URL

  • logStream— Nama aliran log yang dikodekan URL

Parameter opsional:

Anda dapat secara opsional mengaitkan peristiwa log Anda dengan Service entitas dengan menyertakan parameter kueri berikut. Karena log yang dikirim melalui titik akhir HLC adalah telemetri khusus, mereka tidak secara otomatis terkait dengan entitas. Dengan menyediakan parameter ini, CloudWatch Log membuat entitas dengan KeyAttributes.Type set ke Service dan mengaitkannya dengan peristiwa log Anda. Ini memungkinkan fitur terkait Jelajahi CloudWatch untuk menghubungkan log ini dengan telemetri lain (metrik, jejak, dan log) dari layanan yang sama, sehingga memudahkan pemecahan masalah dan memantau aplikasi Anda di berbagai jenis sinyal. Untuk informasi selengkapnya tentang entitas dan telemetri terkait, lihat Menambahkan informasi terkait ke telemetri kustom.

  • entityName— Nama entitas layanan untuk dikaitkan dengan peristiwa log. Nilai ini disimpan sebagai entitas KeyAttributes.Name (misalnya, my-application atauapi.myservice.com).

  • entityEnvironment— Lingkungan tempat layanan di-host atau milik apa. Nilai ini disimpan sebagai entitas KeyAttributes.Environment (misalnya,, productionec2:default, ataueks:my-cluster/default).

Format permintaan

Kirim log menggunakan HTTP POST dengan header dan badan berikut:

Header:

  • Authorization: Bearer <your-bearer-token>

  • Content-Type: application/json

Format tubuh:

Badan permintaan harus dalam format JSON dengan array peristiwa:

{ "event": [ { "time": 1730141374.001, "event": "Application started successfully", "host": "web-server-1", "source": "application.log", "severity": "info" }, { "time": 1730141374.457, "event": "User login successful", "host": "web-server-1", "source": "auth.log", "user": "john.doe" } ] }

Deskripsi bidang:

  • time— Stempel waktu epoch Unix dengan milidetik (wajib)

  • event— Pesan log atau data peristiwa (wajib)

  • host— Nama host sumber atau pengenal (opsional)

  • source— Pengidentifikasi sumber log (opsional)

Bidang kustom tambahan dapat dimasukkan sesuai kebutuhan.

Contoh permintaan

curl -X POST \ 'https://logs.<region>.amazonaws.com/services/collector/event?logGroup=/aws/hlc-logs/my-application&logStream=application-stream-001' \ -H "Authorization: Bearer <your-bearer-token>" \ -H "Content-Type: application/json" \ -d '{ "event": [ { "time": 1730141374.001, "event": "Application started", "host": "web-server-1", "severity": "info" } ] }'

Izin kontrol untuk membuat dan menggunakan kunci API CloudWatch Log

Pembuatan dan penggunaan kunci API CloudWatch Log dikendalikan oleh tindakan dan kunci kondisi di layanan CloudWatch Log dan IAM.

Mengontrol pembuatan kunci API CloudWatch Log

CreateServiceSpecificCredentialTindakan iam: mengontrol pembuatan kunci khusus layanan (seperti kunci API CloudWatch Log). Anda dapat memberikan cakupan tindakan ini kepada pengguna IAM sebagai sumber daya untuk membatasi pengguna yang kuncinya dapat dibuat.

Anda dapat menggunakan tombol kondisi berikut untuk memaksakan kondisi pada izin untuk iam:CreateServiceSpecificCredential tindakan:

  • iam: ServiceSpecificCredentialAgeDays — Memungkinkan Anda menentukan, dalam kondisi, waktu kedaluwarsa kunci dalam beberapa hari. Misalnya, Anda dapat menggunakan kunci kondisi ini untuk hanya mengizinkan pembuatan kunci API yang kedaluwarsa dalam 90 hari.

  • iam: ServiceSpecificCredentialServiceName — Memungkinkan Anda menentukan, dalam kondisi, nama layanan. Misalnya, Anda dapat menggunakan kunci kondisi ini untuk hanya mengizinkan pembuatan kunci API untuk CloudWatch Log dan bukan layanan lainnya.

Mengontrol penggunaan kunci API CloudWatch Log

logs:CallWithBearerTokenTindakan ini mengontrol penggunaan kunci API CloudWatch Log. Untuk mencegah identitas menggunakan kunci API CloudWatch Logs, lampirkan kebijakan yang menolak logs:CallWithBearerToken tindakan tersebut ke pengguna IAM yang terkait dengan kunci tersebut.

Contoh kebijakan

Mencegah identitas membuat dan menggunakan kunci API CloudWatch Log

{ "Version": "2012-10-17", "Statement": [ { "Sid": "DenyCWLAPIKeys", "Effect": "Deny", "Action": [ "iam:CreateServiceSpecificCredential", "logs:CallWithBearerToken" ], "Resource": "*" } ] }
Awas

Kebijakan ini akan mencegah pembuatan kredensil untuk semua AWS layanan yang mendukung pembuatan kredensil khusus layanan. Untuk informasi selengkapnya, lihat Kredensi khusus layanan untuk pengguna IAM.

Mencegah identitas menggunakan kunci API CloudWatch Log

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": "logs:CallWithBearerToken", "Resource": "*" } ] }

Izinkan pembuatan kunci CloudWatch Log hanya jika mereka kedaluwarsa dalam 90 hari

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iam:CreateServiceSpecificCredential", "Resource": "arn:aws:iam::123456789012:user/username", "Condition": { "StringEquals": { "iam:ServiceSpecificCredentialServiceName": "logs.amazonaws.com" }, "NumericLessThanEquals": { "iam:ServiceSpecificCredentialAgeDays": "90" } } } ] }

Menangani kunci API CloudWatch Log yang dikompromikan

Jika kunci API Anda dikompromikan, Anda harus mencabut izin untuk menggunakannya. Anda dapat menggunakan operasi IAM API berikut untuk mengelola kunci yang dikompromikan:

catatan

Untuk melakukan tindakan ini melalui API, Anda harus mengautentikasi dengan AWS kredensil dan bukan dengan kunci API CloudWatch Log.

Mengubah status kunci API CloudWatch Log

Untuk menonaktifkan kunci, gunakan update-service-specific-credentialperintah:

aws iam update-service-specific-credential \ --user-name cloudwatch-logs-hlc-user \ --service-specific-credential-id ACCA1234EXAMPLE1234 \ --status Inactive

Untuk mengaktifkan kembali kunci, ubah status menjadiActive.

Mengatur ulang kunci API CloudWatch Log

Jika nilai kunci Anda telah dikompromikan atau Anda tidak lagi memilikinya, setel ulang menggunakan reset-service-specific-credentialperintah. Kuncinya harus belum kedaluwarsa. Jika sudah kedaluwarsa, hapus kunci dan buat yang baru.

aws iam reset-service-specific-credential \ --service-specific-credential-id ACCA1234EXAMPLE1234

Menghapus kunci API CloudWatch Log

Jika Anda tidak lagi membutuhkan kunci atau sudah kedaluwarsa, hapus menggunakan delete-service-specific-credentialperintah:

aws iam delete-service-specific-credential \ --service-specific-credential-id ACCA1234EXAMPLE1234

Lampirkan kebijakan IAM untuk menghapus izin penggunaan kunci API CloudWatch Log

Untuk mencegah identitas melakukan panggilan dengan kunci API CloudWatch Log, lampirkan kebijakan berikut ini ke pengguna IAM yang terkait dengan kunci:

{ "Version": "2012-10-17", "Statement": { "Effect": "Deny", "Action": "logs:CallWithBearerToken", "Resource": "*" } }

Pencatatan penggunaan kunci API dengan CloudTrail

Anda dapat menggunakan AWS CloudTrail untuk mencatat peristiwa data untuk penggunaan kunci API CloudWatch Log. CloudWatch Log memancarkan peristiwa AWS::Logs::LogGroupAuthorization data untuk CallWithBearerToken panggilan, memungkinkan Anda untuk mengaudit kapan dan bagaimana kunci API digunakan untuk mengirim log.

Untuk mengaktifkan CloudTrail logging untuk penggunaan kunci API CloudWatch Log:

catatan

Bucket S3 yang Anda tentukan untuk jejak harus memiliki kebijakan bucket yang memungkinkan CloudTrail untuk menulis file log ke dalamnya. Untuk informasi selengkapnya, lihat kebijakan bucket Amazon S3 untuk. CloudTrail

  1. Buat jejak:

    aws cloudtrail create-trail \ --name cloudwatch-logs-api-key-audit \ --s3-bucket-name my-cloudtrail-bucket \ --region us-east-1
  2. Konfigurasikan pemilih acara lanjutan untuk menangkap peristiwa otorisasi grup CloudWatch log Log:

    aws cloudtrail put-event-selectors \ --region us-east-1 \ --trail-name cloudwatch-logs-api-key-audit \ --advanced-event-selectors '[{ "Name": "CloudWatch Logs API key authorization events", "FieldSelectors": [ { "Field": "eventCategory", "Equals": ["Data"] }, { "Field": "resources.type", "Equals": ["AWS::Logs::LogGroupAuthorization"] } ] }]'
  3. Mulai pencatatan jejak:

    aws cloudtrail start-logging \ --name cloudwatch-logs-api-key-audit \ --region us-east-1

Praktik terbaik

Acara batching

Untuk kinerja dan efisiensi yang lebih baik:

  • Batch beberapa peristiwa dalam satu permintaan bila memungkinkan

  • Ukuran batch yang disarankan: 10—100 acara per permintaan

  • Ukuran permintaan maksimal: 1 MB

Penanganan kesalahan

Menerapkan penanganan kesalahan yang tepat dalam aplikasi Anda. Kode status HTTP umum:

  • 200 OK— Log berhasil dicerna

  • 400 Bad Request— Format atau parameter permintaan tidak valid

  • 401 Unauthorized— Token pembawa tidak valid atau kedaluwarsa

  • 403 Forbidden— Izin tidak mencukupi

  • 404 Not Found— Grup log atau aliran tidak ada

  • 429 Too Many Requests— Batas tarif terlampaui

  • 500 Internal Server Error— Kesalahan layanan (coba lagi dengan backoff eksponensial)

Batasan

  • Ukuran acara maksimal: 256 KB per acara

  • Ukuran permintaan maksimal: 1 MB

  • Maksimum acara per permintaan: 10.000

  • Nama grup log harus mengikuti konvensi penamaan CloudWatch Log

  • Otentikasi token pembawa harus diaktifkan pada grup log