

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

# Konfigurasikan logging untuk HTTP APIs di API Gateway
<a name="http-api-logging"></a>

Anda dapat mengaktifkan logging untuk menulis log ke CloudWatch Log. Anda dapat menggunakan [variabel logging](http-api-logging-variables.md) untuk menyesuaikan konten log Anda.

Untuk meningkatkan postur keamanan Anda, sebaiknya Anda menulis CloudWatch log ke Log untuk semua tahapan API HTTP Anda. Anda mungkin perlu melakukan ini untuk mematuhi berbagai kerangka kerja kepatuhan. Untuk informasi selengkapnya, lihat [kontrol Amazon API Gateway](https://docs.aws.amazon.com/securityhub/latest/userguide/apigateway-controls.html) di *Panduan AWS Security Hub Pengguna*.

Untuk mengaktifkan logging untuk API HTTP, Anda harus melakukan hal berikut.

1. Pastikan bahwa pengguna Anda memiliki izin yang diperlukan untuk mengaktifkan logging.

1. Buat grup CloudWatch log Log.

1. Berikan ARN dari grup CloudWatch log Log untuk tahap API Anda.

## Izin untuk mengaktifkan logging
<a name="http-api-logging.permissions"></a>

Untuk mengaktifkan logging untuk API, pengguna Anda harus memiliki izin berikut.

**Example**    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "logs:DescribeLogGroups",
                "logs:DescribeLogStreams",
                "logs:GetLogEvents",
                "logs:FilterLogEvents"
            ],
            "Resource": "arn:aws:logs:us-east-2:123456789012:log-group:*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogDelivery",
                "logs:PutResourcePolicy",
                "logs:UpdateLogDelivery",
                "logs:DeleteLogDelivery",
                "logs:CreateLogGroup",
                "logs:DescribeResourcePolicies",
                "logs:GetLogDelivery",
                "logs:ListLogDeliveries"
            ],
            "Resource": "*"
        }
    ]
}
```

## Buat grup log dan aktifkan logging untuk HTTP APIs
<a name="http-api-enable-logging"></a>

Anda dapat membuat grup log dan mengaktifkan log akses menggunakan Konsol Manajemen AWS atau AWS CLI.

------
#### [ Konsol Manajemen AWS ]

1.  Membuat sebuah grup log. 

   Untuk mempelajari cara membuat grup log menggunakan konsol, lihat [Membuat Grup Log di Panduan Pengguna CloudWatch Log Amazon](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/Working-with-log-groups-and-streams.html).

1. Masuk ke konsol API Gateway di [https://console.aws.amazon.com/apigateway](https://console.aws.amazon.com/apigateway).

1. Pilih API HTTP.

1. Di bawah tab **Monitor** di panel navigasi utama, pilih **Logging**.

1. Pilih tahap untuk mengaktifkan logging dan pilih **Pilih**. 

1. Pilih **Edit** untuk mengaktifkan pencatatan akses. 

1. Aktifkan **Pencatatan akses**, masukkan CloudWatch Log, dan pilih format log.

1. Pilih **Simpan**.

------
#### [ AWS CLI ]

[create-log-group](https://docs.aws.amazon.com/cli/latest/reference/logs/create-log-group.html)Perintah berikut membuat grup log:

```
aws logs create-log-group --log-group-name my-log-group
```

Anda memerlukan Nama Sumber Daya Amazon (ARN) untuk grup log Anda untuk mengaktifkan logging. Format ARN adalah arn:aws:logs: ::log-group:. *region* *account-id* *log-group-name*

Perintah [update-stage](https://docs.aws.amazon.com/cli/latest/reference/apigatewayv2/update-stage.html) berikut mengaktifkan logging untuk `$default` tahap HTTP API:

```
aws apigatewayv2 update-stage --api-id abcdef \
    --stage-name '$default' \
    --access-log-settings '{"DestinationArn": "arn:aws:logs:region:account-id:log-group:log-group-name", "Format": "$context.identity.sourceIp - - [$context.requestTime] \"$context.httpMethod $context.routeKey $context.protocol\" $context.status $context.responseLength $context.requestId"}'
```

------

## Contoh format log
<a name="http-api-enable-logging.examples"></a>

Contoh beberapa format log akses umum tersedia di konsol API Gateway dan dicantumkan sebagai berikut.
+ `CLF`([Format Log Umum](https://httpd.apache.org/docs/current/logs.html#common)):

  ```
  $context.identity.sourceIp - - [$context.requestTime] "$context.httpMethod $context.routeKey $context.protocol" $context.status $context.responseLength $context.requestId $context.extendedRequestId
  ```
+  `JSON`: 

  ```
  { "requestId":"$context.requestId", "ip": "$context.identity.sourceIp", "requestTime":"$context.requestTime", "httpMethod":"$context.httpMethod","routeKey":"$context.routeKey", "status":"$context.status","protocol":"$context.protocol", "responseLength":"$context.responseLength", "extendedRequestId": "$context.extendedRequestId" }
  ```
+ `XML`: 

  ```
  <request id="$context.requestId"> <ip>$context.identity.sourceIp</ip> <requestTime>$context.requestTime</requestTime> <httpMethod>$context.httpMethod</httpMethod> <routeKey>$context.routeKey</routeKey> <status>$context.status</status> <protocol>$context.protocol</protocol> <responseLength>$context.responseLength</responseLength> <extendedRequestId>$context.extendedRequestId</extendedRequestId> </request>
  ```
+ `CSV`(nilai yang dipisahkan koma):

  ```
  $context.identity.sourceIp,$context.requestTime,$context.httpMethod,$context.routeKey,$context.protocol,$context.status,$context.responseLength,$context.requestId,$context.extendedRequestId
  ```

# Sesuaikan log akses HTTP API
<a name="http-api-logging-variables"></a>

Anda dapat menggunakan variabel berikut untuk menyesuaikan log akses HTTP API. Untuk mempelajari lebih lanjut tentang log akses untuk HTTP APIs, lihat[Konfigurasikan logging untuk HTTP APIs di API Gateway](http-api-logging.md).


| Parameter | Deskripsi | 
| --- | --- | 
| \$1context.accountId |  ID AWS akun pemilik API.  | 
| \$1context.apiId |  API Gateway identifier ditetapkan ke API Anda.  | 
| \$1context.authorizer.claims.property |  Properti klaim yang dikembalikan dari JSON Web Token (JWT) setelah pemanggil metode berhasil diautentikasi, seperti. `$context.authorizer.claims.username` Untuk informasi selengkapnya, lihat [Kontrol akses ke HTTP APIs dengan otorisasi JWT di API Gateway](http-api-jwt-authorizer.md).  Memanggil `$context.authorizer.claims` mengembalikan null.   | 
| \$1context.authorizer.error | Pesan kesalahan dikembalikan dari otorisasi. | 
| \$1context.authorizer.property |  Nilai pasangan nilai kunci yang ditentukan dari `context` peta dikembalikan dari fungsi otorisasi API Gateway Lambda. Misalnya, jika otorisasi mengembalikan `context` peta berikut:  <pre>"context" : {<br />  "key": "value",<br />  "numKey": 1,<br />  "boolKey": true<br />}</pre> memanggil `$context.authorizer.key` mengembalikan `"value"` string, memanggil `$context.authorizer.numKey` mengembalikan`1`, dan memanggil `$context.authorizer.boolKey` kembali`true`.  | 
| \$1context.awsEndpointRequestId |  ID permintaan AWS titik akhir dari `x-amzn-requestId` header `x-amz-request-id` atau.  | 
| \$1context.awsEndpointRequestId2 |  ID permintaan AWS titik akhir dari `x-amz-id-2` header.  | 
| \$1context.customDomain.basePathMatched |  Jalur untuk pemetaan API yang cocok dengan permintaan masuk. Berlaku ketika klien menggunakan nama domain khusus untuk mengakses API. Misalnya jika klien mengirim permintaan ke`https://api.example.com/v1/orders/1234`, dan permintaan tersebut cocok dengan pemetaan API dengan jalur`v1/orders`, nilainya adalah`v1/orders`. Untuk mempelajari selengkapnya, lihat [Memetakan tahapan API ke nama domain khusus untuk HTTP APIs](http-api-mappings.md).  | 
| \$1context.dataProcessed | Jumlah data yang diproses dalam byte. | 
| \$1context.domainName |  Nama domain lengkap yang digunakan untuk memanggil API. Ini harus sama dengan `Host` header yang masuk.  | 
| \$1context.domainPrefix |  Label pertama dari`$context.domainName`.  | 
| \$1context.error.message |  String yang berisi pesan kesalahan API Gateway.  | 
| \$1context.error.messageString | Nilai yang dikutip dari\$1context.error.message, yaitu"\$1context.error.message". | 
| \$1context.error.responseType |  Jenis`GatewayResponse`. Untuk informasi selengkapnya, lihat [Pantau eksekusi WebSocket API dengan CloudWatch metrik](apigateway-websocket-api-logging.md) dan [Menyiapkan respons gateway untuk menyesuaikan respons kesalahan](api-gateway-gatewayResponse-definition.md#customize-gateway-responses).  | 
| \$1context.extendedRequestId | Setara dengan\$1context.requestId. | 
| \$1context.httpMethod |  Metode HTTP yang digunakan. Nilai yang valid meliputi: `DELETE``GET`,,`HEAD`,`OPTIONS`,`PATCH`,`POST`, dan`PUT`.  | 
| \$1context.identity.accountId |  ID AWS akun yang terkait dengan permintaan. Didukung untuk rute yang menggunakan otorisasi IAM.  | 
| \$1context.identity.caller |  Pengidentifikasi utama penelepon yang menandatangani permintaan. Didukung untuk rute yang menggunakan otorisasi IAM.  | 
| \$1context.identity.cognitoAuthenticationProvider |  Daftar dipisahkan koma dari semua penyedia otentikasi Amazon Cognito yang digunakan oleh penelepon yang membuat permintaan. Hanya tersedia jika permintaan ditandatangani dengan kredenal Amazon Cognito.  Misalnya, untuk identitas dari kumpulan pengguna Amazon Cognito, `cognito-idp. region.amazonaws.com/user_pool_id,cognito-idp.region.amazonaws.com/user_pool_id:CognitoSignIn:token subject claim` *Untuk informasi tentang penyedia autentikasi Amazon Cognito yang tersedia, lihat [Menggunakan Identitas Federasi di Panduan Pengembang](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-identity.html) Amazon Cognito.* | 
| \$1context.identity.cognitoAuthenticationType |  Jenis otentikasi Amazon Cognito dari penelepon yang membuat permintaan. Hanya tersedia jika permintaan ditandatangani dengan kredenal Amazon Cognito. Nilai yang mungkin termasuk `authenticated` untuk identitas yang diautentikasi dan `unauthenticated` untuk identitas yang tidak diautentikasi. | 
| \$1context.identity.cognitoIdentityId |  ID identitas Amazon Cognito dari penelepon yang membuat permintaan. Hanya tersedia jika permintaan ditandatangani dengan kredenal Amazon Cognito.  | 
| \$1context.identity.cognitoIdentityPoolId |  ID kumpulan identitas Amazon Cognito dari penelepon yang membuat permintaan. Hanya tersedia jika permintaan ditandatangani dengan kredenal Amazon Cognito.  | 
| \$1context.identity.principalOrgId |  [ID AWS organisasi](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_org_details.html). Didukung untuk rute yang menggunakan otorisasi IAM.  | 
| \$1context.identity.clientCert.clientCertPem |  Sertifikat klien yang dikodekan PEM yang disajikan klien selama otentikasi TLS timbal balik. Hadir saat klien mengakses API dengan menggunakan nama domain khusus yang mengaktifkan TLS timbal balik.  | 
| \$1context.identity.clientCert.subjectDN |  Nama yang dibedakan dari subjek sertifikat yang disajikan klien. Hadir saat klien mengakses API dengan menggunakan nama domain khusus yang mengaktifkan TLS timbal balik.  | 
| \$1context.identity.clientCert.issuerDN |  Nama terkemuka penerbit sertifikat yang disajikan klien. Hadir saat klien mengakses API dengan menggunakan nama domain khusus yang mengaktifkan TLS timbal balik.  | 
| \$1context.identity.clientCert.serialNumber |  Nomor seri sertifikat. Hadir saat klien mengakses API dengan menggunakan nama domain khusus yang mengaktifkan TLS timbal balik.  | 
| \$1context.identity.clientCert.validity.notBefore |  Tanggal sebelum sertifikat tidak valid. Hadir saat klien mengakses API dengan menggunakan nama domain khusus yang mengaktifkan TLS timbal balik.  | 
| \$1context.identity.clientCert.validity.notAfter |  Tanggal setelah sertifikat tidak valid. Hadir saat klien mengakses API dengan menggunakan nama domain khusus yang mengaktifkan TLS timbal balik.  | 
| \$1context.identity.sourceIp |  Alamat IP sumber dari koneksi TCP langsung membuat permintaan ke titik akhir API Gateway.  | 
| \$1context.identity.user |  Pengidentifikasi utama pengguna yang akan diotorisasi terhadap akses sumber daya. Didukung untuk rute yang menggunakan otorisasi IAM.  | 
| \$1context.identity.userAgent |  [https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/User-Agent](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/User-Agent)Header pemanggil API.  | 
| \$1context.identity.userArn |  Nama Sumber Daya Amazon (ARN) dari pengguna efektif yang diidentifikasi setelah otentikasi. Didukung untuk rute yang menggunakan otorisasi IAM. Untuk informasi selengkapnya, lihat [https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users.html](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users.html).  | 
| \$1context.integration.error | Pesan kesalahan dikembalikan dari integrasi. Setara dengan\$1context.integrationErrorMessage. | 
| \$1context.integration.integrationStatus | Untuk integrasi proxy Lambda, kode status dikembalikan dari AWS Lambda, bukan dari kode fungsi Lambda backend. | 
| \$1context.integration.latency | Latensi integrasi dalam ms. Setara dengan\$1context.integrationLatency. | 
| \$1context.integration.requestId | ID permintaan AWS titik akhir. Setara dengan\$1context.awsEndpointRequestId. | 
| \$1context.integration.status | Kode status dikembalikan dari integrasi. Untuk integrasi proxy Lambda, ini adalah kode status yang dikembalikan oleh kode fungsi Lambda Anda. | 
| \$1context.integrationErrorMessage |  String yang berisi pesan kesalahan integrasi.  | 
| \$1context.integrationLatency | Latensi integrasi dalam ms. | 
| \$1context.integrationStatus | Untuk integrasi proxy Lambda, parameter ini mewakili kode status yang dikembalikan dari AWS Lambda, bukan dari fungsi Lambda backend. | 
| \$1context.path | Jalur permintaan. Misalnya, /\$1stage\$1/root/child.  | 
| \$1context.protocol | Protokol permintaan, misalnya,HTTP/1.1.  API Gateway APIs dapat menerima permintaan HTTP/2, tetapi API Gateway mengirimkan permintaan ke integrasi backend menggunakan HTTP/1.1. Akibatnya, protokol permintaan dicatat sebagai HTTP/1.1 bahkan jika klien mengirim permintaan yang menggunakan HTTP/2.   | 
| \$1context.requestId |  ID yang ditetapkan API Gateway ke permintaan API.  | 
| \$1context.requestTime | Waktu permintaan yang diformat [CLF](https://httpd.apache.org/docs/current/logs.html#common) (). dd/MMM/yyyy:HH:mm:ss \$1-hhmm | 
| \$1context.requestTimeEpoch | Waktu permintaan yang diformat [Epoch](https://en.wikipedia.org/wiki/Unix_time). | 
| \$1context.responseLatency | Latensi respons dalam ms. | 
| \$1context.responseLength | Panjang payload respon dalam byte. | 
| \$1context.routeKey |  Kunci rute permintaan API, misalnya`/pets`.  | 
| \$1context.stage |  Tahap penerapan permintaan API (misalnya, `beta` atau`prod`).  | 
| \$1context.status | Status respons metode. | 