

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

# Memantau Amazon RDS dengan Aliran Aktivitas Basis Data
<a name="DBActivityStreams"></a><a name="das"></a>

Dengan menggunakan Aliran Aktivitas Basis Data, Anda dapat memantau aliran aktivitas basis data secara waktu nyaris nyata.

**Topics**
+ [Ikhtisar Aliran Aktivitas Basis Data](#DBActivityStreams.Overview)
+ [Mengonfigurasikan pengauditan terpadu untuk basis data Oracle](DBActivityStreams.configuring-auditing.md)
+ [Mengkonfigurasi kebijakan audit untuk Amazon RDS untuk Microsoft SQL Server](DBActivityStreams.configuring-auditing-SQLServer.md)
+ [Memulai aliran aktivitas basis data](DBActivityStreams.Enabling.md)
+ [Memodifikasi aliran aktivitas database untuk Amazon RDS](DBActivityStreams.Modifying.md)
+ [Mendapatkan status aliran aktivitas basis data](DBActivityStreams.Status.md)
+ [Menghentikan aliran aktivitas basis data](DBActivityStreams.Disabling.md)
+ [Memantau aliran aktivitas basis data](DBActivityStreams.Monitoring.md)
+ [Contoh kebijakan IAM untuk aliran aktivitas database](DBActivityStreams.ManagingAccess.md)

## Ikhtisar Aliran Aktivitas Basis Data
<a name="DBActivityStreams.Overview"></a>

Sebagai seorang administrator basis data Amazon RDS, Anda perlu melindungi basis data Anda dan memenuhi persyaratan kepatuhan dan peraturan. Satu strateginya adalah mengintegrasikan aliran aktivitas basis data dengan alat pemantauan. Dengan cara ini, Anda memantau dan menyetel alarm untuk aktivitas audit di database cluster Anda.

Ancaman keamanan bersifat eksternal dan internal. Untuk melindungi terhadap ancaman internal, Anda dapat mengendalikan akses administrator ke aliran data dengan mengonfigurasikan fitur Aliran Aktivitas Basis Data. Amazon RDS DBAs tidak memiliki akses ke pengumpulan, transmisi, penyimpanan, dan pemrosesan aliran.

**Contents**
+ [Cara kerja aliran aktivitas basis data](#DBActivityStreams.Overview.how-they-work)
+ [Pengauditan di Oracle Database dan Microsoft SQL Server Database](#DBActivityStreams.Overview.auditing)
  + [Pengauditan terpadu di Oracle Database](#DBActivityStreams.Overview.unified-auditing)
  + [Pengauditan di Microsoft SQL Server](#DBActivityStreams.Overview.SQLServer-auditing)
  + [Bidang-bidang audit non-asli untuk Oracle Database dan SQL Server](#DBActivityStreams.Overview.unified-auditing.non-native)
  + [Penindasan grup parameter basis data](#DBActivityStreams.Overview.unified-auditing.parameter-group)
+ [Mode asinkron untuk aliran aktivitas database](#DBActivityStreams.Overview.sync-mode)
+ [Persyaratan dan batasan untuk aliran aktivitas basis data](#DBActivityStreams.Overview.requirements)
+ [Wilayah dan ketersediaan versi](#DBActivityStreams.RegionVersionAvailability)
+ [Kelas-kelas instans basis data yang didukung untuk aliran aktivitas basis data](#DBActivityStreams.Overview.requirements.classes)

### Cara kerja aliran aktivitas basis data
<a name="DBActivityStreams.Overview.how-they-work"></a>

Amazon RDS Anda mendorong aktivitas ke aliran data Amazon Kinesis dalam waktu nyaris nyata. Aliran Kinesis dibuat secara otomatis. Dari Kinesis, Anda dapat mengonfigurasi AWS layanan seperti Amazon Data Firehose dan AWS Lambda menggunakan aliran dan menyimpan data.

**penting**  
Penggunaan fitur aliran aktivitas basis data di Amazon Aurora adalah gratis, tetapi Amazon Kinesis mengenakan biaya untuk aliran data. Lihat informasi yang lebih lengkap di [struktur harga Amazon Kinesis Data Streams](https://aws.amazon.com/kinesis/data-streams/pricing/).

Anda dapat mengonfigurasikan aplikasi untuk pengelolaan kepatuhan agar menggunakan aliran aktivitas basis data. Aplikasi-aplikasi ini dapat menggunakan aliran untuk menghasilkan peringatan dan aktivitas audit pada basis data.

Amazon RDS mendukung aliran aktivitas basis data dalam deployment multi-AZ. Dalam hal ini, aliran aktivitas basis data mengaudit baik instans utama maupun instans siaga.

### Pengauditan di Oracle Database dan Microsoft SQL Server Database
<a name="DBActivityStreams.Overview.auditing"></a>

Pengauditan adalah pemantauan dan pencatatan tindakan basis data yang dikonfigurasikan. Amazon RDS tidak menangkap aktivitas basis data secara default. Anda membuat dan mengelola sendiri kebijakan audit di basis data Anda.

**Topics**
+ [Pengauditan terpadu di Oracle Database](#DBActivityStreams.Overview.unified-auditing)
+ [Pengauditan di Microsoft SQL Server](#DBActivityStreams.Overview.SQLServer-auditing)
+ [Bidang-bidang audit non-asli untuk Oracle Database dan SQL Server](#DBActivityStreams.Overview.unified-auditing.non-native)
+ [Penindasan grup parameter basis data](#DBActivityStreams.Overview.unified-auditing.parameter-group)

#### Pengauditan terpadu di Oracle Database
<a name="DBActivityStreams.Overview.unified-auditing"></a>

Di sebuah basis data Oracle, *kebijakan audit terpadu* adalah grup setelan audit bernama yang dapat Anda gunakan untuk mengaudit sebuah aspek perilaku pengguna. Kebijakan dapat sesederhana mengaudit aktivitas seorang pengguna. Anda juga dapat membuat kebijakan audit yang rumit yang bersyarat.

Basis data Oracle menulis catatan audit, yang meliputi catatan audit `SYS`, ke *Jejak audit terpadu*. Misalnya, jika terjadi kesalahan selama pernyataan `INSERT`, pengauditan standar menunjukkan nomor kesalahan dan SQL yang dijalankan. Jejak audit berada dalam sebuah tabel hanya baca dalam skema `AUDSYS`. Untuk mengakses catatan ini, lakukan kueri tampilan kamus data `UNIFIED_AUDIT_TRAIL`.

Biasanya, Anda mengonfigurasikan aliran aktivitas basis data sebagai berikut:

1. Buat kebijakan audit Oracle Database dengan menggunakan perintah `CREATE AUDIT POLICY`.

   Oracle Database menghasilkan catatan audit.

1. Aktifkan kebijakan audit dengan menggunakan perintah `AUDIT POLICY`.

1. Konfigurasikan aliran aktivitas basis data.

   Hanya aktivitas yang sesuai dengan kebijakan audit Oracle Database yang ditangkap dan dikirim ke aliran data Amazon Kinesis. Ketika aliran aktivitas basis data diaktifkan, administrator basis data Oracle tidak dapat mengubah kebijakan audit atau menghapus log audit.

Untuk mempelajari lebih lanjut kebijakan audit terpadu, lihat [About Auditing Activities with Unified Audit Policies and AUDIT](https://docs.oracle.com/en/database/oracle/oracle-database/19/dbseg/configuring-audit-policies.html#GUID-2435D929-10AD-43C7-8A6C-5133170074D0) dalam *Panduan Keamanan Oracle Database*.

#### Pengauditan di Microsoft SQL Server
<a name="DBActivityStreams.Overview.SQLServer-auditing"></a>

Database Activity Stream menggunakan SQLAudit fitur untuk mengaudit database SQL Server.

Instans RDS for SQL Server berisi unsur-unsur berikut:
+ Audit server – Audit server SQL mengumpulkan satu peristiwa tindakan tingkat server atau basis data, dan sekelompok tindakan untuk dipantau. Audit-audit tingkat server `RDS_DAS_AUDIT` dan `RDS_DAS_AUDIT_CHANGES` dikelola oleh RDS.
+ Spesifikasi audit server – Spesifikasi audit server mencatat peristiwa tingkat server. Anda dapat mengubah spesifikasi `RDS_DAS_SERVER_AUDIT_SPEC`. Spesifikasi ini terkait dengan audit server`RDS_DAS_AUDIT`. Spesifikasi `RDS_DAS_CHANGES_AUDIT_SPEC` dikelola oleh RDS.
+ Spesifikasi audit basis data – Spesifikasi audit basis data mencatat peristiwa tingkat basis data. Anda dapat membuat spesifikasi audit basis data `RDS_DAS_DB_<name>` dan menautkannya dengan audit server `RDS_DAS_AUDIT`.

Anda dapat mengonfigurasikan aliran aktivitas basis data dengan menggunakan konsol atau CLI. Biasanya, Anda mengonfigurasikan aliran aktivitas basis data sebagai berikut:

1. (Opsional) Buat spesifikasi audit basis data dengan perintah `CREATE DATABASE AUDIT SPECIFICATION` dan tautkan dengan audit server `RDS_DAS_AUDIT`. 

1. (Opsional) Ubah spesifikasi audit server dengan perintah `ALTER SERVER AUDIT SPECIFICATION` dan tentukan kebijakan. 

1. Aktifkan kebijakan audit basis data dan server. Contoh:

   `ALTER DATABASE AUDIT SPECIFICATION [<Your database specification>] WITH (STATE=ON)`

   `ALTER SERVER AUDIT SPECIFICATION [RDS_DAS_SERVER_AUDIT_SPEC] WITH (STATE=ON)`

1. Konfigurasikan aliran aktivitas basis data.

   Hanya aktivitas-aktivitas yang sesuai dengan kebijakan audit server dan basis data yang ditangkap dan dikirim ke aliran data Amazon Kinesis. Ketika aliran aktivitas basis data diaktifkan dan kebijakan dikunci, administrator basis data tidak dapat mengubah kebijakan audit atau menghapus log audit. 
**penting**  
Jika spesifikasi audit basis data untuk basis data tertentu diaktifkan dan kebijakan dalam keadaan terkunci, maka basis data tidak dapat didrop.

Lihat informasi yang lebih lengkap tentang audit SQL Server di [SQL Server Audit Components](https://learn.microsoft.com/en-us/sql/relational-databases/security/auditing/sql-server-audit-database-engine?view=sql-server-ver16) dalam *dokumentasi Microsoft SQL Server*.



#### Bidang-bidang audit non-asli untuk Oracle Database dan SQL Server
<a name="DBActivityStreams.Overview.unified-auditing.non-native"></a>

Ketika Anda memulai aliran aktivitas basis data, setiap peristiwa basis data menghasilkan peristiwa aliran aktivitas yang terkait. Misalnya, pengguna basis data dapat menjalankan pernyataan-pernyataan `SELECT` dan `INSERT`. Basis data mengaudit kedua peristiwa ini dan mengirimkannya ke aliran data Amazon Kinesis.

Peristiwa-peristiwa disajikan dalam aliran sebagai objek JSON. Sebuah objek JSON berisi `DatabaseActivityMonitoringRecord`, yang berisi array `databaseActivityEventList`. Bidang-bidang yang telah ditetapkan dalam array mencakup `class`, `clientApplication`, dan`command`.

Secara default, aliran aktivitas tidak mencakup bidang-bidang audit asli mesin. Anda dapat mengonfigurasikan Amazon RDS for Oracle dan SQL Server agar menyertakan bidang-bidang tambahan ini di dalam objek JSON `engineNativeAuditFields`.

Di Oracle Database, sebagian besar peristiwa dalam jejak audit terpadu memeta ke bidang-bidang dalam aliran aktivitas data RDS. Misalnya, bidang `UNIFIED_AUDIT_TRAIL.SQL_TEXT` dalam pengauditan terpadu memeta ke bidang `commandText` dalam aliran aktivitas basis data. Namun, bidang-bidang audit Oracle Database seperti `OS_USERNAME` tidak memeta ke bidang-bidang yang telah ditentukan dalam aliran aktivitas basis data.

Di SQL Server, sebagian besar bidang acara yang direkam oleh SQLAudit peta ke bidang dalam aliran aktivitas database RDS. Misalnya, bidang `code` dari `sys.fn_get_audit_file` dalam audit memeta ke bidang `commandText` dalam aliran aktivitas basis data. Namun, bidang-bidang audit basis data SQL Server seperti `permission_bitmask` tidak memeta ke bidang-bidang yang telah ditentukan dalam aliran aktivitas basis data.

Untuk informasi selengkapnya tentang databaseActivityEvent Daftar, lihat[databaseActivityEventDaftar array JSON untuk aliran aktivitas database](DBActivityStreams.AuditLog.databaseActivityEventList.md).

#### Penindasan grup parameter basis data
<a name="DBActivityStreams.Overview.unified-auditing.parameter-group"></a>

Biasanya, Anda mengaktifkan pengauditan terpadu di RDS for Oracle dengan melampirkan grup parameter. Namun, Aliran Aktivitas Basis Data memerlukan konfigurasi tambahan. Untuk meningkatkan pengalaman pelanggan Anda, Amazon RDS melakukan hal-hal berikut:
+ Jika Anda mengaktifkan aliran aktivitas, RDS for Oracle mengabaikan parameter-parameter pengauditan dalam grup parameter.
+ Jika Anda menonaktifkan aliran aktivitas, RDS for Oracle berhenti mengabaikan parameter-parameter pengauditan.

Aliran aktivitas basis data untuk SQL Server benar-benar independen terhadap parameter-parameter yang Anda tetapkan dalam opsi SQLAudit.

### Mode asinkron untuk aliran aktivitas database
<a name="DBActivityStreams.Overview.sync-mode"></a>

Aliran aktivitas di Amazon RDS selalu asinkron. Ketika sesi basis data menghasilkan peristiwa aliran aktivitas, sesi akan kembali dengan seketika ke aktivitas normal. Di latar belakang, Amazon RDS menjadikan peristiwa aliran aktivitas sebuah catatan yang durabel.

Jika kesalahan terjadi dalam tugas latar belakang, Amazon RDS akan menghasilkan peristiwa. Peristiwa ini menunjukkan awal dan akhir segala jendela waktu ketika catatan peristiwa aliran aktivitas mungkin telah hilang. Mode asinkron lebih memprioritaskan performa basis data daripada akurasi aliran aktivitas.

### Persyaratan dan batasan untuk aliran aktivitas basis data
<a name="DBActivityStreams.Overview.requirements"></a>

Dalam RDS, aliran aktivitas basis data memiliki persyaratan dan batasan berikut:
+ Amazon Kinesis diharuskan untuk aliran aktivitas basis data.
+ AWS Key Management Service (AWS KMS) diperlukan untuk aliran aktivitas database karena selalu dienkripsi.
+ Menerapkan enkripsi tambahan ke aliran data Amazon Kinesis Anda tidak kompatibel dengan aliran aktivitas database, yang sudah dienkripsi dengan kunci Anda. AWS KMS 
+ Anda membuat dan mengelola sendiri kebijakan audit. Berbeda dengan Amazon Aurora, RDS for Oracle tidak menangkap aktivitas basis data secara default.
+ Anda membuat dan mengelola sendiri kebijakan atau spesifikasi audit. Berbeda dengan Amazon Aurora, Amazon RDS tidak menangkap aktivitas basis data secara default.
+ Dalam deployment Multi-AZ, mulai aliran aktivitas basis data hanya pada instans basis data utama. Aliran aktivitas mengaudit secara otomatis baik instans basis data utama maupun instans basis data siaga. Tidak ada langkah tambahan yang diperlukan selama failover.
+ Mengganti nama instans basis data tidak membuat aliran Kinesis baru.
+ CDBs tidak didukung untuk RDS untuk Oracle.
+ Replika baca tidak didukung.

### Wilayah dan ketersediaan versi
<a name="DBActivityStreams.RegionVersionAvailability"></a>

Ketersediaan dan dukungan fitur bervariasi di antara versi-versi spesifik setiap mesin basis data, dan di antara Wilayah AWS. Lihat informasi yang lebih lengkap tentang ketersediaan versi dan Wilayah dengan aliran aktivitas basis data di [Daerah yang Didukung dan engine DB untuk aliran aktivitas database di Amazon RDS](Concepts.RDS_Fea_Regions_DB-eng.Feature.DBActivityStreams.md).

### Kelas-kelas instans basis data yang didukung untuk aliran aktivitas basis data
<a name="DBActivityStreams.Overview.requirements.classes"></a>

Untuk RDS for Oracle, Anda dapat menggunakan aliran aktivitas basis data dengan kelas-kelas instans basis data berikut:
+ db.m4.\$1large
+ db.m5.\$1large
+ db.m5d.\$1large
+ db.m6i.\$1large
+ db.r4.\$1large
+ db.r5.\$1large
+ db.r5.\$1large.tpc\$1.mem\$1x
+ db.r5b.\$1large
+ db.r5b.\$1large.tpc\$1.mem\$1x
+ db.r5d.\$1large
+ db.r6i.\$1large
+ db.r6i. \$1 besar.tpc\$1.mem\$1x
+ db.x2idn.\$1large
+ db.x2iedn.\$1large
+ db.x2iezn.\$1large
+ db.z1d.\$1large

Untuk RDS for SQL Server, Anda dapat menggunakan aliran aktivitas basis data dengan kelas-kelas instans basis data berikut:
+ db.m4.\$1large
+ db.m5.\$1large
+ db.m5d.\$1large
+ db.m6i.\$1large
+ db.r4.\$1large
+ db.r5.\$1large
+ db.r5b.\$1large
+ db.r5d.\$1large
+ db.r6i.\$1large
+ db.x1e.\$1large
+ db.x2iedn.\$1large
+ db.z1d.\$1large

Lihat informasi yang lebih lengkap tentang jenis-jenis kelas instans di [ DB](Concepts.DBInstanceClass.md).

# Mengonfigurasikan pengauditan terpadu untuk basis data Oracle
<a name="DBActivityStreams.configuring-auditing"></a>

Ketika Anda mengonfigurasikan pengauditan terpadu untuk digunakan dengan aliran aktivitas basis data, situasi-situasi berikut mungkin terjadi:
+ Pengauditan terpadu tidak dikonfigurasikan untuk basis data Oracle Anda.

  Dalam hal ini, buat kebijakan-kebijakan baru dengan perintah `CREATE AUDIT POLICY`, lalu aktifkan kebijakan dengan perintah `AUDIT POLICY`. Contoh berikut membuat dan mengaktifkan sebuah kebijakan untuk memantau pengguna dengan privilese dan peran yang spesifik.

  ```
  CREATE AUDIT POLICY table_pol
  PRIVILEGES CREATE ANY TABLE, DROP ANY TABLE
  ROLES emp_admin, sales_admin;
  
  AUDIT POLICY table_pol;
  ```

  Lihat petunjuk lengkapnya di [Mengonfigurasikan Kebijakan Audit](https://docs.oracle.com/en/database/oracle/oracle-database/19/dbseg/configuring-audit-policies.html#GUID-22CDB667-5AA2-4051-A262-FBD0236763CB) dalam dokumentasi Oracle Database.
+ Pengauditan terpadu dikonfigurasikan untuk basis data Oracle Anda.

  Bila Anda mengaktifkan suatu aliran aktivitas basis data, RDS for Oracle membersihkan secara otomatis data audit yang ada. Sistem juga mencabut privilese jejak audit. RDS for Oracle tidak dapat lagi melakukan hal-hal berikut:
  + Membersihkan rekam jejak audit terpadu.
  + Menambah, menghapus, atau mengubah kebijakan audit terpadu.
  + Memperbarui stempel waktu yang terakhir diarsipkan.
**penting**  
Kami sangat menyarankan supaya Anda membuat cadangan data audit sebelum mengaktifkan aliran aktivitas basis data.

  Lihat deskripsi tampilan `UNIFIED_AUDIT_TRAIL` di [UNIFIED\$1AUDIT\$1TRAIL](https://docs.oracle.com/database/121/REFRN/GUID-B7CE1C02-2FD4-47D6-80AA-CF74A60CDD1D.htm#REFRN29162). Jika Anda memiliki akun dengan Oracle Support, lihat [Cara Membersihkan JEJAK AUDIT TERPADU](https://support.oracle.com/knowledge/Oracle%20Database%20Products/1582627_1.html).

# Mengkonfigurasi kebijakan audit untuk Amazon RDS untuk Microsoft SQL Server
<a name="DBActivityStreams.configuring-auditing-SQLServer"></a>

Sebuah instans basis data SQL Server memiliki audit server `RDS_DAS_AUDIT`, yang dikelola oleh Amazon RDS. Anda dapat menentukan kebijakan untuk mencatat peristiwa server dalam spesifikasi audit server `RDS_DAS_SERVER_AUDIT_SPEC`. Anda dapat membuat spesifikasi audit basis data, seperti `RDS_DAS_DB_<name>`, dan menentukan kebijakan untuk mencatat peristiwa basis data. Lihat daftar grup tindakan audit tingkat server dan basis data di [SQL Server Audit Action Groups and Actions](https://learn.microsoft.com/en-us/sql/relational-databases/security/auditing/sql-server-audit-action-groups-and-actions) dalam *dokumentasi Microsoft SQL Server*.

Kebijakan server default memantau hanya upaya masuk yang gagal dan perubahan pada semua spesifikasi audit basis data atau server untuk aliran aktivitas basis data.

Batasan untuk audit dan spesifikasi audit meliputi:
+ Anda tidak dapat mengubah spesifikasi audit server atau basis data saat aliran aktivitas basis data dalam keadaan *terkunci*.
+ Anda tidak dapat mengubah spesifikasi audit server `RDS_DAS_AUDIT`.
+ Anda tidak dapat mengubah audit SQL Server `RDS_DAS_CHANGES` atau spesifikasi audit server terkaitnya `RDS_DAS_CHANGES_AUDIT_SPEC`.
+ Saat membuat spesifikasi audit basis data, Anda harus menggunakan format `RDS_DAS_DB_<name>`, misalnya, `RDS_DAS_DB_databaseActions`.

**penting**  
Untuk kelas instans yang lebih kecil, sebaiknya jangan audit semua melainkan hanya data yang diperlukan. Hal ini membantu mengurangi dampak performa Aliran Aktivitas Basis Data pada kelas instans ini.

Kode contoh berikut mengubah spesifikasi audit server `RDS_DAS_SERVER_AUDIT_SPEC` dan mengaudit semua tindakan masuk yang berhasil dan tindakan keluar:

```
ALTER SERVER AUDIT SPECIFICATION [RDS_DAS_SERVER_AUDIT_SPEC]
      WITH (STATE=OFF);
ALTER SERVER AUDIT SPECIFICATION [RDS_DAS_SERVER_AUDIT_SPEC]
      ADD (LOGOUT_GROUP),
      ADD (SUCCESSFUL_LOGIN_GROUP)
      WITH (STATE = ON );
```

Kode contoh berikut membuat spesifikasi audit basis data `RDS_DAS_DB_database_spec` dan melampirkannya pada audit server `RDS_DAS_AUDIT`:

```
USE testDB;
CREATE DATABASE AUDIT SPECIFICATION [RDS_DAS_DB_database_spec]
     FOR SERVER AUDIT [RDS_DAS_AUDIT]
     ADD ( INSERT, UPDATE, DELETE  
          ON testTable BY testUser )  
     WITH (STATE = ON);
```

Setelah spesifikasi audit dikonfigurasikan, pastikan bahwa spesifikasi-spesifikasi `RDS_DAS_SERVER_AUDIT_SPEC` dan `RDS_DAS_DB_<name>` diatur ke keadaan `ON`. Kini, keduanya dapat mengirim data audit ke aliran aktivitas basis data Anda.

# Memulai aliran aktivitas basis data
<a name="DBActivityStreams.Enabling"></a>

Ketika Anda memulai aliran aktivitas untuk instans basis data, setiap peristiwa aktivitas basis data yang Anda konfigurasikan dalam kebijakan audit akan menghasilkan peristiwa aliran aktivitas. Perintah-perintah SQL seperti `CONNECT` dan `SELECT` menghasilkan peristiwa akses. Perintah-perintah SQL seperti `CREATE` dan `INSERT` menghasilkan peristiwa perubahan.

**penting**  
Mengaktifkan aliran aktivitas untuk instans basis data Oracle akan membersihkan data audit yang ada. Hal ini juga mencabut privilese jejak audit. Ketika aliran diaktifkan, RDS for Oracle tidak dapat lagi melakukan hal-hal berikut:  
Membersihkan catatan jejak audit terpadu.
Menambah, menghapus, atau mengubah kebijakan audit terpadu.
Memperbarui stempel waktu yang terakhir diarsipkan.

------
#### [ Console ]

**Untuk memulai aliran aktivitas basis data**

1. Buka konsol Amazon RDS di [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/).

1. Di panel navigasi, pilih **Basis data**.

1. Pilih instans basis data Amazon RDS tempat Anda ingin memulai aliran aktivitas. Dalam deployment Multi-AZ, mulai aliran hanya pada instans utama. Aliran aktivitas mengaudit instans-instans utama dan siaga.

1. Untuk **Tindakan**, pilih **Mulai aliran aktivitas**. 

   *name*Jendela **Start database activity stream:** muncul, di *name* mana instance RDS Anda.

1. Masukkan setelan berikut:
   + Untuk **AWS KMS key**, pilih kunci dari daftar AWS KMS keys.

     Amazon RDS menggunakan kunci KMS untuk mengenkripsi kunci yang pada gilirannya mengenkripsi aktivitas basis data. Pilih kunci KMS selain kunci default. Untuk informasi selengkapnya tentang kunci enkripsi dan AWS KMS, lihat [Apa itu AWS Key Management Service?](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html) di *Panduan AWS Key Management Service Pengembang.*
   + Untuk **Peristiwa aktivitas basis data**, pilih **Aktifkan bidang-bidang audit asli mesin** untuk menyertakan bidang-bidang audit khusus mesin.
   + Pilih **Segera**.

     Bila Anda memilih **Segera**, instans RDS memulai ulang dengan seketika. Jika Anda memilih **Selama jendela pemeliharaan berikutnya**, instans RDS tidak seketika memulai ulang. Dalam hal ini, aliran aktivitas basis data tidak dimulai hingga jendela pemeliharaan berikutnya.

1. Pilih **Mulai aliran aktivitas basis data**.

   Status untuk basis data menunjukkan bahwa aliran aktivitas dimulai.
**catatan**  
Jika Anda mendapatkan kesalahan `You can't start a database activity stream in this configuration`, periksa [Kelas-kelas instans basis data yang didukung untuk aliran aktivitas basis data](DBActivityStreams.md#DBActivityStreams.Overview.requirements.classes) untuk melihat apakah instans RDS Anda menggunakan kelas instans yang didukung.

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

Untuk memulai aliran aktivitas database untuk instans DB, database menggunakan [start-activity-stream](https://docs.aws.amazon.com/cli/latest/reference/rds/start-activity-stream.html) AWS CLI perintah.
+ `--resource-arn arn` – Menentukan Amazon Resource Name (ARN) instans basis data.
+ `--kms-key-id key` – Menentukan pengidentifikasi kunci KMS untuk mengenkripsi pesan dalam aliran aktivitas basis data. Pengidentifikasi kunci AWS KMS adalah kunci ARN, ID kunci, alias ARN, atau nama alias untuk. AWS KMS key
+ `--engine-native-audit-fields-included` – Menyertakan bidang-bidang pengauditan khusus mesin dalam aliran data. Untuk mengecualikan bidang-bidang ini, pilih `--no-engine-native-audit-fields-included` (default).

Contoh berikut memulai aliran aktivitas basis data untuk sebuah instans basis data dalam mode asinkron.

Untuk Linux, macOS, atau Unix:

```
aws rds start-activity-stream \
    --mode async \
    --kms-key-id my-kms-key-arn \
    --resource-arn my-instance-arn \
    --engine-native-audit-fields-included \
    --apply-immediately
```

Untuk Windows:

```
aws rds start-activity-stream ^
    --mode async ^
    --kms-key-id my-kms-key-arn ^
    --resource-arn my-instance-arn ^
    --engine-native-audit-fields-included ^
    --apply-immediately
```

------
#### [ Amazon RDS API ]

Untuk memulai aliran aktivitas database untuk instance DB DB, instance menggunakan [StartActivityStream](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_StartActivityStream.html)operasi.

Panggil tindakan dengan parameter-parameter di bawah:
+ `Region`
+ `KmsKeyId`
+ `ResourceArn`
+ `Mode`
+ `EngineNativeAuditFieldsIncluded`

------

# Memodifikasi aliran aktivitas database untuk Amazon RDS
<a name="DBActivityStreams.Modifying"></a>

Anda mungkin ingin menyesuaikan kebijakan RDS audit Amazon saat streaming aktivitas dimulai. Jika tidak ingin kehilangan waktu dan data dengan menghentikan aliran aktivitas, Anda dapat mengubah *keadaan kebijakan audit* ke salah satu setelan berikut:

**Terkunci (default)**  
Kebijakan audit di basis data Anda bersifat hanya baca.

**Tidak Terkunci**  
Kebijakan audit di basis data Anda bersifat baca/tulis.

Langkah-langkah dasarnya adalah sebagai berikut:

1. Ubah keadaan kebijakan audit ke tidak terkunci.

1. Sesuaikan kebijakan audit Anda.

1. Ubah keadaan kebijakan audit ke terkunci.

## Konsol
<a name="DBActivityStreams.Modifying-collapsible-section-E1"></a>

**Untuk mengubah keadaan kebijakan audit aliran aktivitas Anda**

1. Buka RDS konsol Amazon di [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/).

1. Di panel navigasi, pilih **Basis Data**.

1. Untuk **Tindakan**, pilih **Ubah aliran aktivitas basis data**. 

   Aliran aktivitas database ** Modify: *name***jendela muncul, di mana *name* adalah RDS contoh Anda.

1. Pilih salah satu opsi berikut:  
**Terkunci**  
Ketika kebijakan audit Anda kunci, kebijakan itu menjadi hanya baca. Anda tidak dapat mengedit kebijakan audit, kecuali kuncinya Anda buka atau aliran aktivitas Anda hentikan.  
**Tidak Terkunci**  
Ketika kebijakan audit Anda buka kuncinya, kebijakan itu menjadi baca/tulis. Anda dapat mengedit kebijakan audit selagi aliran aktivitas dimulai.

1. Pilih **Ubah aliran aktivitas basis data**.

   Status untuk RDS database Amazon menunjukkan **Mengonfigurasi aliran aktivitas**.

1. (Opsional) Pilih tautan instans basis data. Lalu pilih tab **Konfigurasi**.

   Bidang **Status kebijakan Audit** menunjukkan salah satu nilai berikut:
   + **Terkunci**
   + **Tidak Terkunci**
   + **Kebijakan penguncian**
   + **Kebijakan pembukaan kunci**

## AWS CLI
<a name="DBActivityStreams.Modifying-collapsible-section-E2"></a>

Untuk mengubah status aliran aktivitas untuk instance database, gunakan [modify-activity-stream](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-activity-stream.html) AWS CLI perintah.


****  

| Opsi | Wajib? | Deskripsi | 
| --- | --- | --- | 
|  `--resource-arn my-instance-ARN`  |  Ya  |  Amazon Resource Name (ARN) dari instans RDS database Anda.  | 
|  `--audit-policy-state`  |  Tidak  |  Keadaan baru kebijakan audit untuk aliran aktivitas basis data pada instans Anda: `locked` atau `unlocked`.  | 

Contoh berikut membuka kebijakan audit untuk aliran aktivitas yang dimulai *my-instance-ARN*.

Untuk Linux, macOS, atau Unix:

```
aws rds modify-activity-stream \
    --resource-arn my-instance-ARN \
    --audit-policy-state unlocked
```

Untuk Windows:

```
aws rds modify-activity-stream ^
    --resource-arn my-instance-ARN ^
    --audit-policy-state unlocked
```

Contoh berikut menjelaskan contoh *my-instance*. Output sampel sebagian menunjukkan bahwa kebijakan audit tidak terkunci.

```
aws rds describe-db-instances --db-instance-identifier my-instance

{
    "DBInstances": [
        {
            ...
            "Engine": "oracle-ee",
            ...
            "ActivityStreamStatus": "started",
            "ActivityStreamKmsKeyId": "ab12345e-1111-2bc3-12a3-ab1cd12345e",
            "ActivityStreamKinesisStreamName": "aws-rds-das-db-AB1CDEFG23GHIJK4LMNOPQRST",
            "ActivityStreamMode": "async",
            "ActivityStreamEngineNativeAuditFieldsIncluded": true, 
            "ActivityStreamPolicyStatus": "unlocked",
            ...
        }
    ]
}
```

## RDS API
<a name="DBActivityStreams.Modifying-collapsible-section-E3"></a>

Untuk mengubah status kebijakan aliran aktivitas database Anda, gunakan [ModifyActivityStream](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyActivityStream.html)operasi.

Panggil tindakan dengan parameter-parameter di bawah:
+ `AuditPolicyState`
+ `ResourceArn`

# Mendapatkan status aliran aktivitas basis data
<a name="DBActivityStreams.Status"></a>

Anda bisa mendapatkan status aliran aktivitas untuk instans basis data Amazon RDS Anda dengan menggunakan konsol atau AWS CLI.

## Konsol
<a name="DBActivityStreams.Status-collapsible-section-S1"></a>

**Untuk mendapatkan status aliran aktivitas basis data**

1. Buka konsol Amazon RDS di [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/).

1. Di panel navigasi, pilih **Basis data**, lalu pilih penaut Instans basis data.

1. Pilih tab **Konfigurasi**, dan periksa **Aliran aktivitas basis data** untuk statusnya.

## AWS CLI
<a name="DBActivityStreams.Status-collapsible-section-S2"></a>

Anda bisa mendapatkan konfigurasi aliran aktivitas untuk instans basis data sebagai respons terhadap permintaan CLI [describe-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-instances.html).

Contoh berikut menjelaskan *my-instance*.

```
aws rds --region my-region describe-db-instances --db-instance-identifier my-db
```

Contoh berikut menunjukkan respons JSON. Bidang-bidang berikut ditampilkan:
+ `ActivityStreamKinesisStreamName`
+ `ActivityStreamKmsKeyId`
+ `ActivityStreamStatus`
+ `ActivityStreamMode`
+ `ActivityStreamPolicyStatus`



```
{
    "DBInstances": [
        {
            ...
            "Engine": "oracle-ee",
            ...
            "ActivityStreamStatus": "starting",
            "ActivityStreamKmsKeyId": "ab12345e-1111-2bc3-12a3-ab1cd12345e",
            "ActivityStreamKinesisStreamName": "aws-rds-das-db-AB1CDEFG23GHIJK4LMNOPQRST",
            "ActivityStreamMode": "async",
            "ActivityStreamEngineNativeAuditFieldsIncluded": true, 
            "ActivityStreamPolicyStatus": locked",
            ...
        }
    ]
}
```

## API RDS
<a name="DBActivityStreams.Status-collapsible-section-S3"></a>

Anda bisa mendapatkan konfigurasi aliran aktivitas untuk instans basis data sebagai respons operasi [DescribeDBInstances](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DescribeDBInstances.html).

# Menghentikan aliran aktivitas basis data
<a name="DBActivityStreams.Disabling"></a>

Anda dapat menghentikan aliran aktivitas menggunakan konsol atau AWS CLI.

Jika Anda menghapus instans basis data Amazon RDS, aliran aktivitas dihentikan dan aliran Amazon Kinesis yang mendasari dihapus secara otomatis.

## Konsol
<a name="DBActivityStreams.Disabling-collapsible-section-D1"></a>

**Untuk mematikan aliran aktivitas**

1. Buka konsol Amazon RDS di [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/).

1. Di panel navigasi, pilih **Database**.

1. Pilih basis data yang ingin Anda hentikan aliran aktivitas basis datanya.

1. Untuk **Tindakan**, pilih **Hentikan aliran aktivitas**. Jendela **Aliran Aktivitas Basis Data** akan muncul.

   1. Pilih **Seketika**.

      Bila Anda memilih **Segera**, instans RDS memulai ulang dengan seketika. Jika Anda memilih **Selama jendela pemeliharaan berikutnya**, instans RDS tidak seketika memulai ulang. Dalam hal ini, aliran aktivitas basis data tidak berhenti hingga jendela pemeliharaan berikutnya.

   1. Pilih **Lanjutkan**.

## AWS CLI
<a name="DBActivityStreams.Disabling-collapsible-section-D2"></a>

Untuk menghentikan aliran aktivitas database untuk database Anda, konfigurasikan instans DB menggunakan AWS CLI perintah [stop-activity-stream](https://docs.aws.amazon.com/cli/latest/reference/rds/stop-activity-stream.html). Tandai Kawasan AWS untuk instans basis data dengan menggunakan parameter `--region`. Parameter `--apply-immediately` bersifat opsional.

Untuk Linux, macOS, atau Unix:

```
aws rds --region MY_REGION \
    stop-activity-stream \
    --resource-arn MY_DB_ARN \
    --apply-immediately
```

Untuk Windows:

```
aws rds --region MY_REGION ^
    stop-activity-stream ^
    --resource-arn MY_DB_ARN ^
    --apply-immediately
```

## API RDS
<a name="DBActivityStreams.Disabling-collapsible-section-D3"></a>

Untuk menghentikan aliran aktivitas database untuk database Anda, konfigurasikan instans DB menggunakan [StopActivityStream](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_StopActivityStream.html)operasi. Tandai Kawasan AWS untuk instans basis data dengan menggunakan parameter `Region`. Parameter `ApplyImmediately` bersifat opsional.

# Memantau aliran aktivitas basis data
<a name="DBActivityStreams.Monitoring"></a>

Aliran aktivitas basis data memantau dan melaporkan aktivitas. Aliran aktivitas dikumpulkan dan dikirim ke Amazon Kinesis. Dari Kinesis, Anda dapat memantau aliran aktivitas, atau layanan dan aplikasi lain dapat menggunakan aliran aktivitas untuk analisis lebih lanjut. Anda dapat menemukan nama aliran Kinesis yang mendasarinya dengan menggunakan AWS CLI perintah atau operasi. RDS API 

 mengelola aliran Kinesis untuk Anda sebagai berikut:
+  membuat aliran Kinesis secara otomatis dengan periode retensi 24 jam. 
+  menskalakan aliran Kinesis jika perlu. 
+  Jika Anda menghentikan aliran aktivitas database atau menghapus instans DB, menghapus aliran Kinesis. 

Kategori-kategori aktivitas berikut dipantau dan dimasukkan ke dalam log audit aliran aktivitas:
+ **SQLperintah** — Semua SQL perintah diaudit, dan juga pernyataan yang disiapkan, fungsi bawaan, dan fungsi di SQL PL/. Panggilan ke prosedur tersimpan akan diaudit. Setiap SQL pernyataan yang dikeluarkan dalam prosedur atau fungsi yang disimpan juga diaudit.
+ **Informasi database lainnya** — Aktivitas yang dipantau mencakup SQL pernyataan lengkap, jumlah baris baris yang terpengaruh dari DML perintah, objek yang diakses, dan nama database yang unik. Aliran aktivitas database juga memantau variabel pengikat dan parameter prosedur yang disimpan. 
**penting**  
SQLTeks lengkap dari setiap pernyataan terlihat di log audit aliran aktivitas, termasuk data sensitif apa pun. Namun, kata sandi pengguna database disunting jika Oracle dapat menentukannya dari konteks, seperti dalam pernyataan berikut. SQL   

  ```
  ALTER ROLE role-name WITH password
  ```
+ **Informasi koneksi** – Aktivitas yang dipantau mencakup sesi dan informasi jaringan, ID proses server, dan kode keluar.

Jika aliran aktivitas mengalami kegagalan saat memantau instans DB Anda, Anda akan diberi tahu melalui RDS acara.

Di bagian berikut, Anda dapat mengakses, mengaudit, dan memproses aliran aktivitas basis data.

**Topics**
+ [Mengakses aliran aktivitas dari Amazon Kinesis](DBActivityStreams.KinesisAccess.md)
+ [Audit isi log dan contoh untuk aliran aktivitas database](DBActivityStreams.AuditLog.md)
+ [databaseActivityEventDaftar array JSON untuk aliran aktivitas database](DBActivityStreams.AuditLog.databaseActivityEventList.md)
+ [Memproses aliran aktivitas database menggunakan AWS SDK](DBActivityStreams.CodeExample.md)

# Mengakses aliran aktivitas dari Amazon Kinesis
<a name="DBActivityStreams.KinesisAccess"></a>

Saat Anda mengaktifkan aliran aktivitas untuk basis data, aliran Kinesis dibuat untuk Anda. Dari Kinesis, Anda dapat memantau aktivitas basis data Anda secara waktu nyata. Untuk menganalisis lebih lanjut aktivitas basis data, Anda dapat menghubungkan aliran Kinesis dengan aplikasi konsumen. Anda juga dapat menghubungkan aliran ke aplikasi manajemen kepatuhan seperti  SecureSphere Database Imperva.

Anda dapat mengakses aliran Kinesis Anda baik dari RDS konsol atau konsol Kinesis.

**Untuk mengakses aliran aktivitas dari Kinesis menggunakan konsol RDS**

1. Buka RDS konsol Amazon di [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/).

1. Di panel navigasi, pilih **Basis Data**.

1. Pilih instance RDS database Amazon tempat Anda memulai aliran aktivitas.

1. Pilih **Konfigurasi**.

1. Di bawah **Aliran aktivitas basis data**, pilih tautan di bawah **Aliran Kinesis**.

1. Di konsol Kinesis, pilih **Pemantauan** untuk mulai mengamati aktivitas basis data.

**Untuk mengakses aliran aktivitas dari Kinesis dengan menggunakan konsol Kinesis**

1. Buka konsol Kinesis di [https://console.aws.amazon.com/kinesis](https://console.aws.amazon.com/kinesis).

1. Pilih aliran aktivitas Anda dari daftar aliran Kinesis.

   Nama aliran aktivitas mencakup awalan `aws-rds-das-db-` diikuti dengan ID sumber daya basis data. Berikut sebuah contohnya. 

   ```
   aws-rds-das-db-NHVOV4PCLWHGF52NP
   ```

   Untuk menggunakan RDS konsol Amazon untuk menemukan ID sumber daya untuk database, pilih instans DB dari daftar database, lalu pilih tab **Konfigurasi**.

   Untuk menggunakan AWS CLI untuk menemukan nama aliran Kinesis lengkap untuk aliran aktivitas, gunakan CLIpermintaan dan catat nilai `ActivityStreamKinesisStreamName` dalam respons.

1. Pilih **Pemantauan** untuk mulai mengamati aktivitas basis data.

Lihat informasi yang lebih lengkap tentang penggunaan Amazon Kinesis di [Apakah Amazon Kinesis Data Streams?](https://docs.aws.amazon.com/streams/latest/dev/introduction.html).

# Audit isi log dan contoh untuk aliran aktivitas database
<a name="DBActivityStreams.AuditLog"></a>

Peristiwa-peristiwa yang dipantau disajikan dalam aliran aktivitas basis data berupa string JSON. Strukturnya terdiri atas objek JSON yang berisi `DatabaseActivityMonitoringRecord`, yang selanjutnya berisi sebuah array peristiwa aktivitas `databaseActivityEventList`. 

**catatan**  
Untuk aliran aktivitas database, array `paramList` JSON tidak menyertakan nilai null dari aplikasi Hibernate.

**Topics**
+ [Contoh-contoh log audit untuk aliran aktivitas](#DBActivityStreams.AuditLog.Examples)
+ [DatabaseActivityMonitoringRecords Objek JSON](#DBActivityStreams.AuditLog.DatabaseActivityMonitoringRecords)
+ [databaseActivityEvents Objek JSON](#DBActivityStreams.AuditLog.databaseActivityEvents)

## Contoh-contoh log audit untuk aliran aktivitas
<a name="DBActivityStreams.AuditLog.Examples"></a>

Berikut adalah contoh log audit JSON terdekripsi dari catatan peristiwa aktivitas.

**Example Catatan peristiwa aktivitas dari**  
Catatan peristiwa aktivitas berikut menunjukkan upaya masuk dengan penggunaan pernyataan SQL `CONNECT` (`command`) oleh JDBC Thin Client (`clientApplication`) untuk basis data Oracle Anda.  

```
{
    "class": "Standard",
    "clientApplication": "JDBC Thin Client",
    "command": "LOGON",
    "commandText": null,
    "dbid": "0123456789",
    "databaseName": "ORCL",
    "dbProtocol": "oracle",
    "dbUserName": "TEST",
    "endTime": null,
    "errorMessage": null,
    "exitCode": 0,
    "logTime": "2021-01-15 00:15:36.233787",
    "netProtocol": "tcp",
    "objectName": null,
    "objectType": null,
    "paramList": [],
    "pid": 17904,
    "remoteHost": "123.456.789.012",
    "remotePort": "25440",
    "rowCount": null,
    "serverHost": "987.654.321.098",
    "serverType": "oracle",
    "serverVersion": "19.0.0.0.ru-2020-01.rur-2020-01.r1.EE.3",
    "serviceName": "oracle-ee",
    "sessionId": 987654321,
    "startTime": null,
    "statementId": 1,
    "substatementId": null,
    "transactionId": "0000000000000000",
    "engineNativeAuditFields": {
        "UNIFIED_AUDIT_POLICIES": "TEST_POL_EVERYTHING",
        "FGA_POLICY_NAME": null,
        "DV_OBJECT_STATUS": null,
        "SYSTEM_PRIVILEGE_USED": "CREATE SESSION",
        "OLS_LABEL_COMPONENT_TYPE": null,
        "XS_SESSIONID": null,
        "ADDITIONAL_INFO": null,
        "INSTANCE_ID": 1,
        "DBID": 123456789
        "DV_COMMENT": null,
        "RMAN_SESSION_STAMP": null,
        "NEW_NAME": null,
        "DV_ACTION_NAME": null,
        "OLS_PROGRAM_UNIT_NAME": null,
        "OLS_STRING_LABEL": null,
        "RMAN_SESSION_RECID": null,
        "OBJECT_PRIVILEGES": null,
        "OLS_OLD_VALUE": null,
        "XS_TARGET_PRINCIPAL_NAME": null,
        "XS_NS_ATTRIBUTE": null,
        "XS_NS_NAME": null,
        "DBLINK_INFO": null,
        "AUTHENTICATION_TYPE": "(TYPE\u003d(DATABASE));(CLIENT ADDRESS\u003d((ADDRESS\u003d(PROTOCOL\u003dtcp)(HOST\u003d205.251.233.183)(PORT\u003d25440))));",
        "OBJECT_EDITION": null,
        "OLS_PRIVILEGES_GRANTED": null,
        "EXCLUDED_USER": null,
        "DV_ACTION_OBJECT_NAME": null,
        "OLS_LABEL_COMPONENT_NAME": null,
        "EXCLUDED_SCHEMA": null,
        "DP_TEXT_PARAMETERS1": null,
        "XS_USER_NAME": null,
        "XS_ENABLED_ROLE": null,
        "XS_NS_ATTRIBUTE_NEW_VAL": null,
        "DIRECT_PATH_NUM_COLUMNS_LOADED": null,
        "AUDIT_OPTION": null,
        "DV_EXTENDED_ACTION_CODE": null,
        "XS_PACKAGE_NAME": null,
        "OLS_NEW_VALUE": null,
        "DV_RETURN_CODE": null,
        "XS_CALLBACK_EVENT_TYPE": null,
        "USERHOST": "a1b2c3d4e5f6.amazon.com",
        "GLOBAL_USERID": null,
        "CLIENT_IDENTIFIER": null,
        "RMAN_OPERATION": null,
        "TERMINAL": "unknown",
        "OS_USERNAME": "sumepate",
        "OLS_MAX_READ_LABEL": null,
        "XS_PROXY_USER_NAME": null,
        "XS_DATASEC_POLICY_NAME": null,
        "DV_FACTOR_CONTEXT": null,
        "OLS_MAX_WRITE_LABEL": null,
        "OLS_PARENT_GROUP_NAME": null,
        "EXCLUDED_OBJECT": null,
        "DV_RULE_SET_NAME": null,
        "EXTERNAL_USERID": null,
        "EXECUTION_ID": null,
        "ROLE": null,
        "PROXY_SESSIONID": 0,
        "DP_BOOLEAN_PARAMETERS1": null,
        "OLS_POLICY_NAME": null,
        "OLS_GRANTEE": null,
        "OLS_MIN_WRITE_LABEL": null,
        "APPLICATION_CONTEXTS": null,
        "XS_SCHEMA_NAME": null,
        "DV_GRANTEE": null,
        "XS_COOKIE": null,
        "DBPROXY_USERNAME": null,
        "DV_ACTION_CODE": null,
        "OLS_PRIVILEGES_USED": null,
        "RMAN_DEVICE_TYPE": null,
        "XS_NS_ATTRIBUTE_OLD_VAL": null,
        "TARGET_USER": null,
        "XS_ENTITY_TYPE": null,
        "ENTRY_ID": 1,
        "XS_PROCEDURE_NAME": null,
        "XS_INACTIVITY_TIMEOUT": null,
        "RMAN_OBJECT_TYPE": null,
        "SYSTEM_PRIVILEGE": null,
        "NEW_SCHEMA": null,
        "SCN": 5124715
    }
}
```
Catatan peristiwa aktivitas berikut menunjukkan kegagalan upaya masuk untuk basis data SQL Server Anda.  

```
{
    "type": "DatabaseActivityMonitoringRecord",
    "clusterId": "",
    "instanceId": "db-4JCWQLUZVFYP7DIWP6JVQ77O3Q",
    "databaseActivityEventList": [
        {
            "class": "LOGIN",
            "clientApplication": "Microsoft SQL Server Management Studio",
            "command": "LOGIN FAILED",
            "commandText": "Login failed for user 'test'. Reason: Password did not match that for the login provided. [CLIENT: local-machine]",
            "databaseName": "",
            "dbProtocol": "SQLSERVER",
            "dbUserName": "test",
            "endTime": null,
            "errorMessage": null,
            "exitCode": 0,
            "logTime": "2022-10-06 21:34:42.7113072+00",
            "netProtocol": null,
            "objectName": "",
            "objectType": "LOGIN",
            "paramList": null,
            "pid": null,
            "remoteHost": "local machine",
            "remotePort": null,
            "rowCount": 0,
            "serverHost": "172.31.30.159",
            "serverType": "SQLSERVER",
            "serverVersion": "15.00.4073.23.v1.R1",
            "serviceName": "sqlserver-ee",
            "sessionId": 0,
            "startTime": null,
            "statementId": "0x1eb0d1808d34a94b9d3dcf5432750f02",
            "substatementId": 1,
            "transactionId": "0",
            "type": "record",
            "engineNativeAuditFields": {
                "target_database_principal_id": 0,
                "target_server_principal_id": 0,
                "target_database_principal_name": "",
                "server_principal_id": 0,
                "user_defined_information": "",
                "response_rows": 0,
                "database_principal_name": "",
                "target_server_principal_name": "",
                "schema_name": "",
                "is_column_permission": false,
                "object_id": 0,
                "server_instance_name": "EC2AMAZ-NFUJJNO",
                "target_server_principal_sid": null,
                "additional_information": "<action_info "xmlns=\"http://schemas.microsoft.com/sqlserver/2008/sqlaudit_data\"><pooled_connection>0</pooled_connection><error>0x00004818</error><state>8</state><address>local machine</address><PasswordFirstNibbleHash>B</PasswordFirstNibbleHash></action_info>"-->,
                "duration_milliseconds": 0,
                "permission_bitmask": "0x00000000000000000000000000000000",
                "data_sensitivity_information": "",
                "session_server_principal_name": "",
                "connection_id": "98B4F537-0F82-49E3-AB08-B9D33B5893EF",
                "audit_schema_version": 1,
                "database_principal_id": 0,
                "server_principal_sid": null,
                "user_defined_event_id": 0,
                "host_name": "EC2AMAZ-NFUJJNO"
            }
        }
    ]
}
```
Jika aliran aktivitas basis data tidak diaktifkan, maka bidang terakhir dalam dokumen JSON adalah `"engineNativeAuditFields": { }`. 

**Example Catatan peristiwa aktivitas pernyataan CREATE TABLE**  
Contoh berikut menunjukkan peristiwa `CREATE TABLE` untuk basis data Oracle Anda.  

```
{
    "class": "Standard",
    "clientApplication": "sqlplus@ip-12-34-5-678 (TNS V1-V3)",
    "command": "CREATE TABLE",
    "commandText": "CREATE TABLE persons(\n    person_id NUMBER GENERATED BY DEFAULT AS IDENTITY,\n    first_name VARCHAR2(50) NOT NULL,\n    last_name VARCHAR2(50) NOT NULL,\n    PRIMARY KEY(person_id)\n)",
    "dbid": "0123456789",
    "databaseName": "ORCL",
    "dbProtocol": "oracle",
    "dbUserName": "TEST",
    "endTime": null,
    "errorMessage": null,
    "exitCode": 0,
    "logTime": "2021-01-15 00:22:49.535239",
    "netProtocol": "beq",
    "objectName": "PERSONS",
    "objectType": "TEST",
    "paramList": [],
    "pid": 17687,
    "remoteHost": "123.456.789.0",
    "remotePort": null,
    "rowCount": null,
    "serverHost": "987.654.321.01",
    "serverType": "oracle",
    "serverVersion": "19.0.0.0.ru-2020-01.rur-2020-01.r1.EE.3",
    "serviceName": "oracle-ee",
    "sessionId": 1234567890,
    "startTime": null,
    "statementId": 43,
    "substatementId": null,
    "transactionId": "090011007F0D0000",
    "engineNativeAuditFields": {
        "UNIFIED_AUDIT_POLICIES": "TEST_POL_EVERYTHING",
        "FGA_POLICY_NAME": null,
        "DV_OBJECT_STATUS": null,
        "SYSTEM_PRIVILEGE_USED": "CREATE SEQUENCE, CREATE TABLE",
        "OLS_LABEL_COMPONENT_TYPE": null,
        "XS_SESSIONID": null,
        "ADDITIONAL_INFO": null,
        "INSTANCE_ID": 1,
        "DV_COMMENT": null,
        "RMAN_SESSION_STAMP": null,
        "NEW_NAME": null,
        "DV_ACTION_NAME": null,
        "OLS_PROGRAM_UNIT_NAME": null,
        "OLS_STRING_LABEL": null,
        "RMAN_SESSION_RECID": null,
        "OBJECT_PRIVILEGES": null,
        "OLS_OLD_VALUE": null,
        "XS_TARGET_PRINCIPAL_NAME": null,
        "XS_NS_ATTRIBUTE": null,
        "XS_NS_NAME": null,
        "DBLINK_INFO": null,
        "AUTHENTICATION_TYPE": "(TYPE\u003d(DATABASE));(CLIENT ADDRESS\u003d((PROTOCOL\u003dbeq)(HOST\u003d123.456.789.0)));",
        "OBJECT_EDITION": null,
        "OLS_PRIVILEGES_GRANTED": null,
        "EXCLUDED_USER": null,
        "DV_ACTION_OBJECT_NAME": null,
        "OLS_LABEL_COMPONENT_NAME": null,
        "EXCLUDED_SCHEMA": null,
        "DP_TEXT_PARAMETERS1": null,
        "XS_USER_NAME": null,
        "XS_ENABLED_ROLE": null,
        "XS_NS_ATTRIBUTE_NEW_VAL": null,
        "DIRECT_PATH_NUM_COLUMNS_LOADED": null,
        "AUDIT_OPTION": null,
        "DV_EXTENDED_ACTION_CODE": null,
        "XS_PACKAGE_NAME": null,
        "OLS_NEW_VALUE": null,
        "DV_RETURN_CODE": null,
        "XS_CALLBACK_EVENT_TYPE": null,
        "USERHOST": "ip-10-13-0-122",
        "GLOBAL_USERID": null,
        "CLIENT_IDENTIFIER": null,
        "RMAN_OPERATION": null,
        "TERMINAL": "pts/1",
        "OS_USERNAME": "rdsdb",
        "OLS_MAX_READ_LABEL": null,
        "XS_PROXY_USER_NAME": null,
        "XS_DATASEC_POLICY_NAME": null,
        "DV_FACTOR_CONTEXT": null,
        "OLS_MAX_WRITE_LABEL": null,
        "OLS_PARENT_GROUP_NAME": null,
        "EXCLUDED_OBJECT": null,
        "DV_RULE_SET_NAME": null,
        "EXTERNAL_USERID": null,
        "EXECUTION_ID": null,
        "ROLE": null,
        "PROXY_SESSIONID": 0,
        "DP_BOOLEAN_PARAMETERS1": null,
        "OLS_POLICY_NAME": null,
        "OLS_GRANTEE": null,
        "OLS_MIN_WRITE_LABEL": null,
        "APPLICATION_CONTEXTS": null,
        "XS_SCHEMA_NAME": null,
        "DV_GRANTEE": null,
        "XS_COOKIE": null,
        "DBPROXY_USERNAME": null,
        "DV_ACTION_CODE": null,
        "OLS_PRIVILEGES_USED": null,
        "RMAN_DEVICE_TYPE": null,
        "XS_NS_ATTRIBUTE_OLD_VAL": null,
        "TARGET_USER": null,
        "XS_ENTITY_TYPE": null,
        "ENTRY_ID": 12,
        "XS_PROCEDURE_NAME": null,
        "XS_INACTIVITY_TIMEOUT": null,
        "RMAN_OBJECT_TYPE": null,
        "SYSTEM_PRIVILEGE": null,
        "NEW_SCHEMA": null,
        "SCN": 5133083
    }
}
```
Contoh berikut menunjukkan peristiwa `CREATE TABLE` untuk basis data SQL Server Anda.  

```
{
    "type": "DatabaseActivityMonitoringRecord",
    "clusterId": "",
    "instanceId": "db-4JCWQLUZVFYP7DIWP6JVQ77O3Q",
    "databaseActivityEventList": [
        {
            "class": "SCHEMA",
            "clientApplication": "Microsoft SQL Server Management Studio - Query",
            "command": "ALTER",
            "commandText": "Create table [testDB].[dbo].[TestTable2](\r\ntextA varchar(6000),\r\n    textB varchar(6000)\r\n)",
            "databaseName": "testDB",
            "dbProtocol": "SQLSERVER",
            "dbUserName": "test",
            "endTime": null,
            "errorMessage": null,
            "exitCode": 1,
            "logTime": "2022-10-06 21:44:38.4120677+00",
            "netProtocol": null,
            "objectName": "dbo",
            "objectType": "SCHEMA",
            "paramList": null,
            "pid": null,
            "remoteHost": "local machine",
            "remotePort": null,
            "rowCount": 0,
            "serverHost": "172.31.30.159",
            "serverType": "SQLSERVER",
            "serverVersion": "15.00.4073.23.v1.R1",
            "serviceName": "sqlserver-ee",
            "sessionId": 84,
            "startTime": null,
            "statementId": "0x5178d33d56e95e419558b9607158a5bd",
            "substatementId": 1,
            "transactionId": "4561864",
            "type": "record",
            "engineNativeAuditFields": {
                "target_database_principal_id": 0,
                "target_server_principal_id": 0,
                "target_database_principal_name": "",
                "server_principal_id": 2,
                "user_defined_information": "",
                "response_rows": 0,
                "database_principal_name": "dbo",
                "target_server_principal_name": "",
                "schema_name": "",
                "is_column_permission": false,
                "object_id": 1,
                "server_instance_name": "EC2AMAZ-NFUJJNO",
                "target_server_principal_sid": null,
                "additional_information": "",
                "duration_milliseconds": 0,
                "permission_bitmask": "0x00000000000000000000000000000000",
                "data_sensitivity_information": "",
                "session_server_principal_name": "test",
                "connection_id": "EE1FE3FD-EF2C-41FD-AF45-9051E0CD983A",
                "audit_schema_version": 1,
                "database_principal_id": 1,
                "server_principal_sid": "0x010500000000000515000000bdc2795e2d0717901ba6998cf4010000",
                "user_defined_event_id": 0,
                "host_name": "EC2AMAZ-NFUJJNO"
            }
        }
    ]
}
```

**Example Catatan peristiwa aktivitas pernyataan SELECT**  
Contoh berikut menunjukkan peristiwa `SELECT` untuk basis data Oracle Anda.  

```
{
    "class": "Standard",
    "clientApplication": "sqlplus@ip-12-34-5-678 (TNS V1-V3)",
    "command": "SELECT",
    "commandText": "select count(*) from persons",
    "databaseName": "1234567890",
    "dbProtocol": "oracle",
    "dbUserName": "TEST",
    "endTime": null,
    "errorMessage": null,
    "exitCode": 0,
    "logTime": "2021-01-15 00:25:18.850375",
    "netProtocol": "beq",
    "objectName": "PERSONS",
    "objectType": "TEST",
    "paramList": [],
    "pid": 17687,
    "remoteHost": "123.456.789.0",
    "remotePort": null,
    "rowCount": null,
    "serverHost": "987.654.321.09",
    "serverType": "oracle",
    "serverVersion": "19.0.0.0.ru-2020-01.rur-2020-01.r1.EE.3",
    "serviceName": "oracle-ee",
    "sessionId": 1080639707,
    "startTime": null,
    "statementId": 44,
    "substatementId": null,
    "transactionId": null,
    "engineNativeAuditFields": {
        "UNIFIED_AUDIT_POLICIES": "TEST_POL_EVERYTHING",
        "FGA_POLICY_NAME": null,
        "DV_OBJECT_STATUS": null,
        "SYSTEM_PRIVILEGE_USED": null,
        "OLS_LABEL_COMPONENT_TYPE": null,
        "XS_SESSIONID": null,
        "ADDITIONAL_INFO": null,
        "INSTANCE_ID": 1,
        "DV_COMMENT": null,
        "RMAN_SESSION_STAMP": null,
        "NEW_NAME": null,
        "DV_ACTION_NAME": null,
        "OLS_PROGRAM_UNIT_NAME": null,
        "OLS_STRING_LABEL": null,
        "RMAN_SESSION_RECID": null,
        "OBJECT_PRIVILEGES": null,
        "OLS_OLD_VALUE": null,
        "XS_TARGET_PRINCIPAL_NAME": null,
        "XS_NS_ATTRIBUTE": null,
        "XS_NS_NAME": null,
        "DBLINK_INFO": null,
        "AUTHENTICATION_TYPE": "(TYPE\u003d(DATABASE));(CLIENT ADDRESS\u003d((PROTOCOL\u003dbeq)(HOST\u003d123.456.789.0)));",
        "OBJECT_EDITION": null,
        "OLS_PRIVILEGES_GRANTED": null,
        "EXCLUDED_USER": null,
        "DV_ACTION_OBJECT_NAME": null,
        "OLS_LABEL_COMPONENT_NAME": null,
        "EXCLUDED_SCHEMA": null,
        "DP_TEXT_PARAMETERS1": null,
        "XS_USER_NAME": null,
        "XS_ENABLED_ROLE": null,
        "XS_NS_ATTRIBUTE_NEW_VAL": null,
        "DIRECT_PATH_NUM_COLUMNS_LOADED": null,
        "AUDIT_OPTION": null,
        "DV_EXTENDED_ACTION_CODE": null,
        "XS_PACKAGE_NAME": null,
        "OLS_NEW_VALUE": null,
        "DV_RETURN_CODE": null,
        "XS_CALLBACK_EVENT_TYPE": null,
        "USERHOST": "ip-12-34-5-678",
        "GLOBAL_USERID": null,
        "CLIENT_IDENTIFIER": null,
        "RMAN_OPERATION": null,
        "TERMINAL": "pts/1",
        "OS_USERNAME": "rdsdb",
        "OLS_MAX_READ_LABEL": null,
        "XS_PROXY_USER_NAME": null,
        "XS_DATASEC_POLICY_NAME": null,
        "DV_FACTOR_CONTEXT": null,
        "OLS_MAX_WRITE_LABEL": null,
        "OLS_PARENT_GROUP_NAME": null,
        "EXCLUDED_OBJECT": null,
        "DV_RULE_SET_NAME": null,
        "EXTERNAL_USERID": null,
        "EXECUTION_ID": null,
        "ROLE": null,
        "PROXY_SESSIONID": 0,
        "DP_BOOLEAN_PARAMETERS1": null,
        "OLS_POLICY_NAME": null,
        "OLS_GRANTEE": null,
        "OLS_MIN_WRITE_LABEL": null,
        "APPLICATION_CONTEXTS": null,
        "XS_SCHEMA_NAME": null,
        "DV_GRANTEE": null,
        "XS_COOKIE": null,
        "DBPROXY_USERNAME": null,
        "DV_ACTION_CODE": null,
        "OLS_PRIVILEGES_USED": null,
        "RMAN_DEVICE_TYPE": null,
        "XS_NS_ATTRIBUTE_OLD_VAL": null,
        "TARGET_USER": null,
        "XS_ENTITY_TYPE": null,
        "ENTRY_ID": 13,
        "XS_PROCEDURE_NAME": null,
        "XS_INACTIVITY_TIMEOUT": null,
        "RMAN_OBJECT_TYPE": null,
        "SYSTEM_PRIVILEGE": null,
        "NEW_SCHEMA": null,
        "SCN": 5136972
    }
}
```
Contoh berikut menunjukkan peristiwa `SELECT` untuk basis data SQL Server Anda.  

```
{
    "type": "DatabaseActivityMonitoringRecord",
    "clusterId": "",
    "instanceId": "db-4JCWQLUZVFYP7DIWP6JVQ77O3Q",
    "databaseActivityEventList": [
        {
            "class": "TABLE",
            "clientApplication": "Microsoft SQL Server Management Studio - Query",
            "command": "SELECT",
            "commandText": "select * from [testDB].[dbo].[TestTable]",
            "databaseName": "testDB",
            "dbProtocol": "SQLSERVER",
            "dbUserName": "test",
            "endTime": null,
            "errorMessage": null,
            "exitCode": 1,
            "logTime": "2022-10-06 21:24:59.9422268+00",
            "netProtocol": null,
            "objectName": "TestTable",
            "objectType": "TABLE",
            "paramList": null,
            "pid": null,
            "remoteHost": "local machine",
            "remotePort": null,
            "rowCount": 0,
            "serverHost": "172.31.30.159",
            "serverType": "SQLSERVER",
            "serverVersion": "15.00.4073.23.v1.R1",
            "serviceName": "sqlserver-ee",
            "sessionId": 62,
            "startTime": null,
            "statementId": "0x03baed90412f564fad640ebe51f89b99",
            "substatementId": 1,
            "transactionId": "4532935",
            "type": "record",
            "engineNativeAuditFields": {
                "target_database_principal_id": 0,
                "target_server_principal_id": 0,
                "target_database_principal_name": "",
                "server_principal_id": 2,
                "user_defined_information": "",
                "response_rows": 0,
                "database_principal_name": "dbo",
                "target_server_principal_name": "",
                "schema_name": "dbo",
                "is_column_permission": true,
                "object_id": 581577110,
                "server_instance_name": "EC2AMAZ-NFUJJNO",
                "target_server_principal_sid": null,
                "additional_information": "",
                "duration_milliseconds": 0,
                "permission_bitmask": "0x00000000000000000000000000000001",
                "data_sensitivity_information": "",
                "session_server_principal_name": "test",
                "connection_id": "AD3A5084-FB83-45C1-8334-E923459A8109",
                "audit_schema_version": 1,
                "database_principal_id": 1,
                "server_principal_sid": "0x010500000000000515000000bdc2795e2d0717901ba6998cf4010000",
                "user_defined_event_id": 0,
                "host_name": "EC2AMAZ-NFUJJNO"
            }
        }
    ]
}
```

## DatabaseActivityMonitoringRecords Objek JSON
<a name="DBActivityStreams.AuditLog.DatabaseActivityMonitoringRecords"></a>

Catatan peristiwa aktivitas basis data berada dalam objek JSON yang berisi informasi berikut.


****  

| Bidang JSON | Tipe data | Deskripsi | 
| --- | --- | --- | 
|  `type`  | string |  Jenis catatan JSON. Nilainya adalah `DatabaseActivityMonitoringRecords`.  | 
| version | string |  Versi catatan pemantauan aktivitas basis data. Basis data Oracle menggunakan versi 1.3 dan SQL Server menggunakan versi 1.4. Versi-versi mesin ini memperkenalkan objek JSON engineNativeAuditFields.  | 
|  [databaseActivityEvents](#DBActivityStreams.AuditLog.databaseActivityEvents)  | string |  Objek JSON yang berisi peristiwa aktivitas.  | 
| kunci | string | Kunci enkripsi yang Anda gunakan untuk mendekripsi [databaseActivityEventDaftar array JSON](DBActivityStreams.AuditLog.databaseActivityEventList.md)  | 

## databaseActivityEvents Objek JSON
<a name="DBActivityStreams.AuditLog.databaseActivityEvents"></a>

Objek JSON `databaseActivityEvents` berisi informasi berikut.

### Bidang-bidang tingkat atas dalam catatan JSON
<a name="DBActivityStreams.AuditLog.topLevel"></a>

 Setiap peristiwa dalam log audit dibungkus dalam sebuah catatan dalam format JSON. Catatan ini berisi bidang-bidang berikut. 

**tipe**  
 Bidang ini selalu memiliki nilai `DatabaseActivityMonitoringRecords`. 

**versi**  
 Bidang ini mewakili versi protokol atau kontrak data aliran aktivitas basis data. Versi menentukan bidang-bidang yang tersedia.

**databaseActivityEvents**  
 String terenkripsi yang mewakili satu atau beberapa peristiwa aktivitas. String disajikan berupa array byte base64. Saat Anda mendekripsi string, hasilnya adalah catatan dalam format JSON dengan bidang-bidang seperti ditunjukkan dalam contoh di bagian ini.

**kunci**  
 Kunci data terenkripsi yang digunakan untuk mengenkripsi string `databaseActivityEvents`. Ini sama dengan AWS KMS key yang Anda berikan saat memulai aliran aktivitas database.

 Contoh berikut menunjukkan format catatan ini.

```
{
  "type":"DatabaseActivityMonitoringRecords",
  "version":"1.3",
  "databaseActivityEvents":"encrypted audit records",
  "key":"encrypted key"
}
```

```
           "type":"DatabaseActivityMonitoringRecords",
           "version":"1.4",
           "databaseActivityEvents":"encrypted audit records",
           "key":"encrypted key"
```

Lakukan langkah-langkah berikut untuk mendekripsi konten bidang `databaseActivityEvents`:

1.  Lakukan dekripsi nilai dalam bidang JSON `key` dengan menggunakan kunci KMS yang Anda sediakan ketika memulai aliran aktivitas basis data. Melakukan hal itu akan menghasilkan kunci enkripsi data berupa teks jelas. 

1.  Base64 mendekode nilai dalam bidang JSON `databaseActivityEvents` untuk mendapatkan teks sandi, dalam format biner, dari Panduan Referensi audit. 

1.  Lakukan dekripsi teks sandi biner dengan kunci enkripsi data yang Anda dekode pada langkah pertama. 

1.  Lakukan dekompresi Panduan Referensi yang terdekripsi. 
   +  Muatan terenkripsi ada di bidang `databaseActivityEvents`. 
   +  Bidang `databaseActivityEventList` berisi array catatan audit. Bidang `type` dalam array dapat berupa `record` atau `heartbeat`. 

Catatan peristiwa aktivitas log audit adalah objek JSON yang berisi informasi berikut.


****  

| Bidang JSON | Tipe data | Deskripsi | 
| --- | --- | --- | 
|  `type`  | string |  Jenis catatan JSON. Nilainya adalah `DatabaseActivityMonitoringRecord`.  | 
| instanceId | string | Pengidentifikasi sumber daya instans basis data. Pengidentifikasi ini berkaitan dengan atribut instans basis data DbiResourceId. | 
|  [databaseActivityEventDaftar array JSON](DBActivityStreams.AuditLog.databaseActivityEventList.md)   | string |  Array catatan audit aktivitas atau pesan heartbeat.  | 

# databaseActivityEventDaftar array JSON untuk aliran aktivitas database
<a name="DBActivityStreams.AuditLog.databaseActivityEventList"></a>

Muatan log audit adalah array JSON `databaseActivityEventList` terenkripsi. tabel berikut memerinci secara alfabetis bidang-bidang untuk setiap peristiwa aktivitas dalam array `DatabaseActivityEventList` terdekripsi sebuah log audit. 

Ketika pengauditan terpadu diaktifkan di Oracle Database, catatan audit diisi dalam jejak audit baru ini. Tampilan `UNIFIED_AUDIT_TRAIL` memperlihatkan catatan audit dalam bentuk tabel dengan mengambil catatan audit dari jejak audit. Ketika Anda memulai aliran aktivitas basis data, kolom di `UNIFIED_AUDIT_TRAIL` memeta ke sebuah bidang di dalam array `databaseActivityEventList`.

**penting**  
Struktur peristiwa dapat berubah sewaktu-waktu. Amazon RDS mungkin menambahkan bidang-bidang baru ke peristiwa aktivitas di masa mendatang. Dalam aplikasi yang menguraikan data JSON, pastikan bahwa kode Anda dapat mengabaikan atau mengambil tindakan yang tepat untuk nama-nama bidang yang tidak dikenal. 

## databaseActivityEventDaftar bidang untuk Amazon RDS for Oracle
<a name="DBActivityStreams.AuditLog.databaseActivityEventList.ro"></a>

Berikut ini adalah `databaseActivityEventList` bidang untuk Amazon RDS for Oracle.


| Field | Tipe data | Sumber | Deskripsi | 
| --- | --- | --- | --- | 
|  `class`  |  string  |  Kolom `AUDIT_TYPE` dalam `UNIFIED_AUDIT_TRAIL`  |  Kelas peristiwa aktivitas. Hal berkaitan dengan kolom `AUDIT_TYPE` dalam tampilan `UNIFIED_AUDIT_TRAIL`. Nilai valid untuk Amazon RDS for Oracle adalah sebagai berikut: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/AmazonRDS/latest/UserGuide/DBActivityStreams.AuditLog.databaseActivityEventList.html) Lihat informasi yang lebih lengkap di [UNIFIED\$1AUDIT\$1TRAIL](https://docs.oracle.com/en/database/oracle/oracle-database/19/refrn/UNIFIED_AUDIT_TRAIL.html#GUID-B7CE1C02-2FD4-47D6-80AA-CF74A60CDD1D) dalam dokumentasi Oracle.  | 
|  `clientApplication`  |  string  |  `CLIENT_PROGRAM_NAME` di `UNIFIED_AUDIT_TRAIL`  |  Aplikasi yang digunakan klien untuk menghubungi seperti dilaporkan oleh klien. Klien tidak wajib memberikan informasi ini, sehingga nilainya dapat null. Nilai sampel adalah `JDBC Thin Client`.  | 
|  `command`  |  string  |  Kolom `ACTION_NAME` dalam `UNIFIED_AUDIT_TRAIL`  |  Nama tindakan yang dieksekusi oleh pengguna. Untuk memahami tindakan lengkap, baca baik nama perintah maupun nilai `AUDIT_TYPE`. Nilai sampel adalah `ALTER DATABASE`.  | 
|  `commandText`  |  string  |  Kolom `SQL_TEXT` dalam `UNIFIED_AUDIT_TRAIL`  |  Pernyataan SQL yang terkait dengan peristiwa. Nilai sampel adalah `ALTER DATABASE BEGIN BACKUP`.  | 
|  `databaseName`  |  string  |  Kolom `NAME` dalam `V$DATABASE`  |  Nama basis data.  | 
|  `dbid`  |  nomor  |  Kolom `DBID` dalam `UNIFIED_AUDIT_TRAIL`  |  Pengidentifikasi numerik untuk basis data. Nilai sampel adalah `1559204751`.  | 
|  `dbProtocol`  |  string  |  N/A  |  Protokol basis data. Dalam beta ini, nilainya adalah `oracle`.  | 
|  `dbUserName`  |  string  |  Kolom `DBUSERNAME` dalam `UNIFIED_AUDIT_TRAIL`  |  Nama pengguna basis data yang tindakannya diaudit. Nilai sampel adalah `RDSADMIN`.  | 
|  `endTime`  |  string  |  N/A  |  Bidang ini tidak digunakan untuk RDS for Oracle dan selalu null.  | 
|  `engineNativeAuditFields`  |  objek  |  `UNIFIED_AUDIT_TRAIL`  |  Secara default, objek ini kosong. Ketika Anda memulai aliran aktivitas dengan opsi `--engine-native-audit-fields-included`, objek ini meliputi kolom-kolom berikut dan nilai-nilainya: <pre>ADDITIONAL_INFO<br />APPLICATION_CONTEXTS<br />AUDIT_OPTION<br />AUTHENTICATION_TYPE<br />CLIENT_IDENTIFIER<br />CURRENT_USER<br />DBLINK_INFO<br />DBPROXY_USERNAME<br />DIRECT_PATH_NUM_COLUMNS_LOADED<br />DP_BOOLEAN_PARAMETERS1<br />DP_TEXT_PARAMETERS1<br />DV_ACTION_CODE<br />DV_ACTION_NAME<br />DV_ACTION_OBJECT_NAME<br />DV_COMMENT<br />DV_EXTENDED_ACTION_CODE<br />DV_FACTOR_CONTEXT<br />DV_GRANTEE<br />DV_OBJECT_STATUS<br />DV_RETURN_CODE<br />DV_RULE_SET_NAME<br />ENTRY_ID<br />EXCLUDED_OBJECT<br />EXCLUDED_SCHEMA<br />EXCLUDED_USER<br />EXECUTION_ID<br />EXTERNAL_USERID<br />FGA_POLICY_NAME<br />GLOBAL_USERID<br />INSTANCE_ID<br />KSACL_SERVICE_NAME<br />KSACL_SOURCE_LOCATION<br />KSACL_USER_NAME<br />NEW_NAME<br />NEW_SCHEMA<br />OBJECT_EDITION<br />OBJECT_PRIVILEGES<br />OLS_GRANTEE<br />OLS_LABEL_COMPONENT_NAME<br />OLS_LABEL_COMPONENT_TYPE<br />OLS_MAX_READ_LABEL<br />OLS_MAX_WRITE_LABEL<br />OLS_MIN_WRITE_LABEL<br />OLS_NEW_VALUE<br />OLS_OLD_VALUE<br />OLS_PARENT_GROUP_NAME<br />OLS_POLICY_NAME<br />OLS_PRIVILEGES_GRANTED<br />OLS_PRIVILEGES_USED<br />OLS_PROGRAM_UNIT_NAME<br />OLS_STRING_LABEL<br />OS_USERNAME<br />PROTOCOL_ACTION_NAME<br />PROTOCOL_MESSAGE<br />PROTOCOL_RETURN_CODE<br />PROTOCOL_SESSION_ID<br />PROTOCOL_USERHOST<br />PROXY_SESSIONID<br />RLS_INFO<br />RMAN_DEVICE_TYPE<br />RMAN_OBJECT_TYPE<br />RMAN_OPERATION<br />RMAN_SESSION_RECID<br />RMAN_SESSION_STAMP<br />ROLE<br />SCN<br />SYSTEM_PRIVILEGE<br />SYSTEM_PRIVILEGE_USED<br />TARGET_USER<br />TERMINAL<br />UNIFIED_AUDIT_POLICIES<br />USERHOST<br />XS_CALLBACK_EVENT_TYPE<br />XS_COOKIE<br />XS_DATASEC_POLICY_NAME<br />XS_ENABLED_ROLE<br />XS_ENTITY_TYPE<br />XS_INACTIVITY_TIMEOUT<br />XS_NS_ATTRIBUTE<br />XS_NS_ATTRIBUTE_NEW_VAL<br />XS_NS_ATTRIBUTE_OLD_VAL<br />XS_NS_NAME<br />XS_PACKAGE_NAME<br />XS_PROCEDURE_NAME<br />XS_PROXY_USER_NAME<br />XS_SCHEMA_NAME<br />XS_SESSIONID<br />XS_TARGET_PRINCIPAL_NAME<br />XS_USER_NAME</pre> Lihat informasi yang lebih lengkap di [UNIFIED\$1AUDIT\$1TRAIL](https://docs.oracle.com/database/121/REFRN/GUID-B7CE1C02-2FD4-47D6-80AA-CF74A60CDD1D.htm#REFRN29162) dalam dokumentasi Oracle Database.  | 
|  `errorMessage`  |  string  |  N/A  |  Bidang ini tidak digunakan untuk RDS for Oracle dan selalu null.  | 
|  `exitCode`  |  nomor  |  Kolom `RETURN_CODE` dalam `UNIFIED_AUDIT_TRAIL`  |  Kode kesalahan Oracle Database yang dihasilkan oleh tindakan. Jika tindakan berhasil, nilainya adalah `0`.  | 
|  `logTime`  |  string  |  Kolom `EVENT_TIMESTAMP_UTC` dalam `UNIFIED_AUDIT_TRAIL`  |  Stempel waktu pembuatan entri jejak audit. Nilai sampel adalah `2020-11-27 06:56:14.981404`.  | 
|  `netProtocol`  |  string  |  Kolom `AUTHENTICATION_TYPE` dalam `UNIFIED_AUDIT_TRAIL`  |  Protokol komunikasi jaringan. Nilai sampel adalah `TCP`.  | 
|  `objectName`  |  string  |  Kolom `OBJECT_NAME` dalam `UNIFIED_AUDIT_TRAIL`  |  Nama objek yang terpengaruh oleh tindakan. Nilai sampel adalah `employees`.  | 
|  `objectType`  |  string  |  Kolom `OBJECT_SCHEMA` dalam `UNIFIED_AUDIT_TRAIL`  |  Nama skema dari objek yang terpengaruh oleh tindakan. Nilai sampel adalah `hr`.  | 
|  `paramList`  |  daftar  |  Kolom `SQL_BINDS` dalam `UNIFIED_AUDIT_TRAIL`  |  Daftar variabel pengikat, jika ada, yang terkait dengan `SQL_TEXT`. Nilai sampel adalah `parameter_1,parameter_2`.  | 
|  `pid`  |  nomor  |  Kolom `OS_PROCESS` dalam `UNIFIED_AUDIT_TRAIL`  |  Pengidentifikasi proses sistem operasi dari proses basis data Oracle. Nilai sampel adalah `22396`.  | 
|  `remoteHost`  |  string  |  Kolom `AUTHENTICATION_TYPE` dalam `UNIFIED_AUDIT_TRAIL`  |  Alamat IP klien atau nama host tempat sesi dibangkitkan. Nilai sampel adalah `123.456.789.123`.  | 
|  `remotePort`  |  string  |  Kolom `AUTHENTICATION_TYPE` dalam `UNIFIED_AUDIT_TRAIL`  |  Nomor port klien. Nilai yang lazim di lingkungan Oracle Database adalah `1521`.  | 
|  `rowCount`  |  nomor  |  N/A  |  Bidang ini tidak digunakan untuk RDS for Oracle dan selalu null.  | 
|  `serverHost`  |  string  |  Host basis data  |  Alamat IP host server basis data. Nilai sampel adalah `123.456.789.123`.  | 
|  `serverType`  |  string  |  N/A  |  Jenis server basis data. Nilainya selalu `ORACLE`.  | 
|  `serverVersion`  |  string  |  Host basis data  |  Versi Amazon RDS for Oracle, Pembaruan Rilis (RU), dan Revisi Pembaruan Rilis (RUR). Nilai sampel adalah `19.0.0.0.ru-2020-01.rur-2020-01.r1.EE.3`.  | 
|  `serviceName`  |  string  |  Host basis data  |  Nama layanan. Nilai sampel adalah `oracle-ee`.   | 
|  `sessionId`  |  nomor  |  Kolom `SESSIONID` dalam `UNIFIED_AUDIT_TRAIL`  |  Pengidentifikasi sesi audit. Contohnya adalah `1894327130`.  | 
|  `startTime`  |  string  |  N/A  |  Bidang ini tidak digunakan untuk RDS for Oracle dan selalu null.  | 
|  `statementId`  |  nomor  |  Kolom `STATEMENT_ID` dalam `UNIFIED_AUDIT_TRAIL`  |  ID numerik untuk setiap eksekusi pernyataan. Sebuah pernyataan dapat menyebabkan banyak tindakan. Nilai sampel adalah `142197`.  | 
|  `substatementId`  |  N/A  |  N/A  |  Bidang ini tidak digunakan untuk RDS for Oracle dan selalu null.  | 
|  `transactionId`  |  string  |  Kolom `TRANSACTION_ID` dalam `UNIFIED_AUDIT_TRAIL`  |  Pengidentifikasi transaksi yang mengubah objek. Nilai sampel adalah `02000800D5030000`.  | 

## databaseActivityEventDaftar bidang untuk Amazon RDS for SQL Server
<a name="DBActivityStreams.AuditLog.databaseActivityEventList.rss"></a>

Berikut ini adalah `databaseActivityEventList` bidang untuk Amazon RDS for SQL Server.


| Field | Tipe data | Sumber | Deskripsi | 
| --- | --- | --- | --- | 
|  `class`  |  string  |  ` sys.fn_get_audit_file.class_type` dipetakan ke `sys.dm_audit_class_type_map.class_type_desc`  |  Kelas peristiwa aktivitas. Lihat informasi yang lebih lengkap di [SQL Server Audit (Database Engine)](https://learn.microsoft.com/en-us/sql/relational-databases/security/auditing/sql-server-audit-database-engine?view=sql-server-ver16) dalam dokumentasi Microsoft.  | 
|  `clientApplication`  |  string  |  `sys.fn_get_audit_file.application_name`  |  Aplikasi yang dihubung klien seperti dilaporkan oleh klien (SQL Server versi 14 dan lebih tinggi). Bidang ini null di SQL Server versi 13.  | 
|  `command`  |  string  |  `sys.fn_get_audit_file.action_id` dipetakan ke `sys.dm_audit_actions.name`  |  Kategori umum pernyataan SQL. Nilai untuk bidang ini bergantung pada nilai kelas.  | 
|  `commandText`  |  string  |  `sys.fn_get_audit_file.statement`  |  Bidang ini menunjukkan pernyataan SQL.  | 
|  `databaseName`  |  string  |  `sys.fn_get_audit_file.database_name`  |  Nama basis data.  | 
|  `dbProtocol`  |  string  |  N/A  |  Protokol basis data. Nilai ini adalah `SQLSERVER`.  | 
|  `dbUserName`  |  string  |  `sys.fn_get_audit_file.server_principal_name`  |  Pengguna basis data untuk autentikasi klien.  | 
|  `endTime`  |  string  |  N/A  |  Bidang ini tidak digunakan oleh Amazon RDS for SQL Server dan nilainya null.  | 
|  `engineNativeAuditFields`  |  objek  |  Setiap bidang `sys.fn_get_audit_file` yang tidak tercantum dalam kolom ini.  |  Secara default, objek ini kosong. Ketika Anda memulai aliran aktivitas dengan opsi `--engine-native-audit-fields-included`, objek ini menyertakan bidang-bidang audit mesin asli lainnya, yang tidak dihasilkan oleh peta JSON ini.  | 
|  `errorMessage`  |  string  |  N/A  |  Bidang ini tidak digunakan oleh Amazon RDS for SQL Server dan nilainya null.  | 
|  `exitCode`  |  integer  |  `sys.fn_get_audit_file.succeeded`  |  Menunjukkan apakah tindakan yang memulai peristiwa berhasil. Bidang ini tidak boleh bernilai null. Untuk semua peristiwa selain upaya masuk, bidang ini melaporkan apakah pemeriksaan izin berhasil atau gagal, tetapi tidak apakah operasi berhasil atau gagal. Nilai-nilai meliputi: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/AmazonRDS/latest/UserGuide/DBActivityStreams.AuditLog.databaseActivityEventList.html)  | 
|  `logTime`  |  string  |  `sys.fn_get_audit_file.event_time`  |  Stempel waktu peristiwa yang dicatat oleh SQL Server.  | 
|  `netProtocol`  |  string  |  N/A  |  Bidang ini tidak digunakan oleh Amazon RDS for SQL Server dan nilainya null.  | 
|  `objectName`  |  string  |  `sys.fn_get_audit_file.object_name`  |  Nama objek basis data jika pernyataan SQL beroperasi pada objek.  | 
|  `objectType`  |  string  |  `sys.fn_get_audit_file.class_type` dipetakan ke `sys.dm_audit_class_type_map.class_type_desc`  |  Jenis objek basis data jika pernyataan SQL beroperasi pada jenis objek.  | 
|  `paramList`  |  string  |  N/A  |  Bidang ini tidak digunakan oleh Amazon RDS for SQL Server dan nilainya null.  | 
|  `pid`  |  integer  |  N/A  |  Bidang ini tidak digunakan oleh Amazon RDS for SQL Server dan nilainya null.  | 
|  `remoteHost`  |  string  |  `sys.fn_get_audit_file.client_ip`  |  Alamat IP atau nama host klien yang menerbitkan pernyataan SQL (SQL Server versi 14 dan lebih tinggi). Bidang ini null di SQL Server versi 13.  | 
|  `remotePort`  |  integer  |  N/A  |  Bidang ini tidak digunakan oleh Amazon RDS for SQL Server dan nilainya null.  | 
|  `rowCount`  |  integer  |  `sys.fn_get_audit_file.affected_rows`  |  Jumlah baris tabel yang terpengaruh oleh pernyataan SQL (SQL Server versi 14 dan lebih tinggi). Bidang ini ada di SQL Server versi 13.  | 
|  `serverHost`  |  string  |  Host Basis Data  |  Alamat IP server basis data host.  | 
|  `serverType`  |  string  |  N/A  |  Jenis server basis data. Nilainya adalah `SQLSERVER`.  | 
|  `serverVersion`  |  string  |  Host Basis Data  |  Versi server basis data, misalnya, 15.00.4073.23.v1.r1 untuk SQL Server 2017.  | 
|  `serviceName`  |  string  |  Host Basis Data  |  Nama layanan. Contoh nilai adalah `sqlserver-ee`.  | 
|  `sessionId`  |  integer  |  `sys.fn_get_audit_file.session_id`  |  Pengidentifikasi unik sesi.  | 
|  `startTime`  |  string  |  N/A  |  Bidang ini tidak digunakan oleh Amazon RDS for SQL Server dan nilainya null.  | 
|  `statementId`  |  string  |  `sys.fn_get_audit_file.sequence_group_id`  |  Pengidentifikasi unik untuk pernyataan SQL klien. Pengidentifikasi berbeda untuk setiap peristiwa yang dihasilkan. Nilai sampel adalah `0x38eaf4156267184094bb82071aaab644`.  | 
|  `substatementId`  |  integer  |  `sys.fn_get_audit_file.sequence_number`  |  Pengidentifikasi untuk menentukan nomor urut untuk pernyataan. Pengidentifikasi ini membantu ketika catatan yang besar dibagi menjadi beberapa catatan.  | 
|  `transactionId`  |  integer  |  `sys.fn_get_audit_file.transaction_id`  |  Pengidentifikasi transaksi. Jika tidak ada transaksi aktif, nilainya nol.  | 
|  `type`  |  string  |  Aliran aktivitas basis data yang dihasilkan  |  Jenis peristiwa. Nilai-nilainya adalah `record` atau `heartbeat`.  | 

# Memproses aliran aktivitas database menggunakan AWS SDK
<a name="DBActivityStreams.CodeExample"></a>

Anda dapat memproses aliran aktivitas secara terprogram dengan menggunakan file. AWS SDK Berikut adalah contoh Java dan Python yang berfungsi penuh tentang penggunaan catatan Aliran Aktivitas Basis Data untuk pengaktifan berbasis instans.

------
#### [ Java ]

```
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.net.InetAddress;
import java.nio.ByteBuffer;
import java.nio.charset.StandardCharsets;
import java.security.NoSuchAlgorithmException;
import java.security.NoSuchProviderException;
import java.security.Security;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import java.util.zip.GZIPInputStream;

import javax.crypto.Cipher;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.spec.SecretKeySpec;

import com.amazonaws.auth.AWSStaticCredentialsProvider;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.encryptionsdk.AwsCrypto;
import com.amazonaws.encryptionsdk.CryptoInputStream;
import com.amazonaws.encryptionsdk.jce.JceMasterKey;
import com.amazonaws.services.kinesis.clientlibrary.exceptions.InvalidStateException;
import com.amazonaws.services.kinesis.clientlibrary.exceptions.ShutdownException;
import com.amazonaws.services.kinesis.clientlibrary.exceptions.ThrottlingException;
import com.amazonaws.services.kinesis.clientlibrary.interfaces.IRecordProcessor;
import com.amazonaws.services.kinesis.clientlibrary.interfaces.IRecordProcessorCheckpointer;
import com.amazonaws.services.kinesis.clientlibrary.interfaces.IRecordProcessorFactory;
import com.amazonaws.services.kinesis.clientlibrary.lib.worker.InitialPositionInStream;
import com.amazonaws.services.kinesis.clientlibrary.lib.worker.KinesisClientLibConfiguration;
import com.amazonaws.services.kinesis.clientlibrary.lib.worker.ShutdownReason;
import com.amazonaws.services.kinesis.clientlibrary.lib.worker.Worker;
import com.amazonaws.services.kinesis.clientlibrary.lib.worker.Worker.Builder;
import com.amazonaws.services.kinesis.model.Record;
import com.amazonaws.services.kms.AWSKMS;
import com.amazonaws.services.kms.AWSKMSClientBuilder;
import com.amazonaws.services.kms.model.DecryptRequest;
import com.amazonaws.services.kms.model.DecryptResult;
import com.amazonaws.util.Base64;
import com.amazonaws.util.IOUtils;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.annotations.SerializedName;
import org.bouncycastle.jce.provider.BouncyCastleProvider;

public class DemoConsumer {

    private static final String STREAM_NAME = "aws-rds-das-[instance-external-resource-id]"; // aws-rds-das-db-ABCD123456
    private static final String APPLICATION_NAME = "AnyApplication"; //unique application name for dynamo table generation that holds kinesis shard tracking
    private static final String AWS_ACCESS_KEY = "[AWS_ACCESS_KEY_TO_ACCESS_KINESIS]";
    private static final String AWS_SECRET_KEY = "[AWS_SECRET_KEY_TO_ACCESS_KINESIS]";
    private static final String RESOURCE_ID = "[external-resource-id]"; // db-ABCD123456
    private static final String REGION_NAME = "[region-name]"; //us-east-1, us-east-2...
    private static final BasicAWSCredentials CREDENTIALS = new BasicAWSCredentials(AWS_ACCESS_KEY, AWS_SECRET_KEY);
    private static final AWSStaticCredentialsProvider CREDENTIALS_PROVIDER = new AWSStaticCredentialsProvider(CREDENTIALS);

    private static final AwsCrypto CRYPTO = new AwsCrypto();
    private static final AWSKMS KMS = AWSKMSClientBuilder.standard()
            .withRegion(REGION_NAME)
            .withCredentials(CREDENTIALS_PROVIDER).build();

    class Activity {
        String type;
        String version;
        String databaseActivityEvents;
        String key;
    }

    class ActivityEvent {
        @SerializedName("class") String _class;
        String clientApplication;
        String command;
        String commandText;
        String databaseName;
        String dbProtocol;
        String dbUserName;
        String endTime;
        String errorMessage;
        String exitCode;
        String logTime;
        String netProtocol;
        String objectName;
        String objectType;
        List<String> paramList;
        String pid;
        String remoteHost;
        String remotePort;
        String rowCount;
        String serverHost;
        String serverType;
        String serverVersion;
        String serviceName;
        String sessionId;
        String startTime;
        String statementId;
        String substatementId;
        String transactionId;
        String type;
    }

    class ActivityRecords {
        String type;
        String clusterId; // note that clusterId will contain an empty string on RDS Oracle and RDS SQL Server
        String instanceId;
        List<ActivityEvent> databaseActivityEventList;
    }

    static class RecordProcessorFactory implements IRecordProcessorFactory {
        @Override
        public IRecordProcessor createProcessor() {
            return new RecordProcessor();
        }
    }

    static class RecordProcessor implements IRecordProcessor {

        private static final long BACKOFF_TIME_IN_MILLIS = 3000L;
        private static final int PROCESSING_RETRIES_MAX = 10;
        private static final long CHECKPOINT_INTERVAL_MILLIS = 60000L;
        private static final Gson GSON = new GsonBuilder().serializeNulls().create();

        private static final Cipher CIPHER;
        static {
            Security.insertProviderAt(new BouncyCastleProvider(), 1);
            try {
                CIPHER = Cipher.getInstance("AES/GCM/NoPadding", "BC");
            } catch (NoSuchAlgorithmException | NoSuchPaddingException | NoSuchProviderException e) {
                throw new ExceptionInInitializerError(e);
            }
        }

        private long nextCheckpointTimeInMillis;

        @Override
        public void initialize(String shardId) {
        }

        @Override
        public void processRecords(final List<Record> records, final IRecordProcessorCheckpointer checkpointer) {
            for (final Record record : records) {
                processSingleBlob(record.getData());
            }

            if (System.currentTimeMillis() > nextCheckpointTimeInMillis) {
                checkpoint(checkpointer);
                nextCheckpointTimeInMillis = System.currentTimeMillis() + CHECKPOINT_INTERVAL_MILLIS;
            }
        }

        @Override
        public void shutdown(IRecordProcessorCheckpointer checkpointer, ShutdownReason reason) {
            if (reason == ShutdownReason.TERMINATE) {
                checkpoint(checkpointer);
            }
        }

        private void processSingleBlob(final ByteBuffer bytes) {
            try {
                // JSON $Activity
                final Activity activity = GSON.fromJson(new String(bytes.array(), StandardCharsets.UTF_8), Activity.class);

                // Base64.Decode
                final byte[] decoded = Base64.decode(activity.databaseActivityEvents);
                final byte[] decodedDataKey = Base64.decode(activity.key);

                Map<String, String> context = new HashMap<>();
                context.put("aws:rds:db-id", RESOURCE_ID);

                // Decrypt
                final DecryptRequest decryptRequest = new DecryptRequest()
                        .withCiphertextBlob(ByteBuffer.wrap(decodedDataKey)).withEncryptionContext(context);
                final DecryptResult decryptResult = KMS.decrypt(decryptRequest);
                final byte[] decrypted = decrypt(decoded, getByteArray(decryptResult.getPlaintext()));

                // GZip Decompress
                final byte[] decompressed = decompress(decrypted);
                // JSON $ActivityRecords
                final ActivityRecords activityRecords = GSON.fromJson(new String(decompressed, StandardCharsets.UTF_8), ActivityRecords.class);

                // Iterate throught $ActivityEvents
                for (final ActivityEvent event : activityRecords.databaseActivityEventList) {
                    System.out.println(GSON.toJson(event));
                }
            } catch (Exception e) {
                // Handle error.
                e.printStackTrace();
            }
        }

        private static byte[] decompress(final byte[] src) throws IOException {
            ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(src);
            GZIPInputStream gzipInputStream = new GZIPInputStream(byteArrayInputStream);
            return IOUtils.toByteArray(gzipInputStream);
        }

        private void checkpoint(IRecordProcessorCheckpointer checkpointer) {
            for (int i = 0; i < PROCESSING_RETRIES_MAX; i++) {
                try {
                    checkpointer.checkpoint();
                    break;
                } catch (ShutdownException se) {
                    // Ignore checkpoint if the processor instance has been shutdown (fail over).
                    System.out.println("Caught shutdown exception, skipping checkpoint." + se);
                    break;
                } catch (ThrottlingException e) {
                    // Backoff and re-attempt checkpoint upon transient failures
                    if (i >= (PROCESSING_RETRIES_MAX - 1)) {
                        System.out.println("Checkpoint failed after " + (i + 1) + "attempts." + e);
                        break;
                    } else {
                        System.out.println("Transient issue when checkpointing - attempt " + (i + 1) + " of " + PROCESSING_RETRIES_MAX + e);
                    }
                } catch (InvalidStateException e) {
                    // This indicates an issue with the DynamoDB table (check for table, provisioned IOPS).
                    System.out.println("Cannot save checkpoint to the DynamoDB table used by the Amazon Kinesis Client Library." + e);
                    break;
                }
                try {
                    Thread.sleep(BACKOFF_TIME_IN_MILLIS);
                } catch (InterruptedException e) {
                    System.out.println("Interrupted sleep" + e);
                }
            }
        }
    }

    private static byte[] decrypt(final byte[] decoded, final byte[] decodedDataKey) throws IOException {
        // Create a JCE master key provider using the random key and an AES-GCM encryption algorithm
        final JceMasterKey masterKey = JceMasterKey.getInstance(new SecretKeySpec(decodedDataKey, "AES"),
                "BC", "DataKey", "AES/GCM/NoPadding");
        try (final CryptoInputStream<JceMasterKey> decryptingStream = CRYPTO.createDecryptingStream(masterKey, new ByteArrayInputStream(decoded));
             final ByteArrayOutputStream out = new ByteArrayOutputStream()) {
            IOUtils.copy(decryptingStream, out);
            return out.toByteArray();
        }
    }

    public static void main(String[] args) throws Exception {
        final String workerId = InetAddress.getLocalHost().getCanonicalHostName() + ":" + UUID.randomUUID();
        final KinesisClientLibConfiguration kinesisClientLibConfiguration =
                new KinesisClientLibConfiguration(APPLICATION_NAME, STREAM_NAME, CREDENTIALS_PROVIDER, workerId);
        kinesisClientLibConfiguration.withInitialPositionInStream(InitialPositionInStream.LATEST);
        kinesisClientLibConfiguration.withRegionName(REGION_NAME);
        final Worker worker = new Builder()
                .recordProcessorFactory(new RecordProcessorFactory())
                .config(kinesisClientLibConfiguration)
                .build();

        System.out.printf("Running %s to process stream %s as worker %s...\n", APPLICATION_NAME, STREAM_NAME, workerId);

        try {
            worker.run();
        } catch (Throwable t) {
            System.err.println("Caught throwable while processing data.");
            t.printStackTrace();
            System.exit(1);
        }
        System.exit(0);
    }

    private static byte[] getByteArray(final ByteBuffer b) {
        byte[] byteArray = new byte[b.remaining()];
        b.get(byteArray);
        return byteArray;
    }
}
```

------
#### [ Python ]

```
import base64
import json
import zlib
import aws_encryption_sdk
from aws_encryption_sdk import CommitmentPolicy
from aws_encryption_sdk.internal.crypto import WrappingKey
from aws_encryption_sdk.key_providers.raw import RawMasterKeyProvider
from aws_encryption_sdk.identifiers import WrappingAlgorithm, EncryptionKeyType
import boto3

REGION_NAME = '<region>'                    # us-east-1
RESOURCE_ID = '<external-resource-id>'      # db-ABCD123456
STREAM_NAME = 'aws-rds-das-' + RESOURCE_ID  # aws-rds-das-db-ABCD123456

enc_client = aws_encryption_sdk.EncryptionSDKClient(commitment_policy=CommitmentPolicy.FORBID_ENCRYPT_ALLOW_DECRYPT)

class MyRawMasterKeyProvider(RawMasterKeyProvider):
    provider_id = "BC"

    def __new__(cls, *args, **kwargs):
        obj = super(RawMasterKeyProvider, cls).__new__(cls)
        return obj

    def __init__(self, plain_key):
        RawMasterKeyProvider.__init__(self)
        self.wrapping_key = WrappingKey(wrapping_algorithm=WrappingAlgorithm.AES_256_GCM_IV12_TAG16_NO_PADDING,
                                        wrapping_key=plain_key, wrapping_key_type=EncryptionKeyType.SYMMETRIC)

    def _get_raw_key(self, key_id):
        return self.wrapping_key


def decrypt_payload(payload, data_key):
    my_key_provider = MyRawMasterKeyProvider(data_key)
    my_key_provider.add_master_key("DataKey")
    decrypted_plaintext, header = enc_client.decrypt(
        source=payload,
        materials_manager=aws_encryption_sdk.materials_managers.default.DefaultCryptoMaterialsManager(master_key_provider=my_key_provider))
    return decrypted_plaintext


def decrypt_decompress(payload, key):
    decrypted = decrypt_payload(payload, key)
    return zlib.decompress(decrypted, zlib.MAX_WBITS + 16)


def main():
    session = boto3.session.Session()
    kms = session.client('kms', region_name=REGION_NAME)
    kinesis = session.client('kinesis', region_name=REGION_NAME)

    response = kinesis.describe_stream(StreamName=STREAM_NAME)
    shard_iters = []
    for shard in response['StreamDescription']['Shards']:
        shard_iter_response = kinesis.get_shard_iterator(StreamName=STREAM_NAME, ShardId=shard['ShardId'],
                                                         ShardIteratorType='LATEST')
        shard_iters.append(shard_iter_response['ShardIterator'])

    while len(shard_iters) > 0:
        next_shard_iters = []
        for shard_iter in shard_iters:
            response = kinesis.get_records(ShardIterator=shard_iter, Limit=10000)
            for record in response['Records']:
                record_data = record['Data']
                record_data = json.loads(record_data)
                payload_decoded = base64.b64decode(record_data['databaseActivityEvents'])
                data_key_decoded = base64.b64decode(record_data['key'])
                data_key_decrypt_result = kms.decrypt(CiphertextBlob=data_key_decoded,
                                                      EncryptionContext={'aws:rds:db-id': RESOURCE_ID})
                print (decrypt_decompress(payload_decoded, data_key_decrypt_result['Plaintext']))
            if 'NextShardIterator' in response:
                next_shard_iters.append(response['NextShardIterator'])
        shard_iters = next_shard_iters


if __name__ == '__main__':
    main()
```

------

# Contoh kebijakan IAM untuk aliran aktivitas database
<a name="DBActivityStreams.ManagingAccess"></a>

Setiap pengguna dengan hak istimewa peran AWS Identity and Access Management (IAM) yang sesuai untuk aliran aktivitas database dapat membuat, memulai, menghentikan, dan memodifikasi setelan aliran aktivitas untuk instans . Semua tindakan ini dimasukkan ke dalam log audit aliran. Untuk praktik kepatuhan terbaik, kami menyarankan agar Anda tidak memberikan hak istimewa ini. DBAs

Anda mengatur akses ke aliran aktivitas basis data dengan menggunakan kebijakan IAM. Lihat informasi yang lebih lengkap tentang autentikasi Amazon RDS di [Manajemen identitas dan akses untuk Amazon RDS](UsingWithRDS.IAM.md). Lihat informasi yang lebih lengkap tentang pembuatan kebijakan IAM di [Membuat dan menggunakan kebijakan IAM untuk akses basis data IAM](UsingWithRDS.IAMDBAuth.IAMPolicy.md). 

**Example Kebijakan untuk memungkinkan pengonfigurasian aliran aktivitas basis data**  
Untuk memberi pengguna akses terperinci untuk mengubah aliran aktivitas, gunakan kunci-kunci konteks operasi khusus layanan `rds:StartActivityStream` dan `rds:StopActivityStream` dalam kebijakan IAM. Contoh kebijakan IAM berikut memungkinkan pengguna atau peran mengonfigurasikan aliran aktivitas.    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "ConfigureActivityStreams",
            "Effect": "Allow",
            "Action": [
                "rds:StartActivityStream",
                "rds:StopActivityStream"
            ],
            "Resource": "*"
        }
    ]
}
```

**Example Kebijakan untuk memungkinkan pemulaian aliran aktivitas basis data**  
Contoh kebijakan IAM berikut memungkinkan pengguna atau peran memulai aliran aktivitas.    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement":[
        {
            "Sid":"AllowStartActivityStreams",
            "Effect":"Allow",
            "Action":"rds:StartActivityStream",
            "Resource":"*"
        }
    ]
}
```

**Example Kebijakan untuk memungkinkan penghentian aliran aktivitas basis data**  
Contoh kebijakan IAM berikut memungkinkan pengguna atau peran menghentikan aliran aktivitas.    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement":[
        {
            "Sid":"AllowStopActivityStreams",
            "Effect":"Allow",
            "Action":"rds:StopActivityStream",
            "Resource":"*"
        }
     ]
}
```

**Example Kebijakan untuk menolak pemulaian aliran aktivitas basis data**  
Contoh kebijakan IAM berikut mencegah pengguna atau peran dari memulai aliran aktivitas.    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement":[
        {
            "Sid":"DenyStartActivityStreams",
            "Effect":"Deny",
            "Action":"rds:StartActivityStream",
            "Resource":"*"
        }
     ]
}
```

**Example Kebijakan untuk menolak penghentian aliran aktivitas basis data**  
Contoh kebijakan IAM berikut mencegah pengguna atau peran dari menghentikan aliran aktivitas.    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement":[
        {
            "Sid":"DenyStopActivityStreams",
            "Effect":"Deny",
            "Action":"rds:StopActivityStream",
            "Resource":"*"
        }
    ]
}
```