

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

# Filter berlangganan tingkat akun
<a name="SubscriptionFilters-AccountLevel"></a>

**penting**  
Ada risiko menyebabkan loop rekursif tak terbatas dengan filter berlangganan yang dapat menyebabkan peningkatan besar dalam penagihan konsumsi jika tidak ditangani. Untuk mengurangi risiko ini, kami menyarankan Anda menggunakan kriteria pemilihan dalam filter langganan tingkat akun Anda untuk mengecualikan grup log yang mengambil data log dari sumber daya yang merupakan bagian dari alur kerja pengiriman langganan. Untuk informasi selengkapnya tentang masalah ini dan menentukan grup log mana yang akan dikecualikan, lihat[Pencegahan rekursi log](Subscriptions-recursion-prevention.md).

 Anda dapat menetapkan kebijakan berlangganan tingkat akun yang menyertakan subset grup log di akun. Kebijakan berlangganan akun dapat berfungsi dengan Amazon Kinesis Data AWS Lambda Streams, atau Amazon Data Firehose. Log yang dikirim ke layanan melalui kebijakan berlangganan tingkat akun dikodekan base64 dan dikompresi dengan format gzip. Bagian ini memberikan contoh yang dapat Anda ikuti untuk membuat langganan tingkat akun untuk Amazon Kinesis Data Streams, Lambda, dan Firehose. 

**catatan**  
Untuk melihat daftar semua kebijakan filter langganan di akun Anda, gunakan `describe-account-policies` perintah dengan nilai `SUBSCRIPTION_FILTER_POLICY` `--policy-type` parameter. Untuk informasi lebih lanjut, lihat [ describe-account-policies¶](https://docs.aws.amazon.com/cli/latest/reference/logs/describe-account-policies.html).

**Topics**
+ [Contoh 1: Filter langganan dengan Amazon Kinesis Data Streams](#DestinationKinesisExample-AccountLevel)
+ [Contoh 2: Filter berlangganan dengan AWS Lambda](#LambdaFunctionExample-AccountLevel)
+ [Contoh 3: Filter berlangganan dengan Amazon Data Firehose](#FirehoseExample-AccountLevel)

## Contoh 1: Filter langganan dengan Amazon Kinesis Data Streams
<a name="DestinationKinesisExample-AccountLevel"></a>

Sebelum Anda membuat aliran data Amazon Kinesis Data Streams untuk digunakan dengan kebijakan berlangganan tingkat akun, hitung volume data log yang akan dihasilkan. Pastikan untuk membuat aliran dengan pecahan yang cukup untuk menangani volume ini. Jika aliran tidak memiliki cukup pecahan, itu dibatasi. Untuk informasi selengkapnya tentang batas volume streaming, lihat [Kuota dan Batas](https://docs.aws.amazon.com/streams/latest/dev/service-sizes-and-limits.html) dalam dokumentasi Amazon Kinesis Data Streams.

**Awas**  
Karena peristiwa log dari beberapa grup log diteruskan ke tujuan, ada risiko pembatasan. Kiriman yang dibatasi dicoba ulang hingga 24 jam. Setelah 24 jam, kiriman yang gagal dijatuhkan.   
Untuk mengurangi risiko pelambatan, Anda dapat mengambil langkah-langkah berikut:  
Pantau aliran Amazon Kinesis Data Streams CloudWatch Anda dengan metrik. Ini membantu Anda mengidentifikasi pelambatan dan menyesuaikan konfigurasi Anda sesuai dengan itu. Misalnya, `DeliveryThrottling` metrik melacak jumlah peristiwa log yang CloudWatch Log dibatasi saat meneruskan data ke tujuan langganan. Untuk informasi selengkapnya, lihat [Pemantauan dengan CloudWatch metrik](CloudWatch-Logs-Monitoring-CloudWatch-Metrics.md).
Gunakan mode kapasitas sesuai permintaan untuk streaming Anda di Amazon Kinesis Data Streams. Mode sesuai permintaan langsung mengakomodasi beban kerja Anda saat naik atau turun. Untuk informasi selengkapnya, lihat [Mode sesuai permintaan](https://docs.aws.amazon.com/streams/latest/dev/how-do-i-size-a-stream.html#ondemandmode).
Batasi pola filter langganan CloudWatch Log agar sesuai dengan kapasitas streaming Anda di Amazon Kinesis Data Streams. Jika Anda mengirim terlalu banyak data ke aliran, Anda mungkin perlu mengurangi ukuran filter atau menyesuaikan kriteria filter.

Contoh berikut menggunakan kebijakan berlangganan tingkat akun untuk meneruskan semua peristiwa log ke aliran di Amazon Kinesis Data Streams. Pola filter cocok dengan peristiwa log apa pun dengan teks `Test` dan meneruskannya ke aliran di Amazon Kinesis Data Streams.

**Membuat kebijakan berlangganan tingkat akun untuk Amazon Kinesis Data Streams**

1. Buat aliran tujuan menggunakan perintah berikut: 

   ```
   $ C:\>  aws kinesis create-stream —stream-name "TestStream" —shard-count 1
   ```

1. Tunggu beberapa menit hingga streaming menjadi aktif. **Anda dapat memverifikasi apakah aliran aktif dengan menggunakan perintah [describe-stream](https://docs.aws.amazon.com/cli/latest/reference/kinesis/describe-stream.html) untuk memeriksa. StreamDescription StreamStatus**properti. 

   ```
   aws kinesis describe-stream --stream-name "TestStream"
   ```

   Berikut ini adalah output contoh:

   ```
   {
       "StreamDescription": {
           "StreamStatus": "ACTIVE",
           "StreamName": "TestStream",
           "StreamARN": "arn:aws:kinesis:region:123456789012:stream/TestStream",
           "Shards": [
               {
                   "ShardId": "shardId-000000000000",
                   "HashKeyRange": {
                       "EndingHashKey": "EXAMPLE8463463374607431768211455",
                       "StartingHashKey": "0"
                   },
                   "SequenceNumberRange": {
                       "StartingSequenceNumber":
                       "EXAMPLE688818456679503831981458784591352702181572610"
                   }
               }
           ]
       }
   }
   ```

1. Buat peran IAM yang akan memberikan izin CloudWatch Log untuk memasukkan data ke aliran Anda. Pertama, Anda harus membuat kebijakan kepercayaan dalam file (misalnya, `~/TrustPolicyForCWL-Kinesis.json`). Gunakan editor teks untuk membuat kebijakan ini.

   Kebijakan ini mencakup kunci konteks kondisi `aws:SourceArn` global untuk membantu mencegah masalah keamanan wakil yang membingungkan. Untuk informasi selengkapnya, lihat [Pencegahan Deputi Bingung](Subscriptions-confused-deputy.md).

   ```
   {
     "Statement": {
       "Effect": "Allow",
       "Principal": { "Service": "logs.amazonaws.com" },
       "Action": "sts:AssumeRole",
       "Condition": { 
           "StringLike": { "aws:SourceArn": "arn:aws:logs:region:123456789012:*" } 
        }
      }
   }
   ```

1. Gunakan perintah **create-role** untuk membuat IAM role, dengan menentukan file kebijakan kepercayaan. Perhatikan nilai **Role.Arn** yang dihasilkan, karena Anda juga akan membutuhkannya untuk langkah selanjutnya:

   ```
   aws iam create-role --role-name CWLtoKinesisRole --assume-role-policy-document file://~/TrustPolicyForCWL-Kinesis.json
   ```

   Berikut adalah contoh output.

   ```
   {
       "Role": {
           "AssumeRolePolicyDocument": {
               "Statement": {
                   "Action": "sts:AssumeRole",
                   "Effect": "Allow",
                   "Principal": {
                       "Service": "logs.amazonaws.com"
                   },
                   "Condition": { 
                       "StringLike": { 
                           "aws:SourceArn": { "arn:aws:logs:region:123456789012:*" }
                       } 
                   }
               }
           },
           "RoleId": "EXAMPLE450GAB4HC5F431",
           "CreateDate": "2023-05-29T13:46:29.431Z",
           "RoleName": "CWLtoKinesisRole",
           "Path": "/",
           "Arn": "arn:aws:iam::123456789012:role/CWLtoKinesisRole"
       }
   }
   ```

1. Buat kebijakan izin untuk menentukan tindakan apa yang dapat dilakukan CloudWatch Log di akun Anda. Pertama, Anda akan membuat kebijakan izin dalam file (misalnya, `~/PermissionsForCWL-Kinesis.json`). Gunakan editor teks untuk membuat kebijakan ini. Jangan gunakan konsol IAM untuk membuatnya.

   ```
   {
     "Statement": [
       {
         "Effect": "Allow",
         "Action": "kinesis:PutRecord",
         "Resource": "arn:aws:kinesis:region:123456789012:stream/TestStream"
       }
     ]
   }
   ```

1. Kaitkan kebijakan izin dengan peran menggunakan [put-role-policy](https://docs.aws.amazon.com/cli/latest/reference/iam/put-role-policy.html)perintah berikut:

   ```
   aws iam put-role-policy  --role-name CWLtoKinesisRole  --policy-name Permissions-Policy-For-CWL  --policy-document file://~/PermissionsForCWL-Kinesis.json
   ```

1. Setelah aliran dalam status **Aktif** dan Anda telah membuat peran IAM, Anda dapat membuat kebijakan filter langganan CloudWatch Log. Kebijakan segera memulai aliran data log waktu nyata ke aliran Anda. Dalam contoh ini, semua peristiwa log yang berisi string dialirkan, kecuali yang `ERROR` ada di grup log bernama `LogGroupToExclude1` dan`LogGroupToExclude2`.

   ```
   aws logs put-account-policy \
       --policy-name "ExamplePolicy" \
       --policy-type "SUBSCRIPTION_FILTER_POLICY" \
       --policy-document '{"RoleArn":"arn:aws:iam::123456789012:role/CWLtoKinesisRole", "DestinationArn":"arn:aws:kinesis:region:123456789012:stream/TestStream", "FilterPattern": "Test", "Distribution": "Random"}' \
       --selection-criteria 'LogGroupName NOT IN ["LogGroupToExclude1", "LogGroupToExclude2"]' \
       --scope "ALL"
   ```

1. Setelah menyiapkan filter langganan, CloudWatch Log meneruskan semua peristiwa log masuk yang cocok dengan pola filter dan kriteria pemilihan ke aliran Anda. 

   `selection-criteria`Bidang ini opsional, tetapi penting untuk mengecualikan grup log yang dapat menyebabkan rekursi log tak terbatas dari filter langganan. Untuk informasi selengkapnya tentang masalah ini dan menentukan grup log mana yang akan dikecualikan, lihat[Pencegahan rekursi log](Subscriptions-recursion-prevention.md). Saat ini, NOT IN adalah satu-satunya operator yang didukung untuk`selection-criteria`.

   Anda dapat memverifikasi bahwa alur peristiwa log menggunakan iterator pecahan Amazon Kinesis Data Streams dan menggunakan perintah Amazon Kinesis Data Streams untuk mengambil beberapa rekaman Amazon `get-records` Kinesis Data Streams:

   ```
   aws kinesis get-shard-iterator --stream-name TestStream --shard-id shardId-000000000000 --shard-iterator-type TRIM_HORIZON
   ```

   ```
   {
       "ShardIterator":
       "AAAAAAAAAAFGU/kLvNggvndHq2UIFOw5PZc6F01s3e3afsSscRM70JSbjIefg2ub07nk1y6CDxYR1UoGHJNP4m4NFUetzfL+wev+e2P4djJg4L9wmXKvQYoE+rMUiFq+p4Cn3IgvqOb5dRA0yybNdRcdzvnC35KQANoHzzahKdRGb9v4scv+3vaq+f+OIK8zM5My8ID+g6rMo7UKWeI4+IWiK2OSh0uP"
   }
   ```

   ```
   aws kinesis get-records --limit 10 --shard-iterator "AAAAAAAAAAFGU/kLvNggvndHq2UIFOw5PZc6F01s3e3afsSscRM70JSbjIefg2ub07nk1y6CDxYR1UoGHJNP4m4NFUetzfL+wev+e2P4djJg4L9wmXKvQYoE+rMUiFq+p4Cn3IgvqOb5dRA0yybNdRcdzvnC35KQANoHzzahKdRGb9v4scv+3vaq+f+OIK8zM5My8ID+g6rMo7UKWeI4+IWiK2OSh0uP"
   ```

   Anda mungkin perlu menggunakan perintah ini beberapa kali sebelum Amazon Kinesis Data Streams mulai mengembalikan data.

   Anda akan melihat respons dengan array catatan. Atribut **Data** dalam catatan Amazon Kinesis Data Streams dikodekan base64 dan dikompresi dengan format gzip. Anda dapat memeriksa data mentah dari baris perintah menggunakan perintah Unix berikut:

   ```
   echo -n "<Content of Data>" | base64 -d | zcat
   ```

   Data yang didekode dan didekompresi base64 diformat sebagai JSON dengan struktur berikut:

   ```
   { 
       "messageType": "DATA_MESSAGE",
       "owner": "123456789012",
       "logGroup": "Example1",
       "logStream": "logStream1",
       "subscriptionFilters": [ 
           "ExamplePolicy" 
       ],
       "logEvents": [ 
           { 
               "id": "31953106606966983378809025079804211143289615424298221568",
               "timestamp": 1432826855000,
               "message": "{\"eventVersion\":\"1.03\",\"userIdentity\":{\"type\":\"Root\"}"
           },
           { 
               "id": "31953106606966983378809025079804211143289615424298221569",
               "timestamp": 1432826855000,
               "message": "{\"eventVersion\":\"1.03\",\"userIdentity\":{\"type\":\"Root\"}" 
           }, 
           { 
               "id": "31953106606966983378809025079804211143289615424298221570",
               "timestamp": 1432826855000,
               "message": "{\"eventVersion\":\"1.03\",\"userIdentity\":{\"type\":\"Root\"}" 
           } 
       ],
       "policyLevel": "ACCOUNT_LEVEL_POLICY"
   }
   ```

   Elemen kunci dalam struktur data adalah sebagai berikut:  
**messageType**  
Pesan data akan menggunakan tipe "DATA\$1MESSAGE". Terkadang CloudWatch Log mungkin memancarkan catatan Amazon Kinesis Data Streams dengan tipe “CONTROL\$1MESSAGE”, terutama untuk memeriksa apakah tujuan dapat dijangkau.  
**owner**  
ID AWS Akun dari data log asal.  
**logGroup**  
Nama grup log dari data log asal.  
**logStream**  
Nama pengaliran log dari data log asal.  
**subscriptionFilters**  
Daftar nama filter langganan yang cocok dengan data log asal.  
**logEvents**  
Data log yang sebenarnya, direpresentasikan sebagai array catatan log acara. Properti "id" adalah pengenal unik untuk setiap log acara.  
**PolicyLevel**  
Tingkat di mana kebijakan itu ditegakkan. “ACCOUNT\$1LEVEL\$1POLICY” adalah `policyLevel` untuk kebijakan filter langganan tingkat akun.

## Contoh 2: Filter berlangganan dengan AWS Lambda
<a name="LambdaFunctionExample-AccountLevel"></a>

Dalam contoh ini, Anda akan membuat kebijakan filter langganan tingkat akun CloudWatch Log yang mengirimkan data log ke fungsi Anda AWS Lambda .

**Awas**  
Sebelum membuat fungsi Lambda, hitung volume data log yang akan dihasilkan. Pastikan untuk membuat fungsi yang dapat menangani volume ini. Jika fungsi tidak dapat menangani volume, aliran log akan dibatasi. Karena peristiwa log dari semua grup log atau subset grup log akun diteruskan ke tujuan, ada risiko pembatasan. Untuk informasi selengkapnya tentang batas Lambda, lihat [Batas AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/limits.html). 

**Untuk membuat kebijakan filter langganan tingkat akun untuk Lambda**

1. Buat AWS Lambda fungsinya.

   Pastikan bahwa Anda telah mengatur peran eksekusi Lambda. Untuk informasi selengkapnya, lihat: [Langkah 2.2: Buat IAM role (peran eksekusi)](https://docs.aws.amazon.com/lambda/latest/dg/lambda-intro-execution-role.html) dalam *Panduan Developer AWS Lambda *.

1. Buka editor teks dan buat file bernama `helloWorld.js`dengan isi sebagai berikut:

   ```
   var zlib = require('zlib');
   exports.handler = function(input, context) {
       var payload = Buffer.from(input.awslogs.data, 'base64');
       zlib.gunzip(payload, function(e, result) {
           if (e) { 
               context.fail(e);
           } else {
               result = JSON.parse(result.toString());
               console.log("Event Data:", JSON.stringify(result, null, 2));
               context.succeed();
           }
       });
   };
   ```

1. Buat zip file helloWorld.js dan simpan dengan nama `helloWorld.zip`.

1. Gunakan perintah berikut, di mana perannya adalah peran eksekusi Lambda yang Anda atur di langkah pertama:

   ```
   aws lambda create-function \
       --function-name helloworld \
       --zip-file fileb://file-path/helloWorld.zip \
       --role lambda-execution-role-arn \
       --handler helloWorld.handler \
       --runtime nodejs18.x
   ```

1. Berikan CloudWatch Log izin untuk menjalankan fungsi Anda. Gunakan perintah berikut, ganti akun placeholder dengan akun Anda sendiri.

   ```
   aws lambda add-permission \
       --function-name "helloworld" \
       --statement-id "helloworld" \
       --principal "logs.amazonaws.com" \
       --action "lambda:InvokeFunction" \
       --source-arn "arn:aws:logs:region:123456789012:log-group:*" \
       --source-account "123456789012"
   ```

1. Buat kebijakan filter langganan tingkat akun menggunakan perintah berikut, ganti akun placeholder dengan akun Anda sendiri. Dalam contoh ini, semua peristiwa log yang berisi string dialirkan, kecuali yang `ERROR` ada di grup log bernama `LogGroupToExclude1` dan`LogGroupToExclude2`.

   ```
   aws logs put-account-policy \
       --policy-name "ExamplePolicyLambda" \
       --policy-type "SUBSCRIPTION_FILTER_POLICY" \
       --policy-document '{"DestinationArn":"arn:aws:lambda:region:123456789012:function:helloWorld", "FilterPattern": "Test", "Distribution": "Random"}' \
       --selection-criteria 'LogGroupName NOT IN ["LogGroupToExclude1", "LogGroupToExclude2"]' \
       --scope "ALL"
   ```

   Setelah menyiapkan filter langganan, CloudWatch Log meneruskan semua peristiwa log masuk yang cocok dengan pola filter dan kriteria pemilihan ke aliran Anda. 

   `selection-criteria`Bidang ini opsional, tetapi penting untuk mengecualikan grup log yang dapat menyebabkan rekursi log tak terbatas dari filter langganan. Untuk informasi selengkapnya tentang masalah ini dan menentukan grup log mana yang akan dikecualikan, lihat[Pencegahan rekursi log](Subscriptions-recursion-prevention.md). Saat ini, NOT IN adalah satu-satunya operator yang didukung untuk`selection-criteria`.

1. (Opsional) Uji menggunakan contoh log acara. Di jendela perintah, jalankan perintah berikut, yang akan menempatkan pesan log sederhana ke dalam pengaliran langganan.

   Untuk melihat output dari fungsi Lambda Anda, navigasikan ke fungsi Lambda di mana Anda akan melihat output di/: aws/lambda/helloworld

   ```
   aws logs put-log-events --log-group-name Example1 --log-stream-name logStream1 --log-events "[{\"timestamp\":CURRENT TIMESTAMP MILLIS , \"message\": \"Simple Lambda Test\"}]"
   ```

   Anda akan melihat respons dengan array Lambda. Atribut **Data** dalam catatan Lambda adalah base64 dikodekan dan dikompresi dengan format gzip. Muatan sebenarnya yang diterima oleh Lambda memiliki format berikut `{ "awslogs": {"data": "BASE64ENCODED_GZIP_COMPRESSED_DATA"} }` Anda dapat memeriksa data mentah dari baris perintah menggunakan perintah Unix berikut:

   ```
   echo -n "<BASE64ENCODED_GZIP_COMPRESSED_DATA>" | base64 -d | zcat
   ```

   Data yang didekode dan didekompresi base64 diformat sebagai JSON dengan struktur berikut:

   ```
   { 
       "messageType": "DATA_MESSAGE",
       "owner": "123456789012",
       "logGroup": "Example1",
       "logStream": "logStream1",
       "subscriptionFilters": [ 
           "ExamplePolicyLambda" 
       ],
       "logEvents": [ 
           { 
               "id": "31953106606966983378809025079804211143289615424298221568",
               "timestamp": 1432826855000,
               "message": "{\"eventVersion\":\"1.03\",\"userIdentity\":{\"type\":\"Root\"}"
           },
           { 
               "id": "31953106606966983378809025079804211143289615424298221569",
               "timestamp": 1432826855000,
               "message": "{\"eventVersion\":\"1.03\",\"userIdentity\":{\"type\":\"Root\"}" 
           }, 
           { 
               "id": "31953106606966983378809025079804211143289615424298221570",
               "timestamp": 1432826855000,
               "message": "{\"eventVersion\":\"1.03\",\"userIdentity\":{\"type\":\"Root\"}" 
           } 
       ],
       "policyLevel": "ACCOUNT_LEVEL_POLICY"
   }
   ```
**catatan**  
Filter langganan tingkat akun tidak akan diterapkan ke grup log fungsi Lambda tujuan. Ini untuk mencegah rekursi log tak terbatas yang dapat menyebabkan peningkatan penagihan konsumsi. Untuk informasi lebih lanjut tentang masalah ini, lihat[Pencegahan rekursi log](Subscriptions-recursion-prevention.md).

   Elemen kunci dalam struktur data adalah sebagai berikut:  
**messageType**  
Pesan data akan menggunakan tipe "DATA\$1MESSAGE". Terkadang CloudWatch Log mungkin memancarkan catatan Amazon Kinesis Data Streams dengan tipe “CONTROL\$1MESSAGE”, terutama untuk memeriksa apakah tujuan dapat dijangkau.  
**owner**  
ID AWS Akun dari data log asal.  
**logGroup**  
Nama grup log dari data log asal.  
**logStream**  
Nama pengaliran log dari data log asal.  
**subscriptionFilters**  
Daftar nama filter langganan yang cocok dengan data log asal.  
**logEvents**  
Data log yang sebenarnya, direpresentasikan sebagai array catatan log acara. Properti "id" adalah pengenal unik untuk setiap log acara.  
**PolicyLevel**  
Tingkat di mana kebijakan itu ditegakkan. “ACCOUNT\$1LEVEL\$1POLICY” adalah `policyLevel` untuk kebijakan filter langganan tingkat akun.

## Contoh 3: Filter berlangganan dengan Amazon Data Firehose
<a name="FirehoseExample-AccountLevel"></a>

Dalam contoh ini, Anda akan membuat kebijakan filter langganan tingkat akun CloudWatch Log yang mengirimkan peristiwa log masuk yang cocok dengan filter yang ditentukan ke aliran pengiriman Amazon Data Firehose. Data yang dikirim dari CloudWatch Log ke Amazon Data Firehose sudah dikompresi dengan kompresi gzip level 6, jadi Anda tidak perlu menggunakan kompresi dalam aliran pengiriman Firehose Anda. Anda kemudian dapat menggunakan fitur dekompresi di Firehose untuk mendekompresi log secara otomatis. Untuk informasi selengkapnya, lihat [Menulis ke Kinesis Data CloudWatch Firehose](https://docs.aws.amazon.com/firehose/latest/dev/writing-with-cloudwatch-logs.html) Menggunakan Log.

**Awas**  
Sebelum Anda membuat aliran Firehose, hitung volume data log yang akan dihasilkan. Pastikan untuk membuat aliran Firehose yang dapat menangani volume ini. Jika pengaliran tidak dapat menangani volume, pengaliran log akan mengalami throttling. Untuk informasi selengkapnya tentang batas volume aliran Firehose, lihat Batas Data [Firehose Amazon](https://docs.aws.amazon.com/firehose/latest/dev/limits.html) Data. 

**Untuk membuat filter langganan untuk Firehose**

1. Buat bucket Amazon Simple Storage Service (Amazon S3). Kami menyarankan Anda menggunakan bucket yang dibuat khusus untuk CloudWatch Log. Namun, jika Anda ingin menggunakan bucket yang sudah ada, lewati ke langkah 2.

   Jalankan perintah berikut, dengan mengganti Wilayah placeholder dengan Wilayah yang ingin Anda gunakan:

   ```
   aws s3api create-bucket --bucket amzn-s3-demo-bucket2 --create-bucket-configuration LocationConstraint=region
   ```

   Berikut ini adalah output contoh:

   ```
   {
       "Location": "/amzn-s3-demo-bucket2"
   }
   ```

1. Buat peran IAM yang memberikan izin Amazon Data Firehose untuk memasukkan data ke dalam bucket Amazon S3 Anda.

   Untuk informasi selengkapnya, lihat [Mengontrol Akses dengan Amazon Data Firehose di Panduan Pengembang](https://docs.aws.amazon.com/firehose/latest/dev/controlling-access.html) *Amazon Data Firehose*.

   Pertama, gunakan editor teks untuk membuat kebijakan kepercayaan dalam file `~/TrustPolicyForFirehose.json` sebagai berikut:

   ```
   {
     "Statement": {
       "Effect": "Allow",
       "Principal": { "Service": "firehose.amazonaws.com" },
       "Action": "sts:AssumeRole"
       } 
   }
   ```

1. Gunakan perintah **create-role** untuk membuat IAM role, dengan menentukan file kebijakan kepercayaan. Catat nilai **Role.Arn** yang dikembalikan, karena Anda akan membutuhkannya di langkah selanjutnya:

   ```
   aws iam create-role \
    --role-name FirehosetoS3Role \
    --assume-role-policy-document file://~/TrustPolicyForFirehose.json
   
   {
       "Role": {
           "AssumeRolePolicyDocument": {
               "Statement": {
                   "Action": "sts:AssumeRole",
                   "Effect": "Allow",
                   "Principal": {
                       "Service": "firehose.amazonaws.com"
                   }
               }
           },
           "RoleId": "EXAMPLE50GAB4HC5F431",
           "CreateDate": "2023-05-29T13:46:29.431Z",
           "RoleName": "FirehosetoS3Role",
           "Path": "/",
           "Arn": "arn:aws:iam::123456789012:role/FirehosetoS3Role"
       }
   }
   ```

1. Buat kebijakan izin untuk menentukan tindakan apa yang dapat dilakukan Firehose di akun Anda. Pertama, gunakan editor teks untuk membuat kebijakan izin dalam file `~/PermissionsForFirehose.json`:

   ```
   {
     "Statement": [
       {
         "Effect": "Allow",
         "Action": [ 
             "s3:AbortMultipartUpload", 
             "s3:GetBucketLocation", 
             "s3:GetObject", 
             "s3:ListBucket", 
             "s3:ListBucketMultipartUploads", 
             "s3:PutObject" ],
         "Resource": [ 
             "arn:aws:s3:::amzn-s3-demo-bucket2", 
             "arn:aws:s3:::amzn-s3-demo-bucket2/*" ]
       }
     ]
   }
   ```

1. Kaitkan kebijakan izin dengan peran menggunakan put-role-policy perintah berikut:

   ```
   aws iam put-role-policy --role-name FirehosetoS3Role --policy-name Permissions-Policy-For-Firehose --policy-document file://~/PermissionsForFirehose.json
   ```

1. Buat aliran pengiriman Firehose tujuan sebagai berikut, ganti nilai placeholder untuk **RoLearn** dan **BucketArn dengan peran dan bucket** yang Anda buat: ARNs 

   ```
   aws firehose create-delivery-stream \
      --delivery-stream-name 'my-delivery-stream' \
      --s3-destination-configuration \
     '{"RoleARN": "arn:aws:iam::123456789012:role/FirehosetoS3Role", "BucketARN": "arn:aws:s3:::amzn-s3-demo-bucket2"}'
   ```

   NFirehose secara otomatis menggunakan awalan dalam format waktu YYYY/MM/DD/HH UTC untuk objek Amazon S3 yang dikirimkan. Anda dapat menentukan prefiks tambahan untuk ditambahkan di depan prefiks format waktu. Jika prefiks berakhir dengan garis miring (/), itu akan muncul sebagai folder dalam bucket Amazon S3.

1. Tunggu beberapa menit hingga streaming menjadi aktif. **Anda dapat menggunakan **describe-delivery-stream**perintah Firehose untuk memeriksa. DeliveryStreamDescription DeliveryStreamStatus**properti. Selain itu, perhatikan **DeliveryStreamDescription. DeliveryStreamNilai ARN**, karena Anda akan membutuhkannya di langkah selanjutnya:

   ```
   aws firehose describe-delivery-stream --delivery-stream-name "my-delivery-stream"
   {
       "DeliveryStreamDescription": {
           "HasMoreDestinations": false,
           "VersionId": "1",
           "CreateTimestamp": 1446075815.822,
           "DeliveryStreamARN": "arn:aws:firehose:us-east-1:123456789012:deliverystream/my-delivery-stream",
           "DeliveryStreamStatus": "ACTIVE",
           "DeliveryStreamName": "my-delivery-stream",
           "Destinations": [
               {
                   "DestinationId": "destinationId-000000000001",
                   "S3DestinationDescription": {
                       "CompressionFormat": "UNCOMPRESSED",
                       "EncryptionConfiguration": {
                           "NoEncryptionConfig": "NoEncryption"
                       },
                       "RoleARN": "delivery-stream-role",
                       "BucketARN": "arn:aws:s3:::amzn-s3-demo-bucket2",
                       "BufferingHints": {
                           "IntervalInSeconds": 300,
                           "SizeInMBs": 5
                       }
                   }
               }
           ]
       }
   }
   ```

1. Buat peran IAM yang memberikan izin CloudWatch Log untuk memasukkan data ke aliran pengiriman Firehose Anda. Pertama, gunakan editor teks untuk membuat kebijakan kepercayaan dalam file `~/TrustPolicyForCWL.json`:

   Kebijakan ini mencakup kunci konteks kondisi `aws:SourceArn` global untuk membantu mencegah masalah keamanan wakil yang membingungkan. Untuk informasi selengkapnya, lihat [Pencegahan Deputi Bingung](Subscriptions-confused-deputy.md).

   ```
   {
     "Statement": {
       "Effect": "Allow",
       "Principal": { "Service": "logs.amazonaws.com" },
       "Action": "sts:AssumeRole",
       "Condition": { 
            "StringLike": { 
                "aws:SourceArn": "arn:aws:logs:region:123456789012:*"
            } 
        }
     }
   }
   ```

1. Gunakan perintah **create-role** untuk membuat IAM role, dengan menentukan file kebijakan kepercayaan. Catat nilai **Role.Arn** yang dikembalikan, karena Anda akan membutuhkannya di langkah selanjutnya:

   ```
   aws iam create-role \
   --role-name CWLtoKinesisFirehoseRole \
   --assume-role-policy-document file://~/TrustPolicyForCWL.json
   
   {
       "Role": {
           "AssumeRolePolicyDocument": {
               "Statement": {
                   "Action": "sts:AssumeRole",
                   "Effect": "Allow",
                   "Principal": {
                       "Service": "logs.amazonaws.com"
                   },
                   "Condition": { 
                        "StringLike": { 
                            "aws:SourceArn": "arn:aws:logs:region:123456789012:*"
                        } 
                    }
               }
           },
           "RoleId": "AAOIIAH450GAB4HC5F431",
           "CreateDate": "2015-05-29T13:46:29.431Z",
           "RoleName": "CWLtoKinesisFirehoseRole",
           "Path": "/",
           "Arn": "arn:aws:iam::123456789012:role/CWLtoKinesisFirehoseRole"
       }
   }
   ```

1. Buat kebijakan izin untuk menentukan tindakan apa yang dapat dilakukan CloudWatch Log di akun Anda. Pertama, gunakan editor teks untuk membuat file kebijakan izin (misalnya, `~/PermissionsForCWL.json`):

   ```
   {
       "Statement":[
         {
           "Effect":"Allow",
           "Action":["firehose:PutRecord"],
           "Resource":[
               "arn:aws:firehose:region:account-id:deliverystream/delivery-stream-name"]
         }
       ]
   }
   ```

1. Kaitkan kebijakan izin dengan peran menggunakan put-role-policy perintah:

   ```
   aws iam put-role-policy --role-name CWLtoKinesisFirehoseRole --policy-name Permissions-Policy-For-CWL --policy-document file://~/PermissionsForCWL.json
   ```

1. Setelah aliran pengiriman Amazon Data Firehose dalam status aktif dan Anda telah membuat peran IAM, Anda dapat membuat kebijakan filter langganan tingkat akun CloudWatch Log. Kebijakan segera memulai aliran data log real-time dari grup log yang dipilih ke aliran pengiriman Amazon Data Firehose Anda:

   ```
   aws logs put-account-policy \
       --policy-name "ExamplePolicyFirehose" \
       --policy-type "SUBSCRIPTION_FILTER_POLICY" \
       --policy-document '{"RoleArn":"arn:aws:iam::123456789012:role/CWLtoKinesisFirehoseRole", "DestinationArn":"arn:aws:firehose:us-east-1:123456789012:deliverystream/delivery-stream-name", "FilterPattern": "Test", "Distribution": "Random"}' \
       --selection-criteria 'LogGroupName NOT IN ["LogGroupToExclude1", "LogGroupToExclude2"]' \
       --scope "ALL"
   ```

1. Setelah menyiapkan filter langganan, CloudWatch Log meneruskan peristiwa log masuk yang cocok dengan pola filter ke aliran pengiriman Amazon Data Firehose Anda.

   `selection-criteria`Bidang ini opsional, tetapi penting untuk mengecualikan grup log yang dapat menyebabkan rekursi log tak terbatas dari filter langganan. Untuk informasi selengkapnya tentang masalah ini dan menentukan grup log mana yang akan dikecualikan, lihat[Pencegahan rekursi log](Subscriptions-recursion-prevention.md). Saat ini, NOT IN adalah satu-satunya operator yang didukung untuk`selection-criteria`.

   Data Anda akan mulai muncul di Amazon S3 berdasarkan interval buffer waktu yang ditetapkan pada aliran pengiriman Amazon Data Firehose Anda. Setelah waktu tertentu berlalu, Anda dapat memverifikasi data dengan memeriksa Bucket Amazon S3 Anda.

   ```
   aws s3api list-objects --bucket 'amzn-s3-demo-bucket2' --prefix 'firehose/'
   {
       "Contents": [
           {
               "LastModified": "2023-10-29T00:01:25.000Z",
               "ETag": "\"a14589f8897f4089d3264d9e2d1f1610\"",
               "StorageClass": "STANDARD",
               "Key": "firehose/2015/10/29/00/my-delivery-stream-2015-10-29-00-01-21-a188030a-62d2-49e6-b7c2-b11f1a7ba250",
               "Owner": {
                   "DisplayName": "cloudwatch-logs",
                   "ID": "1ec9cf700ef6be062b19584e0b7d84ecc19237f87b5"
               },
               "Size": 593
           },
           {
               "LastModified": "2015-10-29T00:35:41.000Z",
               "ETag": "\"a7035b65872bb2161388ffb63dd1aec5\"",
               "StorageClass": "STANDARD",
               "Key": "firehose/2023/10/29/00/my-delivery-stream-2023-10-29-00-35-40-EXAMPLE-7e66-49bc-9fd4-fc9819cc8ed3",
               "Owner": {
                   "DisplayName": "cloudwatch-logs",
                   "ID": "EXAMPLE6be062b19584e0b7d84ecc19237f87b6"
               },
               "Size": 5752
           }
       ]
   }
   ```

   ```
   aws s3api get-object --bucket 'amzn-s3-demo-bucket2' --key 'firehose/2023/10/29/00/my-delivery-stream-2023-10-29-00-01-21-a188030a-62d2-49e6-b7c2-b11f1a7ba250' testfile.gz
   
   {
       "AcceptRanges": "bytes",
       "ContentType": "application/octet-stream",
       "LastModified": "Thu, 29 Oct 2023 00:07:06 GMT",
       "ContentLength": 593,
       "Metadata": {}
   }
   ```

   Data dalam objek Amazon S3 dikompresi dengan format gzip. Anda dapat memeriksa data mentah dari baris perintah menggunakan perintah Unix berikut:

   ```
   zcat testfile.gz
   ```