

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

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