

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

# Langganan lintas akun Lintas wilayah
<a name="CrossAccountSubscriptions"></a>

Anda dapat berkolaborasi dengan pemilik AWS akun lain dan menerima peristiwa log mereka di AWS sumber daya Anda, seperti Amazon Kinesis atau Amazon Data Firehose stream (ini dikenal sebagai berbagi data lintas akun). Misalnya, data peristiwa log ini dapat dibaca dari Amazon Kinesis Data Streams atau aliran Firehose terpusat untuk melakukan pemrosesan dan analisis kustom. Pemrosesan khusus sangat berguna saat Anda berkolaborasi dan menganalisis data di banyak akun.

Misalnya, grup keamanan informasi perusahaan mungkin ingin menganalisis data untuk deteksi intrusi waktu nyata atau perilaku anomali agar bisa melakukan audit akun di semua divisi di perusahaan dengan mengumpulkan log produksi gabungan mereka untuk pemrosesan pusat. Aliran data peristiwa secara real-time di seluruh akun tersebut dapat dirakit dan dikirimkan ke grup keamanan informasi, yang dapat menggunakan Amazon Kinesis Data Streams untuk melampirkan data ke sistem analitik keamanan yang ada.

**catatan**  
Grup log dan tujuan harus berada di AWS Wilayah yang sama. Namun, sumber daya AWS yang ditunjuk oleh tujuan dapat berada di Wilayah yang berbeda. Dalam contoh di bagian berikut, semua sumber daya khusus Wilayah dibuat di AS Timur (Virginia N.)).

Jika Anda telah mengonfigurasi AWS Organizations dan bekerja dengan akun anggota, Anda dapat menggunakan sentralisasi log untuk mengumpulkan data log dari akun sumber ke akun pemantauan pusat. 

Saat bekerja dengan grup log terpusat, Anda dapat menggunakan dimensi bidang sistem ini saat membuat filter langganan:
+ `@aws.account`- Dimensi ini mewakili ID AWS akun dari mana peristiwa log berasal.
+ `@aws.region`- Dimensi ini mewakili AWS wilayah tempat peristiwa log dihasilkan. 

Dimensi ini membantu dalam mengidentifikasi sumber data log, memungkinkan penyaringan dan analisis metrik yang lebih terperinci yang berasal dari log terpusat. 

**Topics**
+ [Berbagi data log lintas wilayah lintas akun menggunakan Amazon Kinesis Data Streams](CrossAccountSubscriptions-Kinesis.md)
+ [Berbagi data log lintas wilayah lintas akun menggunakan Firehose](CrossAccountSubscriptions-Firehose.md)
+ [Langganan tingkat akun lintas wilayah lintas akun menggunakan Amazon Kinesis Data Streams](CrossAccountSubscriptions-Kinesis-Account.md)
+ [Langganan tingkat akun lintas wilayah lintas akun menggunakan Firehose](CrossAccountSubscriptions-Firehose-Account.md)

# Berbagi data log lintas wilayah lintas akun menggunakan Amazon Kinesis Data Streams
<a name="CrossAccountSubscriptions-Kinesis"></a>

Saat membuat langganan lintas akun, Anda dapat menentukan satu akun atau organisasi untuk menjadi pengirim. Jika Anda menentukan organisasi, maka prosedur ini memungkinkan semua akun di organisasi untuk mengirim log ke akun penerima.

Untuk berbagi data log lintas akun, Anda perlu membuat pengirim dan penerima data log:
+ **Pengirim data log** —mendapatkan informasi tujuan dari penerima dan memberi tahu CloudWatch Log bahwa Log siap mengirim peristiwa lognya ke tujuan yang ditentukan. Dalam prosedur di bagian lainnya, pengirim data log ditampilkan dengan nomor AWS akun fiksi 111111111111.

  Jika Anda akan memiliki beberapa akun dalam satu organisasi yang mengirim log ke satu akun penerima, Anda dapat membuat kebijakan yang memberikan izin kepada semua akun di organisasi untuk mengirim log ke akun penerima. Anda masih harus menyiapkan filter langganan terpisah untuk setiap akun pengirim.
+ **Penerima data log** —menyiapkan tujuan yang merangkum aliran Amazon Kinesis Data Streams dan CloudWatch memberi tahu Log bahwa penerima ingin menerima data log. Penerima kemudian membagikan informasi tentang tujuan ini dengan pengirim. Dalam prosedur di bagian lainnya, penerima data log ditampilkan dengan nomor AWS akun fiksi 999999999999.

Untuk mulai menerima peristiwa log dari pengguna lintas akun, penerima data log terlebih dahulu membuat tujuan CloudWatch Log. Setiap tujuan terdiri atas elemen kunci berikut:

**Nama tujuan**  
Nama tujuan yang ingin Anda buat.

**ARN Target**  
Nama Sumber Daya Amazon (ARN) dari AWS sumber daya yang ingin Anda gunakan sebagai tujuan umpan berlangganan.

**Peran ARN**  
Peran AWS Identity and Access Management (IAM) yang memberikan CloudWatch Log izin yang diperlukan untuk memasukkan data ke aliran yang dipilih.

**Kebijakan akses**  
Dokumen kebijakan IAM (dalam format JSON, ditulis menggunakan tata bahasa kebijakan IAM) yang mengatur set pengguna yang diizinkan untuk menulis ke tujuan Anda.

**catatan**  
Grup log dan tujuan harus berada di AWS Wilayah yang sama. Namun, AWS sumber daya yang ditunjuk tujuan dapat ditemukan di Wilayah yang berbeda. Dalam contoh di bagian berikut, semua sumber daya khusus Wilayah dibuat di US East (N. Virginia).

**Topics**
+ [Menyiapkan langganan lintas akun baru](Cross-Account-Log_Subscription-New.md)
+ [Memperbarui langganan lintas akun yang ada](Cross-Account-Log_Subscription-Update.md)

# Menyiapkan langganan lintas akun baru
<a name="Cross-Account-Log_Subscription-New"></a>

Ikuti langkah-langkah di bagian ini untuk menyiapkan langganan log lintas akun baru.

**Topics**
+ [Langkah 1: Buat tujuan](CreateDestination.md)
+ [Langkah 2: (Hanya jika menggunakan organisasi) Buat peran IAM](CreateSubscriptionFilter-IAMrole.md)
+ [Langkah 3: Add/validate Izin IAM untuk tujuan lintas akun](Subscription-Filter-CrossAccount-Permissions.md)
+ [Langkah 4: Buat filter berlangganan](CreateSubscriptionFilter.md)
+ [Validasi alur peristiwa log](ValidateLogEventFlow.md)
+ [Ubah keanggotaan tujuan saat runtime](ModifyDestinationMembership.md)

# Langkah 1: Buat tujuan
<a name="CreateDestination"></a>

**penting**  
Semua langkah dalam prosedur ini harus dilakukan di akun penerima data log.

Untuk contoh ini, akun penerima data log memiliki ID akun 999999999999, sedangkan ID AWS akun pengirim AWS data log adalah 111111111111.

 Contoh ini membuat tujuan menggunakan aliran Amazon Kinesis Data RecipientStream Streams yang disebut, dan peran CloudWatch yang memungkinkan Log untuk menulis data ke sana. 

Saat tujuan dibuat, CloudWatch Log mengirimkan pesan pengujian ke tujuan atas nama akun penerima. Saat filter langganan aktif nanti, CloudWatch Log mengirimkan peristiwa log ke tujuan atas nama akun sumber.

**Untuk membuat tujuan**

1. Di akun penerima, buat aliran tujuan di Amazon Kinesis Data Streams. Di jendela perintah, ketik:

   ```
   aws kinesis create-stream --stream-name "RecipientStream" --shard-count 1
   ```

1. Tunggu hingga streaming menjadi aktif. **Anda dapat menggunakan perintah **aws kinesis describe-stream** untuk memeriksa. StreamDescription StreamStatus**properti. Selain itu, perhatikan **StreamDescriptionnilai.streaMarn** karena Anda akan meneruskannya ke CloudWatch Log nanti:

   ```
   aws kinesis describe-stream --stream-name "RecipientStream"
   {
     "StreamDescription": {
       "StreamStatus": "ACTIVE",
       "StreamName": "RecipientStream",
       "StreamARN": "arn:aws:kinesis:us-east-1:999999999999:stream/RecipientStream",
       "Shards": [
         {
           "ShardId": "shardId-000000000000",
           "HashKeyRange": {
             "EndingHashKey": "34028236692093846346337460743176EXAMPLE",
             "StartingHashKey": "0"
           },
           "SequenceNumberRange": {
             "StartingSequenceNumber": "4955113521868881845667950383198145878459135270218EXAMPLE"
           }
         }
       ]
     }
   }
   ```

   Mungkin diperlukan satu atau dua menit bagi pengaliran Anda untuk muncul dalam keadaan aktif.

1. Buat peran IAM yang memberikan izin kepada CloudWatch Log untuk memasukkan data ke aliran Anda. Pertama, Anda harus membuat kebijakan kepercayaan dalam file **\$1/ TrustPolicyFor CWL.json**. Gunakan editor teks untuk membuat file kebijakan ini, jangan menggunakan konsol IAM.

   Kebijakan ini mencakup kunci konteks kondisi `aws:SourceArn` global yang menentukan `sourceAccountId` untuk membantu mencegah masalah keamanan wakil yang membingungkan. Jika Anda belum mengetahui ID akun sumber pada panggilan pertama, kami sarankan Anda memasukkan ARN tujuan di bidang ARN sumber. Dalam panggilan berikutnya, Anda harus mengatur ARN sumber menjadi ARN sumber sebenarnya yang Anda kumpulkan dari panggilan pertama. Untuk informasi selengkapnya, lihat [Pencegahan Deputi Bingung](Subscriptions-confused-deputy.md). 

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

1. Gunakan perintah **aws iam create-role** untuk membuat IAM role, dengan menentukan file kebijakan kepercayaan. Perhatikan nilai Role.Arn yang dikembalikan karena itu juga akan diteruskan ke Log nanti: CloudWatch 

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

1. Buat kebijakan izin untuk menentukan tindakan yang dapat dilakukan CloudWatch Log di akun Anda. Pertama, gunakan editor teks untuk membuat kebijakan izin dalam file **\$1/ PermissionsFor** CWL.json:

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

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

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

1. Setelah aliran dalam keadaan aktif dan Anda telah membuat peran IAM, Anda dapat membuat tujuan CloudWatch Log.

   1. Langkah ini tidak mengaitkan kebijakan akses dengan tujuan Anda dan hanya langkah pertama dari dua langkah yang menyelesaikan pembuatan tujuan. Catat **DestinationArn**yang dikembalikan dalam muatan:

      ```
      aws logs put-destination \
          --destination-name "testDestination" \
          --target-arn "arn:aws:kinesis:region:999999999999:stream/RecipientStream" \
          --role-arn "arn:aws:iam::999999999999:role/CWLtoKinesisRole"
      
      {
        "DestinationName" : "testDestination",
        "RoleArn" : "arn:aws:iam::999999999999:role/CWLtoKinesisRole",
        "DestinationArn" : "arn:aws:logs:us-east-1:999999999999:destination:testDestination",
        "TargetArn" : "arn:aws:kinesis:us-east-1:999999999999:stream/RecipientStream"
      }
      ```

   1. Setelah langkah 7a selesai, di akun penerima data log, kaitkan kebijakan akses dengan tujuan. Kebijakan ini harus menentukan PutSubscriptionFilter tindakan **log:** dan memberikan izin ke akun pengirim untuk mengakses tujuan.

      Kebijakan memberikan izin ke AWS akun yang mengirim log. Anda dapat menentukan hanya satu akun ini dalam kebijakan, atau jika akun pengirim adalah anggota organisasi, kebijakan dapat menentukan ID organisasi organisasi. Dengan cara ini, Anda dapat membuat hanya satu kebijakan untuk mengizinkan beberapa akun dalam satu organisasi mengirim log ke akun tujuan ini.

      Gunakan editor teks untuk membuat file bernama `~/AccessPolicy.json` dengan salah satu pernyataan kebijakan berikut.

      Kebijakan contoh pertama ini memungkinkan semua akun di organisasi yang memiliki ID `o-1234567890` untuk mengirim log ke akun penerima.

------
#### [ JSON ]

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Sid": "",
                  "Effect": "Allow",
                  "Principal": "*",
                  "Action": "logs:PutSubscriptionFilter",
                  "Resource": "arn:aws:logs:us-east-1:999999999999:destination:testDestination",
                  "Condition": {
                      "StringEquals": {
                          "aws:PrincipalOrgID": [
                              "o-1234567890"
                          ]
                      }
                  }
              }
          ]
      }
      ```

------

      Contoh berikutnya ini memungkinkan hanya akun pengirim data log (111111111111) untuk mengirim log ke akun penerima data log.

------
#### [ JSON ]

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Sid": "",
                  "Effect": "Allow",
                  "Principal": {
                      "AWS": "111111111111"
                  },
                  "Action": "logs:PutSubscriptionFilter",
                  "Resource": "arn:aws:logs:us-east-1:999999999999:destination:testDestination"
              }
          ]
      }
      ```

------

   1. Lampirkan kebijakan yang Anda buat pada langkah sebelumnya ke tujuan.

      ```
      aws logs put-destination-policy \
          --destination-name "testDestination" \
          --access-policy file://~/AccessPolicy.json
      ```

      Kebijakan akses ini memungkinkan pengguna di AWS Akun dengan ID 111111111111 untuk memanggil tujuan dengan ARN arn:aws:logs **PutSubscriptionFilter**::999999999999:destination:testDestination. *region* Upaya pengguna lain untuk menelepon PutSubscriptionFilter terhadap tujuan ini akan ditolak.

      Untuk memvalidasi hak istimewa pengguna berdasarkan kebijakan akses, lihat [Menggunakan Validator Kebijakan](https://docs.aws.amazon.com/IAM/latest/UserGuide/policies_policy-validator.html) dalam *Panduan Pengguna IAM*.

Setelah selesai, jika Anda menggunakan AWS Organizations izin lintas akun, ikuti langkah-langkahnya. [Langkah 2: (Hanya jika menggunakan organisasi) Buat peran IAM](CreateSubscriptionFilter-IAMrole.md) Jika Anda memberikan izin langsung ke akun lain alih-alih menggunakan Organizations, Anda dapat melewati langkah itu dan melanjutkan ke. [Langkah 4: Buat filter berlangganan](CreateSubscriptionFilter.md)

# Langkah 2: (Hanya jika menggunakan organisasi) Buat peran IAM
<a name="CreateSubscriptionFilter-IAMrole"></a>

Di bagian sebelumnya, jika Anda membuat tujuan menggunakan kebijakan akses yang memberikan izin kepada organisasi tempat akun `111111111111` berada, alih-alih memberikan izin langsung ke akun`111111111111`, ikuti langkah-langkah di bagian ini. Jika tidak, Anda dapat melompat ke[Langkah 4: Buat filter berlangganan](CreateSubscriptionFilter.md).

Langkah-langkah di bagian ini membuat peran IAM, yang CloudWatch dapat mengasumsikan dan memvalidasi apakah akun pengirim memiliki izin untuk membuat filter langganan terhadap tujuan penerima. 

Lakukan langkah-langkah di bagian ini di akun pengirim. Peran harus ada di akun pengirim, dan Anda menentukan ARN peran ini dalam filter berlangganan. Dalam contoh ini, akun pengirim adalah`111111111111`.

**Untuk membuat peran IAM yang diperlukan untuk langganan log lintas akun menggunakan AWS Organizations**

1. Buat kebijakan kepercayaan berikut dalam sebuah file`/TrustPolicyForCWLSubscriptionFilter.json`. Gunakan editor teks untuk membuat file kebijakan ini; jangan gunakan konsol IAM.

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

1. Buat peran IAM yang menggunakan kebijakan ini. Perhatikan `Arn` nilai yang dikembalikan oleh perintah, Anda akan membutuhkannya nanti dalam prosedur ini. Dalam contoh ini, kita gunakan `CWLtoSubscriptionFilterRole` untuk nama peran yang kita buat.

   ```
   aws iam create-role \ 
        --role-name CWLtoSubscriptionFilterRole \ 
        --assume-role-policy-document file://~/TrustPolicyForCWLSubscriptionFilter.json
   ```

1. Buat kebijakan izin untuk menentukan tindakan yang dapat dilakukan CloudWatch Log di akun Anda.

   1. Pertama, gunakan editor teks untuk membuat kebijakan izin berikut dalam file bernama`~/PermissionsForCWLSubscriptionFilter.json`.

      ```
      { 
          "Statement": [ 
              { 
                  "Effect": "Allow", 
                  "Action": "logs:PutLogEvents", 
                  "Resource": "arn:aws:logs:region:111111111111:log-group:LogGroupOnWhichSubscriptionFilterIsCreated:*" 
              } 
          ] 
      }
      ```

   1. Masukkan perintah berikut untuk mengaitkan kebijakan izin yang baru saja Anda buat dengan peran yang Anda buat di langkah 2.

      ```
      aws iam put-role-policy  
          --role-name CWLtoSubscriptionFilterRole  
          --policy-name Permissions-Policy-For-CWL-Subscription-filter 
          --policy-document file://~/PermissionsForCWLSubscriptionFilter.json
      ```

Setelah selesai, Anda dapat melanjutkan ke[Langkah 4: Buat filter berlangganan](CreateSubscriptionFilter.md).

# Langkah 3: Add/validate Izin IAM untuk tujuan lintas akun
<a name="Subscription-Filter-CrossAccount-Permissions"></a>

Menurut logika evaluasi kebijakan AWS lintas akun, untuk mengakses sumber daya lintas akun (seperti aliran Kinesis atau Firehose yang digunakan sebagai tujuan filter langganan), Anda harus memiliki kebijakan berbasis identitas di akun pengirim yang menyediakan akses eksplisit ke sumber tujuan lintas akun. Untuk informasi selengkapnya tentang logika evaluasi kebijakan, lihat [Logika evaluasi kebijakan lintas akun](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic-cross-account.html).

Anda dapat melampirkan kebijakan berbasis identitas ke peran IAM atau pengguna IAM yang Anda gunakan untuk membuat filter langganan. Kebijakan ini harus ada di akun pengiriman. Jika Anda menggunakan peran Administrator untuk membuat filter langganan, Anda dapat melewati langkah ini dan melanjutkan ke[Langkah 4: Buat filter berlangganan](CreateSubscriptionFilter.md).

**Untuk menambah atau memvalidasi izin IAM yang diperlukan untuk lintas akun**

1. Masukkan perintah berikut untuk memeriksa peran IAM atau pengguna IAM mana yang digunakan untuk menjalankan perintah AWS log.

   ```
   aws sts get-caller-identity
   ```

   Perintah tersebut mengembalikan output serupa dengan berikut ini:

   ```
   {
   "UserId": "User ID",
   "Account": "sending account id",
   "Arn": "arn:aws:sending account id:role/user:RoleName/UserName"
   }
   ```

   Catat nilai yang diwakili oleh *RoleName* atau*UserName*.

1.  Konsol Manajemen AWS Masuk ke akun pengiriman dan cari kebijakan terlampir dengan peran IAM atau pengguna IAM yang dikembalikan dalam output perintah yang Anda masukkan pada langkah 1.

1. Verifikasi bahwa kebijakan yang dilampirkan pada peran ini atau pengguna memberikan izin eksplisit untuk memanggil sumber `logs:PutSubscriptionFilter` daya tujuan lintas akun. 

   Kebijakan berikut memberikan izin untuk membuat filter langganan pada sumber daya tujuan apa pun hanya dalam satu AWS akun, akun`999999999999`:

------
#### [ JSON ]

****  

   ```
   {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
           {
               "Sid": "AllowSubscriptionFiltersOnAccountResources",
               "Effect": "Allow",
               "Action": "logs:PutSubscriptionFilter",
               "Resource": [
                   "arn:aws:logs:*:*:log-group:*",
                   "arn:aws:logs:*:123456789012:destination:*"
               ]
           }
       ]
   }
   ```

------

   Kebijakan berikut memberikan izin untuk membuat filter langganan hanya pada sumber daya tujuan tertentu yang dinamai `sampleDestination` dalam satu AWS akun, akun`123456789012`:

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "AllowSubscriptionFiltersonAccountResource",
               "Effect": "Allow",
               "Action": "logs:PutSubscriptionFilter",
               "Resource": [
                   "arn:aws:logs:*:*:log-group:*",
                   "arn:aws:logs:*:123456789012:destination:sampleDestination"
               ]
           }
       ]
   }
   ```

------

# Langkah 4: Buat filter berlangganan
<a name="CreateSubscriptionFilter"></a>

Setelah Anda membuat tujuan, akun penerima data log dapat berbagi ARN tujuan (arn:aws:logs:us-east-1:999999999999:destination:testDestination) dengan akun AWS lain sehingga mereka dapat mengirim log acara ke tujuan yang sama. Para pengguna akun pengirim ini kemudian membuat filter langganan pada grup log masing-masing berdasarkan tujuan ini. Filter langganan segera memulai aliran data log waktu nyata dari grup log yang dipilih ke tujuan yang ditentukan.

**catatan**  
Jika Anda memberikan izin untuk filter langganan ke seluruh organisasi, Anda harus menggunakan ARN dari peran IAM yang Anda buat. [Langkah 2: (Hanya jika menggunakan organisasi) Buat peran IAM](CreateSubscriptionFilter-IAMrole.md)

Dalam contoh berikut, filter langganan dibuat di akun pengiriman. filter dikaitkan dengan grup log yang berisi AWS CloudTrail peristiwa sehingga setiap aktivitas yang dicatat yang dibuat oleh AWS kredenal “Root” dikirimkan ke tujuan yang Anda buat sebelumnya. Tujuan itu merangkum aliran yang disebut "”. RecipientStream

Langkah-langkah lainnya di bagian berikut mengasumsikan bahwa Anda telah mengikuti petunjuk dalam [Mengirim CloudTrail Acara ke CloudWatch Log](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/send-cloudtrail-events-to-cloudwatch-logs.html) di *Panduan AWS CloudTrail Pengguna* dan membuat grup log yang berisi CloudTrail peristiwa Anda. Langkah-langkah ini mengasumsikan bahwa nama grup log ini adalah`CloudTrail/logs`.

Ketika Anda memasukkan perintah berikut, pastikan Anda masuk sebagai pengguna IAM atau menggunakan peran IAM yang Anda tambahkan kebijakan untuk, in. [Langkah 3: Add/validate Izin IAM untuk tujuan lintas akun](Subscription-Filter-CrossAccount-Permissions.md)

```
aws logs put-subscription-filter \
    --log-group-name "CloudTrail/logs" \
    --filter-name "RecipientStream" \
    --filter-pattern "{$.userIdentity.type = Root}" \
    --destination-arn "arn:aws:logs:region:999999999999:destination:testDestination"
```

Grup log dan tujuan harus berada di AWS Wilayah yang sama. Namun, tujuan dapat menunjuk ke AWS sumber daya seperti aliran Amazon Kinesis Data Streams yang terletak di Wilayah yang berbeda.

# Validasi alur peristiwa log
<a name="ValidateLogEventFlow"></a>

Setelah Anda membuat filter langganan, CloudWatch Log meneruskan semua peristiwa log masuk yang cocok dengan pola filter ke aliran yang dienkapsulasi dalam aliran tujuan yang disebut "”. **RecipientStream** Pemilik tujuan dapat memverifikasi bahwa ini terjadi dengan menggunakan get-shard-iterator perintah **aws kinesis untuk mengambil pecahan Amazon Kinesis** Data Streams, dan menggunakan perintah **aws kinesis get-records untuk mengambil beberapa catatan Amazon Kinesis** Data Streams:

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

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

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

**catatan**  
Anda mungkin perlu menjalankan kembali perintah get-records beberapa kali sebelum Amazon Kinesis Data Streams mulai mengembalikan data.

Anda akan melihat respons dengan larik catatan Amazon Kinesis Data Streams. Atribut data dalam catatan Amazon Kinesis Data Streams dikompresi dalam format gzip dan kemudian base64 dikodekan. 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:

```
{
    "owner": "111111111111",
    "logGroup": "CloudTrail/logs",
    "logStream": "111111111111_CloudTrail/logs_us-east-1",
    "subscriptionFilters": [
        "RecipientStream"
    ],
    "messageType": "DATA_MESSAGE",
    "logEvents": [
        {
            "id": "3195310660696698337880902507980421114328961542429EXAMPLE",
            "timestamp": 1432826855000,
            "message": "{\"eventVersion\":\"1.03\",\"userIdentity\":{\"type\":\"Root\"}"
        },
        {
            "id": "3195310660696698337880902507980421114328961542429EXAMPLE",
            "timestamp": 1432826855000,
            "message": "{\"eventVersion\":\"1.03\",\"userIdentity\":{\"type\":\"Root\"}"
        },
        {
            "id": "3195310660696698337880902507980421114328961542429EXAMPLE",
            "timestamp": 1432826855000,
            "message": "{\"eventVersion\":\"1.03\",\"userIdentity\":{\"type\":\"Root\"}"
        }
    ]
}
```

Elemen kunci dalam struktur data ini adalah sebagai berikut:

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

**messageType**  
Pesan data menggunakan tipe “DATA\$1MESSAGE”. Terkadang CloudWatch Log dapat memancarkan catatan Amazon Kinesis Data Streams dengan tipe “CONTROL\$1MESSAGE”, terutama untuk memeriksa apakah tujuan dapat dijangkau.

**logEvents**  
Data log yang sebenarnya, direpresentasikan sebagai array catatan log acara. Properti ID adalah pengenal unik untuk setiap log acara.

# Ubah keanggotaan tujuan saat runtime
<a name="ModifyDestinationMembership"></a>

Anda mungkin mengalami situasi ketika Anda harus menambahkan atau menghapus keanggotaan beberapa pengguna dari tujuan yang Anda miliki. Anda dapat menggunakan perintah `put-destination-policy` di tujuan Anda dengan kebijakan akses baru. Dalam contoh berikut, akun **111111111111** yang ditambahkan sudah sebelumnya dihentikan dari mengirim data log lagi, dan akun **222222222222** diaktifkan.

1. Ambil kebijakan yang saat ini terkait dengan **TestDestination** tujuan dan catat: **AccessPolicy**

   ```
   aws logs describe-destinations \
       --destination-name-prefix "testDestination"
   
   {
    "Destinations": [
      {
        "DestinationName": "testDestination",
        "RoleArn": "arn:aws:iam::999999999999:role/CWLtoKinesisRole",
        "DestinationArn": "arn:aws:logs:region:999999999999:destination:testDestination",
        "TargetArn": "arn:aws:kinesis:region:999999999999:stream/RecipientStream",
        "AccessPolicy": "{\"Version\": \"2012-10-17\", \"Statement\": [{\"Sid\": \"\", \"Effect\": \"Allow\", \"Principal\": {\"AWS\": \"111111111111\"}, \"Action\": \"logs:PutSubscriptionFilter\", \"Resource\": \"arn:aws:logs:region:999999999999:destination:testDestination\"}] }"
      }
    ]
   }
   ```

1. Perbarui kebijakan agar menunjukkan bahwa akun **111111111111** dihentikan, dan akun **222222222222** diaktifkan. Letakkan kebijakan ini di file **\$1/ NewAccessPolicy .json**:

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "",
               "Effect": "Allow",
               "Principal": {
                   "AWS": "222222222222"
               },
               "Action": "logs:PutSubscriptionFilter",
               "Resource": "arn:aws:logs:us-east-1:999999999999:destination:testDestination"
           }
       ]
   }
   ```

------

1. Panggilan **PutDestinationPolicy**untuk mengaitkan kebijakan yang ditentukan dalam **NewAccessPolicyfile.json** dengan tujuan:

   ```
   aws logs put-destination-policy \
   --destination-name "testDestination" \
   --access-policy file://~/NewAccessPolicy.json
   ```

   Ini pada akhirnya akan menonaktifkan log acara dari ID akun **111111111111**. Log acara dari ID akun **222222222222** mulai mengalir ke tujuan segera setelah pemilik akun **222222222222** membuat filter langganan.

# Memperbarui langganan lintas akun yang ada
<a name="Cross-Account-Log_Subscription-Update"></a>

Jika saat ini Anda memiliki langganan log lintas akun di mana akun tujuan hanya memberikan izin ke akun pengirim tertentu, dan Anda ingin memperbarui langganan ini sehingga akun tujuan memberikan akses ke semua akun di organisasi, ikuti langkah-langkah di bagian ini.

**Topics**
+ [Langkah 1: Perbarui filter berlangganan](Cross-Account-Log_Subscription-Update-filter.md)
+ [Langkah 2: Perbarui kebijakan akses tujuan yang ada](Cross-Account-Log_Subscription-Update-policy.md)

# Langkah 1: Perbarui filter berlangganan
<a name="Cross-Account-Log_Subscription-Update-filter"></a>

**catatan**  
Langkah ini diperlukan hanya untuk langganan lintas akun untuk log yang dibuat oleh layanan yang tercantum di. [Aktifkan pencatatan dari AWS layanan](AWS-logs-and-resource-policy.md) Jika Anda tidak bekerja dengan log yang dibuat oleh salah satu grup log ini, Anda dapat melompat ke[Langkah 2: Perbarui kebijakan akses tujuan yang ada](Cross-Account-Log_Subscription-Update-policy.md).

Dalam kasus tertentu, Anda harus memperbarui filter langganan di semua akun pengirim yang mengirim log ke akun tujuan. Pembaruan menambahkan peran IAM, yang CloudWatch dapat mengasumsikan dan memvalidasi bahwa akun pengirim memiliki izin untuk mengirim log ke akun penerima.

Ikuti langkah-langkah di bagian ini untuk setiap akun pengirim yang ingin Anda perbarui untuk menggunakan ID organisasi untuk izin berlangganan lintas akun.

Dalam contoh di bagian ini, dua akun, `111111111111` dan `222222222222` sudah memiliki filter berlangganan yang dibuat untuk mengirim log ke akun`999999999999`. Nilai filter langganan yang ada adalah sebagai berikut:

```
## Existing Subscription Filter parameter values
    \ --log-group-name "my-log-group-name" 
    \ --filter-name "RecipientStream" 
    \ --filter-pattern "{$.userIdentity.type = Root}" 
    \ --destination-arn "arn:aws:logs:region:999999999999:destination:testDestination"
```

Jika Anda perlu menemukan nilai parameter filter langganan saat ini, masukkan perintah berikut.

```
aws logs describe-subscription-filters 
    \ --log-group-name "my-log-group-name"
```

**Untuk memperbarui filter langganan untuk mulai menggunakan organisasi IDs untuk izin log lintas akun**

1. Buat kebijakan kepercayaan berikut dalam sebuah file`~/TrustPolicyForCWL.json`. Gunakan editor teks untuk membuat file kebijakan ini; jangan gunakan konsol IAM.

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

1. Buat peran IAM yang menggunakan kebijakan ini. Perhatikan nilai `Arn` `Arn` nilai yang dikembalikan oleh perintah, Anda akan membutuhkannya nanti dalam prosedur ini. Dalam contoh ini, kita gunakan `CWLtoSubscriptionFilterRole` untuk nama peran yang kita buat.

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

1. Buat kebijakan izin untuk menentukan tindakan yang dapat dilakukan CloudWatch Log di akun Anda.

   1. Pertama, gunakan editor teks untuk membuat kebijakan izin berikut dalam file bernama`/PermissionsForCWLSubscriptionFilter.json`.

      ```
      { 
          "Statement": [ 
              { 
                  "Effect": "Allow", 
                  "Action": "logs:PutLogEvents", 
                  "Resource": "arn:aws:logs:region:111111111111:log-group:LogGroupOnWhichSubscriptionFilterIsCreated:*" 
              } 
          ] 
      }
      ```

   1. Masukkan perintah berikut untuk mengaitkan kebijakan izin yang baru saja Anda buat dengan peran yang Anda buat di langkah 2.

      ```
      aws iam put-role-policy 
          --role-name CWLtoSubscriptionFilterRole 
          --policy-name Permissions-Policy-For-CWL-Subscription-filter 
          --policy-document file://~/PermissionsForCWLSubscriptionFilter.json
      ```

1. Masukkan perintah berikut untuk memperbarui filter langganan.

   ```
   aws logs put-subscription-filter 
       \ --log-group-name "my-log-group-name" 
       \ --filter-name "RecipientStream" 
       \ --filter-pattern "{$.userIdentity.type = Root}" 
       \ --destination-arn "arn:aws:logs:region:999999999999:destination:testDestination"
       \ --role-arn "arn:aws:iam::111111111111:role/CWLtoSubscriptionFilterRole"
   ```

# Langkah 2: Perbarui kebijakan akses tujuan yang ada
<a name="Cross-Account-Log_Subscription-Update-policy"></a>

Setelah memperbarui filter langganan di semua akun pengirim, Anda dapat memperbarui kebijakan akses tujuan di akun penerima.

Dalam contoh berikut, akun penerima adalah `999999999999` dan tujuan diberi nama`testDestination`.

Pembaruan memungkinkan semua akun yang merupakan bagian dari organisasi dengan ID `o-1234567890` untuk mengirim log ke akun penerima. Hanya akun yang memiliki filter langganan yang dibuat yang benar-benar akan mengirim log ke akun penerima.

**Untuk memperbarui kebijakan akses tujuan di akun penerima untuk mulai menggunakan ID organisasi untuk izin**

1. Di akun penerima, gunakan editor teks untuk membuat `~/AccessPolicy.json` file dengan konten berikut.

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "",
               "Effect": "Allow",
               "Principal": "*",
               "Action": "logs:PutSubscriptionFilter",
               "Resource": "arn:aws:logs:us-east-1:999999999999:destination:testDestination",
               "Condition": {
                   "StringEquals": {
                       "aws:PrincipalOrgID": [
                           "o-1234567890"
                       ]
                   }
               }
           }
       ]
   }
   ```

------

1. Masukkan perintah berikut untuk melampirkan kebijakan yang baru saja Anda buat ke tujuan yang ada. Untuk memperbarui tujuan agar menggunakan kebijakan akses dengan ID organisasi, bukan kebijakan akses yang mencantumkan AWS akun tertentu IDs, sertakan `force` parameternya.
**Awas**  
Jika Anda bekerja dengan log yang dikirim oleh AWS layanan yang terdaftar di[Aktifkan pencatatan dari AWS layanan](AWS-logs-and-resource-policy.md), maka sebelum melakukan langkah ini, Anda harus terlebih dahulu memperbarui filter langganan di semua akun pengirim seperti yang dijelaskan di[Langkah 1: Perbarui filter berlangganan](Cross-Account-Log_Subscription-Update-filter.md).

   ```
   aws logs put-destination-policy 
       \ --destination-name "testDestination" 
       \ --access-policy file://~/AccessPolicy.json
       \ --force
   ```

# Berbagi data log lintas wilayah lintas akun menggunakan Firehose
<a name="CrossAccountSubscriptions-Firehose"></a>

Untuk berbagi data log lintas akun, Anda perlu membuat pengirim dan penerima data log:
+ **Pengirim data log** —mendapatkan informasi tujuan dari penerima dan memberi tahu CloudWatch Log bahwa ia siap untuk mengirim peristiwa lognya ke tujuan yang ditentukan. Dalam prosedur di bagian lainnya, pengirim data log ditampilkan dengan nomor AWS akun fiksi 111111111111.
+ **Penerima data log** —menyiapkan tujuan yang merangkum aliran Amazon Kinesis Data Streams dan CloudWatch memberi tahu Log bahwa penerima ingin menerima data log. Penerima kemudian membagikan informasi tentang tujuan ini dengan pengirim. Dalam prosedur di bagian lainnya, penerima data log ditampilkan dengan nomor AWS akun fiksi 22222222222222.

Contoh di bagian ini menggunakan aliran pengiriman Firehose dengan penyimpanan Amazon S3. Anda juga dapat mengatur aliran pengiriman Firehose dengan pengaturan berbeda. Untuk informasi selengkapnya, lihat [Membuat Aliran Pengiriman Firehose](https://docs.aws.amazon.com/firehose/latest/dev/basic-create.html).

**catatan**  
Grup log dan tujuan harus berada di AWS Wilayah yang sama. Namun, AWS sumber daya yang ditunjuk tujuan dapat ditemukan di Wilayah yang berbeda.

**catatan**  
 Filter langganan Firehose untuk ***akun yang sama*** dan aliran pengiriman ***lintas wilayah*** didukung. 

**Topics**
+ [Langkah 1: Buat aliran pengiriman Firehose](CreateFirehoseStream.md)
+ [Langkah 2: Buat tujuan](CreateFirehoseStreamDestination.md)
+ [Langkah 3: Add/validate Izin IAM untuk tujuan lintas akun](Subscription-Filter-CrossAccount-Permissions-Firehose.md)
+ [Langkah 4: Buat filter berlangganan](CreateSubscriptionFilterFirehose.md)
+ [Memvalidasi alur peristiwa log](ValidateLogEventFlowFirehose.md)
+ [Memodifikasi keanggotaan tujuan saat runtime](ModifyDestinationMembershipFirehose.md)

# Langkah 1: Buat aliran pengiriman Firehose
<a name="CreateFirehoseStream"></a>

**penting**  
 Sebelum Anda menyelesaikan langkah-langkah berikut, Anda harus menggunakan kebijakan akses, sehingga Firehose dapat mengakses bucket Amazon S3 Anda. Untuk informasi selengkapnya, lihat [Mengontrol Akses](https://docs.aws.amazon.com/firehose/latest/dev/controlling-access.html#using-iam-s3) di Panduan *Pengembang Amazon Data Firehose*.   
 Semua langkah di bagian ini (Langkah 1) harus dilakukan di akun penerima data log.   
 US East (N. Virginia) digunakan dalam contoh perintah berikut. Ganti Wilayah ini dengan Wilayah yang benar untuk penerapan Anda. 

**Untuk membuat aliran pengiriman Firehose yang akan digunakan sebagai tujuan**

1. Buat bucket Amazon S3:

   ```
   aws s3api create-bucket --bucket amzn-s3-demo-bucket --create-bucket-configuration LocationConstraint=us-east-1
   ```

1. Buat peran IAM yang memberikan izin Firehose untuk memasukkan data ke dalam bucket.

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

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

   1. Buat IAM role dengan menentukan file kebijakan kepercayaan yang baru saja Anda buat.

      ```
      aws iam create-role \ 
          --role-name FirehosetoS3Role \ 
          --assume-role-policy-document file://~/TrustPolicyForFirehose.json
      ```

   1. Output perintah ini akan terlihat serupa dengan yang berikut ini. Catat nama peran dan ARN peran.

      ```
      {
          "Role": {
              "Path": "/",
              "RoleName": "FirehosetoS3Role",
              "RoleId": "AROAR3BXASEKW7K635M53",
              "Arn": "arn:aws:iam::222222222222:role/FirehosetoS3Role",
              "CreateDate": "2021-02-02T07:53:10+00:00",
              "AssumeRolePolicyDocument": {
                  "Statement": {
                      "Effect": "Allow",
                      "Principal": {
                          "Service": "firehose.amazonaws.com"
                      },
                      "Action": "sts:AssumeRole",
                      "Condition": {
                          "StringEquals": {
                              "sts:ExternalId": "222222222222"
                          }
                      }
                  }
              }
          }
      }
      ```

1. Buat kebijakan izin untuk menentukan tindakan yang dapat dilakukan Firehose di akun Anda.

   1. Pertama, gunakan editor teks untuk membuat kebijakan izin berikut dalam file bernama`~/PermissionsForFirehose.json`. Bergantung pada kasus penggunaan Anda, Anda mungkin perlu menambahkan lebih banyak izin ke file ini.

      ```
      {
          "Statement": [{
              "Effect": "Allow",
              "Action": [
                  "s3:PutObject",
                  "s3:PutObjectAcl",
                  "s3:ListBucket"
              ],
              "Resource": [
                  "arn:aws:s3:::amzn-s3-demo-bucket",
                  "arn:aws:s3:::amzn-s3-demo-bucket/*"
              ]
          }]
      }
      ```

   1. Masukkan perintah berikut untuk mengaitkan kebijakan izin yang baru saja Anda buat dengan peran IAM.

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

1. Masukkan perintah berikut untuk membuat aliran pengiriman Firehose. Ganti *my-role-arn* dan *amzn-s3-demo-bucket2-arn* dengan nilai yang benar untuk penerapan Anda.

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

   Outputnya akan serupa dengan yang berikut ini:

   ```
   {
       "DeliveryStreamARN": "arn:aws:firehose:us-east-1:222222222222:deliverystream/my-delivery-stream"
   }
   ```

# Langkah 2: Buat tujuan
<a name="CreateFirehoseStreamDestination"></a>

**penting**  
Semua langkah dalam prosedur ini harus dilakukan di akun penerima data log.

Saat tujuan dibuat, CloudWatch Log mengirimkan pesan pengujian ke tujuan atas nama akun penerima. Saat filter langganan aktif nanti, CloudWatch Log mengirimkan peristiwa log ke tujuan atas nama akun sumber.

**Untuk membuat tujuan**

1. Tunggu hingga aliran Firehose yang Anda buat [Langkah 1: Buat aliran pengiriman Firehose](CreateFirehoseStream.md) menjadi aktif. Anda dapat menggunakan perintah berikut untuk memeriksa **StreamDescription. StreamStatus**properti.

   ```
   aws firehose describe-delivery-stream --delivery-stream-name "my-delivery-stream"
   ```

   Selain itu, perhatikan **DeliveryStreamDescription. DeliveryStreamNilai ARN**, karena Anda harus menggunakannya di langkah selanjutnya. Contoh output dari perintah ini:

   ```
   {
       "DeliveryStreamDescription": {
           "DeliveryStreamName": "my-delivery-stream",
           "DeliveryStreamARN": "arn:aws:firehose:us-east-1:222222222222:deliverystream/my-delivery-stream",
           "DeliveryStreamStatus": "ACTIVE",
           "DeliveryStreamEncryptionConfiguration": {
               "Status": "DISABLED"
           },
           "DeliveryStreamType": "DirectPut",
           "VersionId": "1",
           "CreateTimestamp": "2021-02-01T23:59:15.567000-08:00",
           "Destinations": [
               {
                   "DestinationId": "destinationId-000000000001",
                   "S3DestinationDescription": {
                       "RoleARN": "arn:aws:iam::222222222222:role/FirehosetoS3Role",
                       "BucketARN": "arn:aws:s3:::amzn-s3-demo-bucket",
                       "BufferingHints": {
                           "SizeInMBs": 5,
                           "IntervalInSeconds": 300
                       },
                       "CompressionFormat": "UNCOMPRESSED",
                       "EncryptionConfiguration": {
                           "NoEncryptionConfig": "NoEncryption"
                       },
                       "CloudWatchLoggingOptions": {
                           "Enabled": false
                       }
                   },
                   "ExtendedS3DestinationDescription": {
                       "RoleARN": "arn:aws:iam::222222222222:role/FirehosetoS3Role",
                       "BucketARN": "arn:aws:s3:::amzn-s3-demo-bucket",
                       "BufferingHints": {
                           "SizeInMBs": 5,
                           "IntervalInSeconds": 300
                       },
                       "CompressionFormat": "UNCOMPRESSED",
                       "EncryptionConfiguration": {
                           "NoEncryptionConfig": "NoEncryption"
                       },
                       "CloudWatchLoggingOptions": {
                           "Enabled": false
                       },
                       "S3BackupMode": "Disabled"
                   }
               }
           ],
           "HasMoreDestinations": false
       }
   }
   ```

   Mungkin diperlukan satu atau dua menit bagi aliran pengiriman Anda untuk muncul dalam keadaan aktif.

1. Saat aliran pengiriman aktif, buat peran IAM yang akan memberikan izin kepada CloudWatch Log untuk memasukkan data ke aliran Firehose Anda. Pertama, Anda harus membuat kebijakan kepercayaan dalam file **\$1/ TrustPolicyFor CWL.json**. Gunakan editor teks untuk membuat kebijakan ini. Untuk informasi selengkapnya tentang titik akhir CloudWatch Log, lihat [titik akhir dan CloudWatch kuota Amazon Logs](https://docs.aws.amazon.com/general/latest/gr/cwl_region.html). 

   Kebijakan ini mencakup kunci konteks kondisi `aws:SourceArn` global yang menentukan `sourceAccountId` untuk membantu mencegah masalah keamanan wakil yang membingungkan. Jika Anda belum mengetahui ID akun sumber pada panggilan pertama, kami sarankan Anda memasukkan ARN tujuan di bidang ARN sumber. Dalam panggilan berikutnya, Anda harus mengatur ARN sumber menjadi ARN sumber sebenarnya yang Anda kumpulkan dari panggilan pertama. Untuk informasi selengkapnya, lihat [Pencegahan Deputi Bingung](Subscriptions-confused-deputy.md). 

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

1. Gunakan perintah **aws iam create-role** untuk membuat IAM role, dengan menentukan file kebijakan kepercayaan yang baru saja Anda buat. 

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

   Berikut ini adalah contoh output. Perhatikan nilai `Role.Arn` yang dikembalikan, karena Anda akan perlu menggunakannya di langkah berikutnya.

   ```
   {
       "Role": {
           "Path": "/",
           "RoleName": "CWLtoKinesisFirehoseRole",
           "RoleId": "AROAR3BXASEKYJYWF243H",
           "Arn": "arn:aws:iam::222222222222:role/CWLtoKinesisFirehoseRole",
           "CreateDate": "2021-02-02T08:10:43+00:00",
           "AssumeRolePolicyDocument": {
               "Statement": {
                   "Effect": "Allow",
                   "Principal": {
                       "Service": "logs.region.amazonaws.com"
                   },
                   "Action": "sts:AssumeRole",
                   "Condition": {
                       "StringLike": {
                           "aws:SourceArn": [
                               "arn:aws:logs:region:sourceAccountId:*",
                               "arn:aws:logs:region:recipientAccountId:*"
                           ]
                       }
                   }
               }
           }
       }
   }
   ```

1. Buat kebijakan izin untuk menentukan tindakan yang dapat dilakukan CloudWatch Log di akun Anda. Pertama, gunakan editor teks untuk membuat kebijakan izin dalam file **\$1/ PermissionsFor** CWL.json:

   ```
   {
       "Statement":[
         {
           "Effect":"Allow",
           "Action":["firehose:*"],
           "Resource":["arn:aws:firehose:region:222222222222:*"]
         }
       ]
   }
   ```

1. Kaitkan kebijakan izin dengan peran tersebut dengan memasukkan perintah berikut:

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

1. Setelah aliran pengiriman Firehose dalam status aktif dan Anda telah membuat peran IAM, Anda dapat membuat tujuan Log. CloudWatch 

   1. Langkah ini tidak akan mengaitkan kebijakan akses dengan tujuan Anda dan hanya merupakan langkah pertama dari dua langkah yang akan menyelesaikan pembuatan tujuan. Catat ARN tujuan baru yang dikembalikan di payload, karena Anda akan menggunakan ini sebagai langkah `destination.arn` selanjutnya.

      ```
      aws logs put-destination \                                                       
          --destination-name "testFirehoseDestination" \
          --target-arn "arn:aws:firehose:us-east-1:222222222222:deliverystream/my-delivery-stream" \
          --role-arn "arn:aws:iam::222222222222:role/CWLtoKinesisFirehoseRole"
      
      {
          "destination": {
              "destinationName": "testFirehoseDestination",
              "targetArn": "arn:aws:firehose:us-east-1:222222222222:deliverystream/my-delivery-stream",
              "roleArn": "arn:aws:iam::222222222222:role/CWLtoKinesisFirehoseRole",
              "arn": "arn:aws:logs:us-east-1:222222222222:destination:testFirehoseDestination"}
      }
      ```

   1. Setelah langkah sebelumnya selesai, dalam akun penerima data log (222222222222), kaitkan kebijakan akses dengan tujuan.

      Kebijakan ini memungkinkan akun pengirim data log (11111111111111) untuk mengakses tujuan hanya di akun penerima data log (222222222222). Anda dapat menggunakan editor teks untuk meletakkan kebijakan ini di file **\$1/ AccessPolicy .json**:

------
#### [ JSON ]

****  

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Statement" : [
          {
            "Sid" : "",
            "Effect" : "Allow",
            "Principal" : {
              "AWS" : "111111111111"
            },
            "Action" : "logs:PutSubscriptionFilter",
            "Resource" : "arn:aws:logs:us-east-1:222222222222:destination:testFirehoseDestination"
          }
        ]
      }
      ```

------

   1. Ini membuat kebijakan yang menentukan siapa yang memiliki akses menulis ke tujuan. Kebijakan ini harus menentukan PutSubscriptionFilter tindakan **log:** untuk mengakses tujuan. Pengguna lintas akun akan menggunakan **PutSubscriptionFilter**tindakan untuk mengirim peristiwa log ke tujuan:

      ```
      aws logs put-destination-policy \
          --destination-name "testFirehoseDestination" \
          --access-policy file://~/AccessPolicy.json
      ```

# Langkah 3: Add/validate Izin IAM untuk tujuan lintas akun
<a name="Subscription-Filter-CrossAccount-Permissions-Firehose"></a>

Menurut logika evaluasi kebijakan AWS lintas akun, untuk mengakses sumber daya lintas akun (seperti aliran Kinesis atau Firehose yang digunakan sebagai tujuan filter langganan), Anda harus memiliki kebijakan berbasis identitas di akun pengirim yang menyediakan akses eksplisit ke sumber tujuan lintas akun. Untuk informasi selengkapnya tentang logika evaluasi kebijakan, lihat [Logika evaluasi kebijakan lintas akun](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic-cross-account.html).

Anda dapat melampirkan kebijakan berbasis identitas ke peran IAM atau pengguna IAM yang Anda gunakan untuk membuat filter langganan. Kebijakan ini harus ada di akun pengiriman. Jika Anda menggunakan peran Administrator untuk membuat filter langganan, Anda dapat melewati langkah ini dan melanjutkan ke[Langkah 4: Buat filter berlangganan](CreateSubscriptionFilter.md).

**Untuk menambah atau memvalidasi izin IAM yang diperlukan untuk lintas akun**

1. Masukkan perintah berikut untuk memeriksa peran IAM atau pengguna IAM mana yang digunakan untuk menjalankan perintah AWS log.

   ```
   aws sts get-caller-identity
   ```

   Perintah tersebut mengembalikan output serupa dengan berikut ini:

   ```
   {
   "UserId": "User ID",
   "Account": "sending account id",
   "Arn": "arn:aws:sending account id:role/user:RoleName/UserName"
   }
   ```

   Catat nilai yang diwakili oleh *RoleName* atau*UserName*.

1.  Konsol Manajemen AWS Masuk ke akun pengiriman dan cari kebijakan terlampir dengan peran IAM atau pengguna IAM yang dikembalikan dalam output perintah yang Anda masukkan pada langkah 1.

1. Verifikasi bahwa kebijakan yang dilampirkan pada peran ini atau pengguna memberikan izin eksplisit untuk memanggil sumber `logs:PutSubscriptionFilter` daya tujuan lintas akun.

   Kebijakan berikut memberikan izin untuk membuat filter langganan pada sumber daya tujuan apa pun hanya dalam satu AWS akun, akun`999999999999`:

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "AllowSubscriptionFiltersOnAnyResourceInOneSpecificAccount",
               "Effect": "Allow",
               "Action": "logs:PutSubscriptionFilter",
               "Resource": [
                   "arn:aws:logs:*:*:log-group:*",
                   "arn:aws:logs:*:123456789012:destination:*"
               ]
           }
       ]
   }
   ```

------

   Kebijakan berikut memberikan izin untuk membuat filter langganan hanya pada sumber daya tujuan tertentu yang dinamai `sampleDestination` dalam satu AWS akun, akun`123456789012`:

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
           "Sid": "AllowSubscriptionFiltersOnSpecificResource",
               "Effect": "Allow",
               "Action": "logs:PutSubscriptionFilter",
               "Resource": [
                   "arn:aws:logs:*:*:log-group:*",
                   "arn:aws:logs:*:123456789012:destination:amzn-s3-demo-bucket"
               ]
           }
       ]
   }
   ```

------

# Langkah 4: Buat filter berlangganan
<a name="CreateSubscriptionFilterFirehose"></a>

Beralihlah ke akun pengiriman, yaitu 111111111111 dalam contoh ini. Sekarang Anda akan membuat filter langganan di akun pengirim. Dalam contoh ini, filter dikaitkan dengan grup log yang berisi AWS CloudTrail peristiwa sehingga setiap aktivitas yang dicatat yang dibuat oleh AWS kredensyal “Root” dikirimkan ke tujuan yang sebelumnya Anda buat. Untuk informasi selengkapnya tentang cara mengirim AWS CloudTrail peristiwa ke CloudWatch Log, lihat [Mengirim CloudTrail Acara ke CloudWatch Log](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/send-cloudtrail-events-to-cloudwatch-logs.html) di *Panduan AWS CloudTrail Pengguna*.

Ketika Anda memasukkan perintah berikut, pastikan Anda masuk sebagai pengguna IAM atau menggunakan peran IAM yang Anda tambahkan kebijakan untuk, in. [Langkah 3: Add/validate Izin IAM untuk tujuan lintas akun](Subscription-Filter-CrossAccount-Permissions-Firehose.md)

```
aws logs put-subscription-filter \
    --log-group-name "aws-cloudtrail-logs-111111111111-300a971e" \                   
    --filter-name "firehose_test" \
    --filter-pattern "{$.userIdentity.type = AssumedRole}" \
    --destination-arn "arn:aws:logs:us-east-1:222222222222:destination:testFirehoseDestination"
```

Grup log dan tujuan harus berada di AWS Wilayah yang sama. Namun, tujuan dapat menunjuk ke AWS sumber daya seperti aliran Firehose yang terletak di Wilayah yang berbeda.

# Memvalidasi alur peristiwa log
<a name="ValidateLogEventFlowFirehose"></a>

Setelah Anda membuat filter langganan, CloudWatch Log meneruskan semua peristiwa log masuk yang cocok dengan pola filter ke aliran pengiriman Firehose. Data mulai muncul di bucket Amazon S3 Anda berdasarkan interval buffer waktu yang disetel pada aliran pengiriman Firehose. Setelah waktu tertentu berlalu, Anda dapat memverifikasi data dengan memeriksa bucket Amazon S3. Untuk memeriksa bucket, masukkan perintah berikut:

```
aws s3api list-objects --bucket 'amzn-s3-demo-bucket' 
```

Output perintah tersebut akan serupa dengan yang berikut ini:

```
{
    "Contents": [
        {
            "Key": "2021/02/02/08/my-delivery-stream-1-2021-02-02-08-55-24-5e6dc317-071b-45ba-a9d3-4805ba39c2ba",
            "LastModified": "2021-02-02T09:00:26+00:00",
            "ETag": "\"EXAMPLEa817fb88fc770b81c8f990d\"",
            "Size": 198,
            "StorageClass": "STANDARD",
            "Owner": {
                "DisplayName": "firehose+2test",
                "ID": "EXAMPLE27fd05889c665d2636218451970ef79400e3d2aecca3adb1930042e0"
            }
        }
    ]
}
```

Anda kemudian dapat mengambil objek tertentu dari bucket dengan memasukkan perintah berikut. Ganti nilai `key` dengan nilai yang Anda temukan di perintah sebelumnya.

```
aws s3api get-object --bucket 'amzn-s3-demo-bucket' --key '2021/02/02/08/my-delivery-stream-1-2021-02-02-08-55-24-5e6dc317-071b-45ba-a9d3-4805ba39c2ba' testfile.gz
```

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

Linux:

```
zcat testfile.gz
```

macOS:

```
zcat <testfile.gz
```

# Memodifikasi keanggotaan tujuan saat runtime
<a name="ModifyDestinationMembershipFirehose"></a>

Anda mungkin mengalami situasi ketika Anda harus menambahkan atau menghapus pengirim log dari tujuan yang Anda miliki. Anda dapat menggunakan **PutDestinationPolicy**tindakan di tujuan Anda dengan kebijakan akses baru. Dalam contoh berikut, akun **111111111111** yang ditambahkan sudah sebelumnya dihentikan dari mengirim data log lagi, dan akun **333333333333** diaktifkan.

1. Ambil kebijakan yang saat ini terkait dengan **TestDestination** tujuan dan catat: **AccessPolicy**

   ```
   aws logs describe-destinations \
       --destination-name-prefix "testFirehoseDestination"
   
   {
       "destinations": [
           {
               "destinationName": "testFirehoseDestination",
               "targetArn": "arn:aws:firehose:us-east-1:222222222222:deliverystream/my-delivery-stream",
               "roleArn": "arn:aws:iam:: 222222222222:role/CWLtoKinesisFirehoseRole",
               "accessPolicy": "{\n  \"Version\" : \"2012-10-17\",\n  \"Statement\" : [\n    {\n      \"Sid\" : \"\",\n      \"Effect\" : \"Allow\",\n      \"Principal\" : {\n        \"AWS\" : \"111111111111 \"\n      },\n      \"Action\" : \"logs:PutSubscriptionFilter\",\n      \"Resource\" : \"arn:aws:logs:us-east-1:222222222222:destination:testFirehoseDestination\"\n    }\n  ]\n}\n\n",
               "arn": "arn:aws:logs:us-east-1: 222222222222:destination:testFirehoseDestination",
               "creationTime": 1612256124430
           }
       ]
   }
   ```

1. Perbarui kebijakan agar menunjukkan bahwa akun **111111111111** dihentikan, dan akun **333333333333** diaktifkan. Letakkan kebijakan ini di file **\$1/ NewAccessPolicy .json**:

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement" : [
       {
         "Sid" : "",
         "Effect" : "Allow",
         "Principal" : {
           "AWS" : "333333333333 "
         },
         "Action" : "logs:PutSubscriptionFilter",
         "Resource" : "arn:aws:logs:us-east-1:222222222222:destination:testFirehoseDestination"
       }
     ]
   }
   ```

------

1. Gunakan perintah berikut untuk mengaitkan kebijakan yang ditentukan dalam **NewAccessPolicyfile.json** dengan tujuan:

   ```
   aws logs put-destination-policy \
       --destination-name "testFirehoseDestination" \                                                                              
       --access-policy file://~/NewAccessPolicy.json
   ```

   Ini akhirnya akan menonaktifkan log acara dari ID akun **111111111111**. Log acara dari ID akun **333333333333** mulai mengalir ke tujuan segera setelah pemilik akun **333333333333** membuat filter langganan.

# Langganan tingkat akun lintas wilayah lintas akun menggunakan Amazon Kinesis Data Streams
<a name="CrossAccountSubscriptions-Kinesis-Account"></a>

Saat membuat langganan lintas akun, Anda dapat menentukan satu akun atau organisasi untuk menjadi pengirim. Jika Anda menentukan organisasi, maka prosedur ini memungkinkan semua akun di organisasi untuk mengirim log ke akun penerima.

Untuk berbagi data log lintas akun, Anda perlu membuat pengirim dan penerima data log:
+ **Pengirim data log** —mendapatkan informasi tujuan dari penerima dan memberi tahu CloudWatch Log bahwa Log siap mengirim peristiwa lognya ke tujuan yang ditentukan. Dalam prosedur di bagian lainnya, pengirim data log ditampilkan dengan nomor AWS akun fiksi 111111111111.

  Jika Anda akan memiliki beberapa akun dalam satu organisasi yang mengirim log ke satu akun penerima, Anda dapat membuat kebijakan yang memberikan izin kepada semua akun di organisasi untuk mengirim log ke akun penerima. Anda masih harus menyiapkan filter langganan terpisah untuk setiap akun pengirim.
+ **Penerima data log** —menyiapkan tujuan yang merangkum aliran Amazon Kinesis Data Streams dan CloudWatch memberi tahu Log bahwa penerima ingin menerima data log. Penerima kemudian membagikan informasi tentang tujuan ini dengan pengirim. Dalam prosedur di bagian lainnya, penerima data log ditampilkan dengan nomor AWS akun fiksi 999999999999.

Untuk mulai menerima peristiwa log dari pengguna lintas akun, penerima data log terlebih dahulu membuat tujuan CloudWatch Log. Setiap tujuan terdiri atas elemen kunci berikut:

**Nama tujuan**  
Nama tujuan yang ingin Anda buat.

**ARN Target**  
Nama Sumber Daya Amazon (ARN) dari AWS sumber daya yang ingin Anda gunakan sebagai tujuan umpan berlangganan.

**Peran ARN**  
Peran AWS Identity and Access Management (IAM) yang memberikan CloudWatch Log izin yang diperlukan untuk memasukkan data ke aliran yang dipilih.

**Kebijakan akses**  
Dokumen kebijakan IAM (dalam format JSON, ditulis menggunakan tata bahasa kebijakan IAM) yang mengatur set pengguna yang diizinkan untuk menulis ke tujuan Anda.

**catatan**  
Grup log dan tujuan harus berada di AWS Wilayah yang sama. Namun, AWS sumber daya yang ditunjuk tujuan dapat ditemukan di Wilayah yang berbeda. Dalam contoh di bagian berikut, semua sumber daya khusus Wilayah dibuat di US East (N. Virginia).

**Topics**
+ [Menyiapkan langganan lintas akun baru](Cross-Account-Log_Subscription-New-Account.md)
+ [Memperbarui langganan lintas akun yang ada](Cross-Account-Log_Subscription-Update-Account.md)

# Menyiapkan langganan lintas akun baru
<a name="Cross-Account-Log_Subscription-New-Account"></a>

Ikuti langkah-langkah di bagian ini untuk menyiapkan langganan log lintas akun baru.

**Topics**
+ [Langkah 1: Buat tujuan](CreateDestination-Account.md)
+ [Langkah 2: (Hanya jika menggunakan organisasi) Buat peran IAM](CreateSubscriptionFilter-IAMrole-Account.md)
+ [Langkah 3: Buat kebijakan filter langganan tingkat akun](CreateSubscriptionFilter-Account.md)
+ [Validasi alur peristiwa log](ValidateLogEventFlow-Account.md)
+ [Ubah keanggotaan tujuan saat runtime](ModifyDestinationMembership-Account.md)

# Langkah 1: Buat tujuan
<a name="CreateDestination-Account"></a>

**penting**  
Semua langkah dalam prosedur ini harus dilakukan di akun penerima data log.

Untuk contoh ini, akun penerima data log memiliki ID akun 999999999999, sedangkan ID AWS akun pengirim AWS data log adalah 111111111111.

 Contoh ini membuat tujuan menggunakan aliran Amazon Kinesis Data RecipientStream Streams yang disebut, dan peran CloudWatch yang memungkinkan Log untuk menulis data ke sana. 

Saat tujuan dibuat, CloudWatch Log mengirimkan pesan pengujian ke tujuan atas nama akun penerima. Saat filter langganan aktif nanti, CloudWatch Log mengirimkan peristiwa log ke tujuan atas nama akun sumber.

**Untuk membuat tujuan**

1. Di akun penerima, buat aliran tujuan di Amazon Kinesis Data Streams. Di jendela perintah, ketik:

   ```
   aws kinesis create-stream --stream-name "RecipientStream" --shard-count 1
   ```

1. Tunggu hingga streaming menjadi aktif. **Anda dapat menggunakan perintah **aws kinesis describe-stream** untuk memeriksa. StreamDescription StreamStatus**properti. Selain itu, perhatikan **StreamDescriptionnilai.streaMarn** karena Anda akan meneruskannya ke CloudWatch Log nanti:

   ```
   aws kinesis describe-stream --stream-name "RecipientStream"
   {
     "StreamDescription": {
       "StreamStatus": "ACTIVE",
       "StreamName": "RecipientStream",
       "StreamARN": "arn:aws:kinesis:us-east-1:999999999999:stream/RecipientStream",
       "Shards": [
         {
           "ShardId": "shardId-000000000000",
           "HashKeyRange": {
             "EndingHashKey": "34028236692093846346337460743176EXAMPLE",
             "StartingHashKey": "0"
           },
           "SequenceNumberRange": {
             "StartingSequenceNumber": "4955113521868881845667950383198145878459135270218EXAMPLE"
           }
         }
       ]
     }
   }
   ```

   Mungkin diperlukan satu atau dua menit bagi pengaliran Anda untuk muncul dalam keadaan aktif.

1. Buat peran IAM yang memberikan izin kepada CloudWatch Log untuk memasukkan data ke aliran Anda. Pertama, Anda harus membuat kebijakan kepercayaan dalam file **\$1/ TrustPolicyFor CWL.json**. Gunakan editor teks untuk membuat file kebijakan ini, jangan menggunakan konsol IAM.

   Kebijakan ini mencakup kunci konteks kondisi `aws:SourceArn` global yang menentukan `sourceAccountId` untuk membantu mencegah masalah keamanan wakil yang membingungkan. Jika Anda belum mengetahui ID akun sumber pada panggilan pertama, kami sarankan Anda memasukkan ARN tujuan di bidang ARN sumber. Dalam panggilan berikutnya, Anda harus mengatur ARN sumber menjadi ARN sumber sebenarnya yang Anda kumpulkan dari panggilan pertama. Untuk informasi selengkapnya, lihat [Pencegahan Deputi Bingung](Subscriptions-confused-deputy.md). 

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

1. Gunakan perintah **aws iam create-role** untuk membuat IAM role, dengan menentukan file kebijakan kepercayaan. Perhatikan nilai Role.Arn yang dikembalikan karena itu juga akan diteruskan ke Log nanti: CloudWatch 

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

1. Buat kebijakan izin untuk menentukan tindakan yang dapat dilakukan CloudWatch Log di akun Anda. Pertama, gunakan editor teks untuk membuat kebijakan izin dalam file **\$1/ PermissionsFor** CWL.json:

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

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

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

1. Setelah aliran dalam keadaan aktif dan Anda telah membuat peran IAM, Anda dapat membuat tujuan CloudWatch Log.

   1. Langkah ini tidak mengaitkan kebijakan akses dengan tujuan Anda dan hanya langkah pertama dari dua langkah yang menyelesaikan pembuatan tujuan. Catat **DestinationArn**yang dikembalikan dalam muatan:

      ```
      aws logs put-destination \
          --destination-name "testDestination" \
          --target-arn "arn:aws:kinesis:region:999999999999:stream/RecipientStream" \
          --role-arn "arn:aws:iam::999999999999:role/CWLtoKinesisRole"
      
      {
        "DestinationName" : "testDestination",
        "RoleArn" : "arn:aws:iam::999999999999:role/CWLtoKinesisRole",
        "DestinationArn" : "arn:aws:logs:us-east-1:999999999999:destination:testDestination",
        "TargetArn" : "arn:aws:kinesis:us-east-1:999999999999:stream/RecipientStream"
      }
      ```

   1. Setelah langkah 7a selesai, di akun penerima data log, kaitkan kebijakan akses dengan tujuan. Kebijakan ini harus menentukan PutSubscriptionFilter tindakan **log:** dan memberikan izin ke akun pengirim untuk mengakses tujuan.

      Kebijakan memberikan izin ke AWS akun yang mengirim log. Anda dapat menentukan hanya satu akun ini dalam kebijakan, atau jika akun pengirim adalah anggota organisasi, kebijakan dapat menentukan ID organisasi organisasi. Dengan cara ini, Anda dapat membuat hanya satu kebijakan untuk mengizinkan beberapa akun dalam satu organisasi mengirim log ke akun tujuan ini.

      Gunakan editor teks untuk membuat file bernama `~/AccessPolicy.json` dengan salah satu pernyataan kebijakan berikut.

      Kebijakan contoh pertama ini memungkinkan semua akun di organisasi yang memiliki ID `o-1234567890` untuk mengirim log ke akun penerima.

------
#### [ JSON ]

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Sid": "",
                  "Effect": "Allow",
                  "Principal": "*",
                  "Action": [
                      "logs:PutSubscriptionFilter",
                      "logs:PutAccountPolicy"
                  ],
                  "Resource": "arn:aws:logs:us-east-1:999999999999:destination:testDestination",
                  "Condition": {
                      "StringEquals": {
                          "aws:PrincipalOrgID": [
                              "o-1234567890"
                          ]
                      }
                  }
              }
          ]
      }
      ```

------

      Contoh berikutnya ini memungkinkan hanya akun pengirim data log (111111111111) untuk mengirim log ke akun penerima data log.

------
#### [ JSON ]

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Sid": "",
                  "Effect": "Allow",
                  "Principal": {
                      "AWS": "111111111111"
                  },
                  "Action": [
                      "logs:PutSubscriptionFilter",
                      "logs:PutAccountPolicy"
                  ],
                  "Resource": "arn:aws:logs:us-east-1:999999999999:destination:testDestination"
              }
          ]
      }
      ```

------

   1. Lampirkan kebijakan yang Anda buat pada langkah sebelumnya ke tujuan.

      ```
      aws logs put-destination-policy \
          --destination-name "testDestination" \
          --access-policy file://~/AccessPolicy.json
      ```

      Kebijakan akses ini memungkinkan pengguna di AWS Akun dengan ID 111111111111 untuk memanggil tujuan dengan ARN arn:aws:logs **PutSubscriptionFilter**::999999999999:destination:testDestination. *region* Upaya pengguna lain untuk menelepon PutSubscriptionFilter terhadap tujuan ini akan ditolak.

      Untuk memvalidasi hak istimewa pengguna berdasarkan kebijakan akses, lihat [Menggunakan Validator Kebijakan](https://docs.aws.amazon.com/IAM/latest/UserGuide/policies_policy-validator.html) dalam *Panduan Pengguna IAM*.

Setelah selesai, jika Anda menggunakan AWS Organizations izin lintas akun, ikuti langkah-langkahnya. [Langkah 2: (Hanya jika menggunakan organisasi) Buat peran IAM](CreateSubscriptionFilter-IAMrole-Account.md) Jika Anda memberikan izin langsung ke akun lain alih-alih menggunakan Organizations, Anda dapat melewati langkah itu dan melanjutkan ke. [Langkah 3: Buat kebijakan filter langganan tingkat akun](CreateSubscriptionFilter-Account.md)

# Langkah 2: (Hanya jika menggunakan organisasi) Buat peran IAM
<a name="CreateSubscriptionFilter-IAMrole-Account"></a>

Di bagian sebelumnya, jika Anda membuat tujuan menggunakan kebijakan akses yang memberikan izin kepada organisasi tempat akun `111111111111` berada, alih-alih memberikan izin langsung ke akun`111111111111`, ikuti langkah-langkah di bagian ini. Jika tidak, Anda dapat melompat ke[Langkah 3: Buat kebijakan filter langganan tingkat akun](CreateSubscriptionFilter-Account.md).

Langkah-langkah di bagian ini membuat peran IAM, yang CloudWatch dapat mengasumsikan dan memvalidasi apakah akun pengirim memiliki izin untuk membuat filter langganan terhadap tujuan penerima. 

Lakukan langkah-langkah di bagian ini di akun pengirim. Peran harus ada di akun pengirim, dan Anda menentukan ARN peran ini dalam filter berlangganan. Dalam contoh ini, akun pengirim adalah`111111111111`.

**Untuk membuat peran IAM yang diperlukan untuk langganan log lintas akun menggunakan AWS Organizations**

1. Buat kebijakan kepercayaan berikut dalam sebuah file`/TrustPolicyForCWLSubscriptionFilter.json`. Gunakan editor teks untuk membuat file kebijakan ini; jangan gunakan konsol IAM.

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

1. Buat peran IAM yang menggunakan kebijakan ini. Perhatikan `Arn` nilai yang dikembalikan oleh perintah, Anda akan membutuhkannya nanti dalam prosedur ini. Dalam contoh ini, kita gunakan `CWLtoSubscriptionFilterRole` untuk nama peran yang kita buat.

   ```
   aws iam create-role \ 
        --role-name CWLtoSubscriptionFilterRole \ 
        --assume-role-policy-document file://~/TrustPolicyForCWLSubscriptionFilter.json
   ```

1. Buat kebijakan izin untuk menentukan tindakan yang dapat dilakukan CloudWatch Log di akun Anda.

   1. Pertama, gunakan editor teks untuk membuat kebijakan izin berikut dalam file bernama`~/PermissionsForCWLSubscriptionFilter.json`.

      ```
      { 
          "Statement": [ 
              { 
                  "Effect": "Allow", 
                  "Action": "logs:PutLogEvents", 
                  "Resource": "arn:aws:logs:region:111111111111:log-group:LogGroupOnWhichSubscriptionFilterIsCreated:*" 
              } 
          ] 
      }
      ```

   1. Masukkan perintah berikut untuk mengaitkan kebijakan izin yang baru saja Anda buat dengan peran yang Anda buat di langkah 2.

      ```
      aws iam put-role-policy  
          --role-name CWLtoSubscriptionFilterRole  
          --policy-name Permissions-Policy-For-CWL-Subscription-filter 
          --policy-document file://~/PermissionsForCWLSubscriptionFilter.json
      ```

Setelah selesai, Anda dapat melanjutkan ke[Langkah 3: Buat kebijakan filter langganan tingkat akun](CreateSubscriptionFilter-Account.md).

# Langkah 3: Buat kebijakan filter langganan tingkat akun
<a name="CreateSubscriptionFilter-Account"></a>

Setelah Anda membuat tujuan, akun penerima data log dapat berbagi ARN tujuan (arn:aws:logs:us-east-1:999999999999:destination:testDestination) dengan akun AWS lain sehingga mereka dapat mengirim log acara ke tujuan yang sama. Para pengguna akun pengirim ini kemudian membuat filter langganan pada grup log masing-masing berdasarkan tujuan ini. Filter langganan segera memulai aliran data log waktu nyata dari grup log yang dipilih ke tujuan yang ditentukan.

**catatan**  
Jika Anda memberikan izin untuk filter langganan ke seluruh organisasi, Anda harus menggunakan ARN dari peran IAM yang Anda buat. [Langkah 2: (Hanya jika menggunakan organisasi) Buat peran IAM](CreateSubscriptionFilter-IAMrole-Account.md)

Dalam contoh berikut, kebijakan filter langganan tingkat akun dibuat di akun pengiriman. filter dikaitkan dengan akun pengirim `111111111111` sehingga setiap peristiwa log yang cocok dengan filter dan kriteria pemilihan dikirim ke tujuan yang Anda buat sebelumnya. Tujuan itu merangkum aliran yang disebut "”. RecipientStream

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

```
aws logs put-account-policy \
    --policy-name "CrossAccountStreamsExamplePolicy" \
    --policy-type "SUBSCRIPTION_FILTER_POLICY" \
    --policy-document '{"DestinationArn":"arn:aws:logs:region:999999999999:destination:testDestination", "FilterPattern": "", "Distribution": "Random"}' \
    --selection-criteria 'LogGroupName NOT IN ["LogGroupToExclude1", "LogGroupToExclude2"]' \
    --scope "ALL"
```

Grup log akun pengirim dan tujuan harus berada di AWS Wilayah yang sama. Namun, tujuan dapat menunjuk ke AWS sumber daya seperti aliran Amazon Kinesis Data Streams yang terletak di Wilayah yang berbeda.

# Validasi alur peristiwa log
<a name="ValidateLogEventFlow-Account"></a>

Setelah Anda membuat kebijakan filter langganan tingkat akun, CloudWatch Log meneruskan semua peristiwa log masuk yang cocok dengan pola filter dan kriteria pemilihan ke aliran yang dienkapsulasi dalam aliran tujuan yang disebut "”. **RecipientStream** Pemilik tujuan dapat memverifikasi bahwa ini terjadi dengan menggunakan get-shard-iterator perintah **aws kinesis untuk mengambil pecahan Amazon Kinesis** Data Streams, dan menggunakan perintah **aws kinesis get-records untuk mengambil beberapa catatan Amazon Kinesis** Data Streams:

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

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

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

**catatan**  
Anda mungkin perlu menjalankan kembali `get-records` perintah beberapa kali sebelum Amazon Kinesis Data Streams mulai mengembalikan data.

Anda akan melihat respons dengan larik catatan Amazon Kinesis Data Streams. Atribut data dalam catatan Amazon Kinesis Data Streams dikompresi dalam format gzip dan kemudian base64 dikodekan. 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:

```
{
    "owner": "111111111111",
    "logGroup": "CloudTrail/logs",
    "logStream": "111111111111_CloudTrail/logs_us-east-1",
    "subscriptionFilters": [
        "RecipientStream"
    ],
    "messageType": "DATA_MESSAGE",
    "logEvents": [
        {
            "id": "3195310660696698337880902507980421114328961542429EXAMPLE",
            "timestamp": 1432826855000,
            "message": "{\"eventVersion\":\"1.03\",\"userIdentity\":{\"type\":\"Root\"}"
        },
        {
            "id": "3195310660696698337880902507980421114328961542429EXAMPLE",
            "timestamp": 1432826855000,
            "message": "{\"eventVersion\":\"1.03\",\"userIdentity\":{\"type\":\"Root\"}"
        },
        {
            "id": "3195310660696698337880902507980421114328961542429EXAMPLE",
            "timestamp": 1432826855000,
            "message": "{\"eventVersion\":\"1.03\",\"userIdentity\":{\"type\":\"Root\"}"
        }
    ]
}
```

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.

# Ubah keanggotaan tujuan saat runtime
<a name="ModifyDestinationMembership-Account"></a>

Anda mungkin mengalami situasi ketika Anda harus menambahkan atau menghapus keanggotaan beberapa pengguna dari tujuan yang Anda miliki. Anda dapat menggunakan perintah `put-destination-policy` di tujuan Anda dengan kebijakan akses baru. Dalam contoh berikut, akun **111111111111** yang ditambahkan sudah sebelumnya dihentikan dari mengirim data log lagi, dan akun **222222222222** diaktifkan.

1. Ambil kebijakan yang saat ini terkait dengan **TestDestination** tujuan dan catat: **AccessPolicy**

   ```
   aws logs describe-destinations \
       --destination-name-prefix "testDestination"
   
   {
    "Destinations": [
      {
        "DestinationName": "testDestination",
        "RoleArn": "arn:aws:iam::999999999999:role/CWLtoKinesisRole",
        "DestinationArn": "arn:aws:logs:region:999999999999:destination:testDestination",
        "TargetArn": "arn:aws:kinesis:region:999999999999:stream/RecipientStream",
        "AccessPolicy": "{\"Version\": \"2012-10-17\", \"Statement\": [{\"Sid\": \"\", \"Effect\": \"Allow\", \"Principal\": {\"AWS\": \"111111111111\"}, \"Action\": \"logs:PutSubscriptionFilter\", \"Resource\": \"arn:aws:logs:region:999999999999:destination:testDestination\"}] }"
      }
    ]
   }
   ```

1. Perbarui kebijakan agar menunjukkan bahwa akun **111111111111** dihentikan, dan akun **222222222222** diaktifkan. Letakkan kebijakan ini di file **\$1/ NewAccessPolicy .json**:

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "",
               "Effect": "Allow",
               "Principal": {
                   "AWS": "222222222222"
               },
               "Action": [
                   "logs:PutSubscriptionFilter",
                   "logs:PutAccountPolicy"
               ],
               "Resource": "arn:aws:logs:us-east-1:999999999999:destination:testDestination"
           }
       ]
   }
   ```

------

1. Panggilan **PutDestinationPolicy**untuk mengaitkan kebijakan yang ditentukan dalam **NewAccessPolicyfile.json** dengan tujuan:

   ```
   aws logs put-destination-policy \
   --destination-name "testDestination" \
   --access-policy file://~/NewAccessPolicy.json
   ```

   Ini pada akhirnya akan menonaktifkan log acara dari ID akun **111111111111**. Log acara dari ID akun **222222222222** mulai mengalir ke tujuan segera setelah pemilik akun **222222222222** membuat filter langganan.

# Memperbarui langganan lintas akun yang ada
<a name="Cross-Account-Log_Subscription-Update-Account"></a>

Jika saat ini Anda memiliki langganan log lintas akun di mana akun tujuan hanya memberikan izin ke akun pengirim tertentu, dan Anda ingin memperbarui langganan ini sehingga akun tujuan memberikan akses ke semua akun di organisasi, ikuti langkah-langkah di bagian ini.

**Topics**
+ [Langkah 1: Perbarui filter berlangganan](Cross-Account-Log_Subscription-Update-filter-Account.md)
+ [Langkah 2: Perbarui kebijakan akses tujuan yang ada](Cross-Account-Log_Subscription-Update-policy-Account.md)

# Langkah 1: Perbarui filter berlangganan
<a name="Cross-Account-Log_Subscription-Update-filter-Account"></a>

**catatan**  
Langkah ini diperlukan hanya untuk langganan lintas akun untuk log yang dibuat oleh layanan yang tercantum di. [Aktifkan pencatatan dari AWS layanan](AWS-logs-and-resource-policy.md) Jika Anda tidak bekerja dengan log yang dibuat oleh salah satu grup log ini, Anda dapat melompat ke[Langkah 2: Perbarui kebijakan akses tujuan yang ada](Cross-Account-Log_Subscription-Update-policy-Account.md).

Dalam kasus tertentu, Anda harus memperbarui filter langganan di semua akun pengirim yang mengirim log ke akun tujuan. Pembaruan menambahkan peran IAM, yang CloudWatch dapat mengasumsikan dan memvalidasi bahwa akun pengirim memiliki izin untuk mengirim log ke akun penerima.

Ikuti langkah-langkah di bagian ini untuk setiap akun pengirim yang ingin Anda perbarui untuk menggunakan ID organisasi untuk izin berlangganan lintas akun.

Dalam contoh di bagian ini, dua akun, `111111111111` dan `222222222222` sudah memiliki filter berlangganan yang dibuat untuk mengirim log ke akun`999999999999`. Nilai filter langganan yang ada adalah sebagai berikut:

```
## Existing Subscription Filter parameter values
{
    "DestinationArn": "arn:aws:logs:region:999999999999:destination:testDestination",
    "FilterPattern": "{$.userIdentity.type = Root}",
    "Distribution": "Random"
}
```

Jika Anda perlu menemukan nilai parameter filter langganan saat ini, masukkan perintah berikut.

```
aws logs describe-account-policies \
--policy-type "SUBSCRIPTION_FILTER_POLICY" \
--policy-name "CrossAccountStreamsExamplePolicy"
```

**Untuk memperbarui filter langganan untuk mulai menggunakan organisasi IDs untuk izin log lintas akun**

1. Buat kebijakan kepercayaan berikut dalam sebuah file`~/TrustPolicyForCWL.json`. Gunakan editor teks untuk membuat file kebijakan ini; jangan gunakan konsol IAM.

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

1. Buat peran IAM yang menggunakan kebijakan ini. Perhatikan nilai `Arn` `Arn` nilai yang dikembalikan oleh perintah, Anda akan membutuhkannya nanti dalam prosedur ini. Dalam contoh ini, kita gunakan `CWLtoSubscriptionFilterRole` untuk nama peran yang kita buat.

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

1. Buat kebijakan izin untuk menentukan tindakan yang dapat dilakukan CloudWatch Log di akun Anda.

   1. Pertama, gunakan editor teks untuk membuat kebijakan izin berikut dalam file bernama`/PermissionsForCWLSubscriptionFilter.json`.

      ```
      { 
          "Statement": [ 
              { 
                  "Effect": "Allow", 
                  "Action": "logs:PutLogEvents", 
                  "Resource": "arn:aws:logs:region:111111111111:log-group:LogGroupOnWhichSubscriptionFilterIsCreated:*" 
              } 
          ] 
      }
      ```

   1. Masukkan perintah berikut untuk mengaitkan kebijakan izin yang baru saja Anda buat dengan peran yang Anda buat di langkah 2.

      ```
      aws iam put-role-policy 
          --role-name CWLtoSubscriptionFilterRole 
          --policy-name Permissions-Policy-For-CWL-Subscription-filter 
          --policy-document file://~/PermissionsForCWLSubscriptionFilter.json
      ```

1. Masukkan perintah berikut untuk memperbarui kebijakan filter langganan.

   ```
   aws logs put-account-policy \
       --policy-name "CrossAccountStreamsExamplePolicy" \
       --policy-type "SUBSCRIPTION_FILTER_POLICY" \
       --policy-document '{"DestinationArn":"arn:aws:logs:region:999999999999:destination:testDestination", "FilterPattern": "{$.userIdentity.type = Root}", "Distribution": "Random"}' \
       --selection-criteria 'LogGroupName NOT IN ["LogGroupToExclude1", "LogGroupToExclude2"]' \
       --scope "ALL"
   ```

# Langkah 2: Perbarui kebijakan akses tujuan yang ada
<a name="Cross-Account-Log_Subscription-Update-policy-Account"></a>

Setelah memperbarui filter langganan di semua akun pengirim, Anda dapat memperbarui kebijakan akses tujuan di akun penerima.

Dalam contoh berikut, akun penerima adalah `999999999999` dan tujuan diberi nama`testDestination`.

Pembaruan memungkinkan semua akun yang merupakan bagian dari organisasi dengan ID `o-1234567890` untuk mengirim log ke akun penerima. Hanya akun yang memiliki filter langganan yang dibuat yang benar-benar akan mengirim log ke akun penerima.

**Untuk memperbarui kebijakan akses tujuan di akun penerima untuk mulai menggunakan ID organisasi untuk izin**

1. Di akun penerima, gunakan editor teks untuk membuat `~/AccessPolicy.json` file dengan konten berikut.

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "",
               "Effect": "Allow",
               "Principal": "*",
               "Action": [
                   "logs:PutSubscriptionFilter",
                   "logs:PutAccountPolicy"
               ],
               "Resource": "arn:aws:logs:us-east-1:999999999999:destination:testDestination",
               "Condition": {
                   "StringEquals": {
                       "aws:PrincipalOrgID": [
                           "o-1234567890"
                       ]
                   }
               }
           }
       ]
   }
   ```

------

1. Masukkan perintah berikut untuk melampirkan kebijakan yang baru saja Anda buat ke tujuan yang ada. Untuk memperbarui tujuan agar menggunakan kebijakan akses dengan ID organisasi, bukan kebijakan akses yang mencantumkan AWS akun tertentu IDs, sertakan `force` parameternya.
**Awas**  
Jika Anda bekerja dengan log yang dikirim oleh AWS layanan yang terdaftar di[Aktifkan pencatatan dari AWS layanan](AWS-logs-and-resource-policy.md), maka sebelum melakukan langkah ini, Anda harus terlebih dahulu memperbarui filter langganan di semua akun pengirim seperti yang dijelaskan di[Langkah 1: Perbarui filter berlangganan](Cross-Account-Log_Subscription-Update-filter-Account.md).

   ```
   aws logs put-destination-policy 
       \ --destination-name "testDestination" 
       \ --access-policy file://~/AccessPolicy.json
       \ --force
   ```

# Langganan tingkat akun lintas wilayah lintas akun menggunakan Firehose
<a name="CrossAccountSubscriptions-Firehose-Account"></a>

Untuk berbagi data log lintas akun, Anda perlu membuat pengirim dan penerima data log:
+ **Pengirim data log** —mendapatkan informasi tujuan dari penerima dan memberi tahu CloudWatch Log bahwa ia siap untuk mengirim peristiwa lognya ke tujuan yang ditentukan. Dalam prosedur di bagian lainnya, pengirim data log ditampilkan dengan nomor AWS akun fiksi 111111111111.
+ **Penerima data log** —menyiapkan tujuan yang merangkum aliran Amazon Kinesis Data Streams dan CloudWatch memberi tahu Log bahwa penerima ingin menerima data log. Penerima kemudian membagikan informasi tentang tujuan ini dengan pengirim. Dalam prosedur di bagian lainnya, penerima data log ditampilkan dengan nomor AWS akun fiksi 22222222222222.

Contoh di bagian ini menggunakan aliran pengiriman Firehose dengan penyimpanan Amazon S3. Anda juga dapat mengatur aliran pengiriman Firehose dengan pengaturan berbeda. Untuk informasi selengkapnya, lihat [Membuat Aliran Pengiriman Firehose](https://docs.aws.amazon.com/firehose/latest/dev/basic-create.html).

**catatan**  
Grup log dan tujuan harus berada di AWS Wilayah yang sama. Namun, AWS sumber daya yang ditunjuk tujuan dapat ditemukan di Wilayah yang berbeda.

**catatan**  
 Filter langganan Firehose untuk ***akun yang sama*** dan aliran pengiriman ***lintas wilayah*** didukung. 

**Topics**
+ [Langkah 1: Buat aliran pengiriman Firehose](CreateFirehoseStream-Account.md)
+ [Langkah 2: Buat tujuan](CreateFirehoseStreamDestination-Account.md)
+ [Langkah 3: Buat kebijakan filter langganan tingkat akun](CreateSubscriptionFilterFirehose-Account.md)
+ [Memvalidasi alur peristiwa log](ValidateLogEventFlowFirehose-Account.md)
+ [Memodifikasi keanggotaan tujuan saat runtime](ModifyDestinationMembershipFirehose-Account.md)

# Langkah 1: Buat aliran pengiriman Firehose
<a name="CreateFirehoseStream-Account"></a>

**penting**  
 Sebelum Anda menyelesaikan langkah-langkah berikut, Anda harus menggunakan kebijakan akses, sehingga Firehose dapat mengakses bucket Amazon S3 Anda. Untuk informasi selengkapnya, lihat [Mengontrol Akses](https://docs.aws.amazon.com/firehose/latest/dev/controlling-access.html#using-iam-s3) di Panduan *Pengembang Amazon Data Firehose*.   
 Semua langkah di bagian ini (Langkah 1) harus dilakukan di akun penerima data log.   
 US East (N. Virginia) digunakan dalam contoh perintah berikut. Ganti Wilayah ini dengan Wilayah yang benar untuk penerapan Anda. 

**Untuk membuat aliran pengiriman Firehose yang akan digunakan sebagai tujuan**

1. Buat bucket Amazon S3:

   ```
   aws s3api create-bucket --bucket amzn-s3-demo-bucket --create-bucket-configuration LocationConstraint=us-east-1
   ```

1. Buat peran IAM yang memberikan izin Firehose untuk memasukkan data ke dalam bucket.

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

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

   1. Buat IAM role dengan menentukan file kebijakan kepercayaan yang baru saja Anda buat.

      ```
      aws iam create-role \ 
          --role-name FirehosetoS3Role \ 
          --assume-role-policy-document file://~/TrustPolicyForFirehose.json
      ```

   1. Output perintah ini akan terlihat serupa dengan yang berikut ini. Catat nama peran dan ARN peran.

      ```
      {
          "Role": {
              "Path": "/",
              "RoleName": "FirehosetoS3Role",
              "RoleId": "AROAR3BXASEKW7K635M53",
              "Arn": "arn:aws:iam::222222222222:role/FirehosetoS3Role",
              "CreateDate": "2021-02-02T07:53:10+00:00",
              "AssumeRolePolicyDocument": {
                  "Statement": {
                      "Effect": "Allow",
                      "Principal": {
                          "Service": "firehose.amazonaws.com"
                      },
                      "Action": "sts:AssumeRole",
                      "Condition": {
                          "StringEquals": {
                              "sts:ExternalId": "222222222222"
                          }
                      }
                  }
              }
          }
      }
      ```

1. Buat kebijakan izin untuk menentukan tindakan yang dapat dilakukan Firehose di akun Anda.

   1. Pertama, gunakan editor teks untuk membuat kebijakan izin berikut dalam file bernama`~/PermissionsForFirehose.json`. Bergantung pada kasus penggunaan Anda, Anda mungkin perlu menambahkan lebih banyak izin ke file ini.

      ```
      {
          "Statement": [{
              "Effect": "Allow",
              "Action": [
                  "s3:PutObject",
                  "s3:PutObjectAcl",
                  "s3:ListBucket"
              ],
              "Resource": [
                  "arn:aws:s3:::amzn-s3-demo-bucket",
                  "arn:aws:s3:::amzn-s3-demo-bucket/*"
              ]
          }]
      }
      ```

   1. Masukkan perintah berikut untuk mengaitkan kebijakan izin yang baru saja Anda buat dengan peran IAM.

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

1. Masukkan perintah berikut untuk membuat aliran pengiriman Firehose. Ganti *my-role-arn* dan *amzn-s3-demo-bucket2-arn* dengan nilai yang benar untuk penerapan Anda.

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

   Outputnya akan serupa dengan yang berikut ini:

   ```
   {
       "DeliveryStreamARN": "arn:aws:firehose:us-east-1:222222222222:deliverystream/my-delivery-stream"
   }
   ```

# Langkah 2: Buat tujuan
<a name="CreateFirehoseStreamDestination-Account"></a>

**penting**  
Semua langkah dalam prosedur ini harus dilakukan di akun penerima data log.

Saat tujuan dibuat, CloudWatch Log mengirimkan pesan pengujian ke tujuan atas nama akun penerima. Saat filter langganan aktif nanti, CloudWatch Log mengirimkan peristiwa log ke tujuan atas nama akun sumber.

**Untuk membuat tujuan**

1. Tunggu hingga aliran Firehose yang Anda buat [Langkah 1: Buat aliran pengiriman Firehose](CreateFirehoseStream-Account.md) menjadi aktif. Anda dapat menggunakan perintah berikut untuk memeriksa **StreamDescription. StreamStatus**properti.

   ```
   aws firehose describe-delivery-stream --delivery-stream-name "my-delivery-stream"
   ```

   Selain itu, perhatikan **DeliveryStreamDescription. DeliveryStreamNilai ARN**, karena Anda harus menggunakannya di langkah selanjutnya. Contoh output dari perintah ini:

   ```
   {
       "DeliveryStreamDescription": {
           "DeliveryStreamName": "my-delivery-stream",
           "DeliveryStreamARN": "arn:aws:firehose:us-east-1:222222222222:deliverystream/my-delivery-stream",
           "DeliveryStreamStatus": "ACTIVE",
           "DeliveryStreamEncryptionConfiguration": {
               "Status": "DISABLED"
           },
           "DeliveryStreamType": "DirectPut",
           "VersionId": "1",
           "CreateTimestamp": "2021-02-01T23:59:15.567000-08:00",
           "Destinations": [
               {
                   "DestinationId": "destinationId-000000000001",
                   "S3DestinationDescription": {
                       "RoleARN": "arn:aws:iam::222222222222:role/FirehosetoS3Role",
                       "BucketARN": "arn:aws:s3:::amzn-s3-demo-bucket",
                       "BufferingHints": {
                           "SizeInMBs": 5,
                           "IntervalInSeconds": 300
                       },
                       "CompressionFormat": "UNCOMPRESSED",
                       "EncryptionConfiguration": {
                           "NoEncryptionConfig": "NoEncryption"
                       },
                       "CloudWatchLoggingOptions": {
                           "Enabled": false
                       }
                   },
                   "ExtendedS3DestinationDescription": {
                       "RoleARN": "arn:aws:iam::222222222222:role/FirehosetoS3Role",
                       "BucketARN": "arn:aws:s3:::amzn-s3-demo-bucket",
                       "BufferingHints": {
                           "SizeInMBs": 5,
                           "IntervalInSeconds": 300
                       },
                       "CompressionFormat": "UNCOMPRESSED",
                       "EncryptionConfiguration": {
                           "NoEncryptionConfig": "NoEncryption"
                       },
                       "CloudWatchLoggingOptions": {
                           "Enabled": false
                       },
                       "S3BackupMode": "Disabled"
                   }
               }
           ],
           "HasMoreDestinations": false
       }
   }
   ```

   Mungkin diperlukan satu atau dua menit bagi aliran pengiriman Anda untuk muncul dalam keadaan aktif.

1. Saat aliran pengiriman aktif, buat peran IAM yang akan memberikan izin kepada CloudWatch Log untuk memasukkan data ke aliran Firehose Anda. Pertama, Anda harus membuat kebijakan kepercayaan dalam file **\$1/ TrustPolicyFor CWL.json**. Gunakan editor teks untuk membuat kebijakan ini. Untuk informasi selengkapnya tentang titik akhir CloudWatch Log, lihat [titik akhir dan CloudWatch kuota Amazon Logs](https://docs.aws.amazon.com/general/latest/gr/cwl_region.html). 

   Kebijakan ini mencakup kunci konteks kondisi `aws:SourceArn` global yang menentukan `sourceAccountId` untuk membantu mencegah masalah keamanan wakil yang membingungkan. Jika Anda belum mengetahui ID akun sumber pada panggilan pertama, kami sarankan Anda memasukkan ARN tujuan di bidang ARN sumber. Dalam panggilan berikutnya, Anda harus mengatur ARN sumber menjadi ARN sumber sebenarnya yang Anda kumpulkan dari panggilan pertama. 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:sourceAccountId:*",
                       "arn:aws:logs:region:recipientAccountId:*"
                   ]
               }
           }
        }
   }
   ```

1. Gunakan perintah **aws iam create-role** untuk membuat IAM role, dengan menentukan file kebijakan kepercayaan yang baru saja Anda buat. 

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

   Berikut ini adalah contoh output. Perhatikan nilai `Role.Arn` yang dikembalikan, karena Anda akan perlu menggunakannya di langkah berikutnya.

   ```
   {
       "Role": {
           "Path": "/",
           "RoleName": "CWLtoKinesisFirehoseRole",
           "RoleId": "AROAR3BXASEKYJYWF243H",
           "Arn": "arn:aws:iam::222222222222:role/CWLtoKinesisFirehoseRole",
           "CreateDate": "2023-02-02T08:10:43+00:00",
           "AssumeRolePolicyDocument": {
               "Statement": {
                   "Effect": "Allow",
                   "Principal": {
                       "Service": "logs.amazonaws.com"
                   },
                   "Action": "sts:AssumeRole",
                   "Condition": {
                       "StringLike": {
                           "aws:SourceArn": [
                               "arn:aws:logs:region:sourceAccountId:*",
                               "arn:aws:logs:region:recipientAccountId:*"
                           ]
                       }
                   }
               }
           }
       }
   }
   ```

1. Buat kebijakan izin untuk menentukan tindakan yang dapat dilakukan CloudWatch Log di akun Anda. Pertama, gunakan editor teks untuk membuat kebijakan izin dalam file **\$1/ PermissionsFor** CWL.json:

   ```
   {
       "Statement":[
         {
           "Effect":"Allow",
           "Action":["firehose:*"],
           "Resource":["arn:aws:firehose:region:222222222222:*"]
         }
       ]
   }
   ```

1. Kaitkan kebijakan izin dengan peran tersebut dengan memasukkan perintah berikut:

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

1. Setelah aliran pengiriman Firehose dalam status aktif dan Anda telah membuat peran IAM, Anda dapat membuat tujuan Log. CloudWatch 

   1. Langkah ini tidak akan mengaitkan kebijakan akses dengan tujuan Anda dan hanya merupakan langkah pertama dari dua langkah yang akan menyelesaikan pembuatan tujuan. Catat ARN tujuan baru yang dikembalikan di payload, karena Anda akan menggunakan ini sebagai langkah `destination.arn` selanjutnya.

      ```
      aws logs put-destination \                                                       
          --destination-name "testFirehoseDestination" \
          --target-arn "arn:aws:firehose:us-east-1:222222222222:deliverystream/my-delivery-stream" \
          --role-arn "arn:aws:iam::222222222222:role/CWLtoKinesisFirehoseRole"
      
      {
          "destination": {
              "destinationName": "testFirehoseDestination",
              "targetArn": "arn:aws:firehose:us-east-1:222222222222:deliverystream/my-delivery-stream",
              "roleArn": "arn:aws:iam::222222222222:role/CWLtoKinesisFirehoseRole",
              "arn": "arn:aws:logs:us-east-1:222222222222:destination:testFirehoseDestination"}
      }
      ```

   1. Setelah langkah sebelumnya selesai, dalam akun penerima data log (222222222222), kaitkan kebijakan akses dengan tujuan. Kebijakan ini memungkinkan akun pengirim data log (11111111111111) untuk mengakses tujuan hanya di akun penerima data log (222222222222). Anda dapat menggunakan editor teks untuk memasukkan kebijakan ini ke dalam `~/AccessPolicy.json` file:

------
#### [ JSON ]

****  

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Statement" : [
          {
            "Sid" : "",
            "Effect" : "Allow",
            "Principal" : {
              "AWS" : "111111111111"
            },
            "Action" : ["logs:PutSubscriptionFilter","logs:PutAccountPolicy"],
            "Resource" : "arn:aws:logs:us-east-1:222222222222:destination:testFirehoseDestination"
          }
        ]
      }
      ```

------

   1. Ini membuat kebijakan yang menentukan siapa yang memiliki akses menulis ke tujuan. Kebijakan ini harus menentukan `logs:PutSubscriptionFilter` dan `logs:PutAccountPolicy` tindakan untuk mengakses tujuan. Pengguna lintas akun akan menggunakan `PutAccountPolicy` tindakan `PutSubscriptionFilter` dan untuk mengirim peristiwa log ke tujuan.

      ```
      aws logs put-destination-policy \
          --destination-name "testFirehoseDestination" \
          --access-policy file://~/AccessPolicy.json
      ```

# Langkah 3: Buat kebijakan filter langganan tingkat akun
<a name="CreateSubscriptionFilterFirehose-Account"></a>

Beralihlah ke akun pengiriman, yaitu 111111111111 dalam contoh ini. Anda sekarang akan membuat kebijakan filter langganan tingkat akun di akun pengiriman. Dalam contoh ini, filter menyebabkan setiap peristiwa log yang berisi string `ERROR` di semua kecuali dua grup log dikirim ke tujuan yang sebelumnya Anda buat. 

```
aws logs put-account-policy \
    --policy-name "CrossAccountFirehoseExamplePolicy" \
    --policy-type "SUBSCRIPTION_FILTER_POLICY" \
    --policy-document '{"DestinationArn":"arn:aws:logs:us-east-1:222222222222:destination:testFirehoseDestination", "FilterPattern": "{$.userIdentity.type = AssumedRole}", "Distribution": "Random"}' \
    --selection-criteria 'LogGroupName NOT IN ["LogGroupToExclude1", "LogGroupToExclude2"]' \
    --scope "ALL"
```

Grup log akun pengirim dan tujuan harus berada di AWS Wilayah yang sama. Namun, tujuan dapat menunjuk ke AWS sumber daya seperti aliran Firehose yang terletak di Wilayah yang berbeda.

# Memvalidasi alur peristiwa log
<a name="ValidateLogEventFlowFirehose-Account"></a>

Setelah Anda membuat filter langganan, CloudWatch Log meneruskan semua peristiwa log masuk yang cocok dengan pola filter dan kriteria pemilihan ke aliran pengiriman Firehose. Data mulai muncul di bucket Amazon S3 Anda berdasarkan interval buffer waktu yang disetel pada aliran pengiriman Firehose. Setelah waktu tertentu berlalu, Anda dapat memverifikasi data dengan memeriksa bucket Amazon S3. Untuk memeriksa bucket, masukkan perintah berikut:

```
aws s3api list-objects --bucket 'amzn-s3-demo-bucket' 
```

Output perintah tersebut akan serupa dengan yang berikut ini:

```
{
    "Contents": [
        {
            "Key": "2021/02/02/08/my-delivery-stream-1-2021-02-02-08-55-24-5e6dc317-071b-45ba-a9d3-4805ba39c2ba",
            "LastModified": "2023-02-02T09:00:26+00:00",
            "ETag": "\"EXAMPLEa817fb88fc770b81c8f990d\"",
            "Size": 198,
            "StorageClass": "STANDARD",
            "Owner": {
                "DisplayName": "firehose+2test",
                "ID": "EXAMPLE27fd05889c665d2636218451970ef79400e3d2aecca3adb1930042e0"
            }
        }
    ]
}
```

Anda kemudian dapat mengambil objek tertentu dari bucket dengan memasukkan perintah berikut. Ganti nilai `key` dengan nilai yang Anda temukan di perintah sebelumnya.

```
aws s3api get-object --bucket 'amzn-s3-demo-bucket' --key '2021/02/02/08/my-delivery-stream-1-2021-02-02-08-55-24-5e6dc317-071b-45ba-a9d3-4805ba39c2ba' testfile.gz
```

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

Linux:

```
zcat testfile.gz
```

macOS:

```
zcat <testfile.gz
```

# Memodifikasi keanggotaan tujuan saat runtime
<a name="ModifyDestinationMembershipFirehose-Account"></a>

Anda mungkin mengalami situasi ketika Anda harus menambahkan atau menghapus pengirim log dari tujuan yang Anda miliki. Anda dapat menggunakan **PutDestinationPolicy**dan `PutAccountPolicy` tindakan di tujuan Anda dengan kebijakan akses baru. Dalam contoh berikut, akun **111111111111** yang ditambahkan sudah sebelumnya dihentikan dari mengirim data log lagi, dan akun **333333333333** diaktifkan.

1. Ambil kebijakan yang saat ini terkait dengan **TestDestination** tujuan dan catat: **AccessPolicy**

   ```
   aws logs describe-destinations \
       --destination-name-prefix "testFirehoseDestination"
   ```

   Data yang dikembalikan mungkin terlihat seperti ini.

   ```
   {
       "destinations": [
           {
               "destinationName": "testFirehoseDestination",
               "targetArn": "arn:aws:firehose:us-east-1:222222222222:deliverystream/my-delivery-stream",
               "roleArn": "arn:aws:iam:: 222222222222:role/CWLtoKinesisFirehoseRole",
               "accessPolicy": "{\n  \"Version\" : \"2012-10-17\",\n  \"Statement\" : [\n    {\n      \"Sid\" : \"\",\n      \"Effect\" : \"Allow\",\n      \"Principal\" : {\n        \"AWS\" : \"111111111111 \"\n      },\n      \"Action\" : \"logs:PutSubscriptionFilter\",\n      \"Resource\" : \"arn:aws:logs:us-east-1:222222222222:destination:testFirehoseDestination\"\n    }\n  ]\n}\n\n",
               "arn": "arn:aws:logs:us-east-1: 222222222222:destination:testFirehoseDestination",
               "creationTime": 1612256124430
           }
       ]
   }
   ```

1. Perbarui kebijakan agar menunjukkan bahwa akun **111111111111** dihentikan, dan akun **333333333333** diaktifkan. Letakkan kebijakan ini di file **\$1/ NewAccessPolicy .json**:

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement" : [
       {
         "Sid" : "",
         "Effect" : "Allow",
         "Principal" : {
           "AWS" : "333333333333 "
         },
         "Action" : ["logs:PutSubscriptionFilter","logs:PutAccountPolicy"],
         "Resource" : "arn:aws:logs:us-east-1:222222222222:destination:testFirehoseDestination"
       }
     ]
   }
   ```

------

1. Gunakan perintah berikut untuk mengaitkan kebijakan yang ditentukan dalam **NewAccessPolicyfile.json** dengan tujuan:

   ```
   aws logs put-destination-policy \
       --destination-name "testFirehoseDestination" \                                                                              
       --access-policy file://~/NewAccessPolicy.json
   ```

   Ini akhirnya akan menonaktifkan log acara dari ID akun **111111111111**. Log acara dari ID akun **333333333333** mulai mengalir ke tujuan segera setelah pemilik akun **333333333333** membuat filter langganan.