

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 步驟 1：建立目的地
<a name="CreateDestination-Account"></a>

**重要**  
此程序中的所有步驟必須在日誌資料收件人帳戶中完成。

在此範例中，日誌資料收件人帳戶的帳戶 AWS ID 為 999999999999，而日誌資料寄件者 AWS 帳戶 ID 為 111111111111。

 此範例使用名為 RecipientStream 的 Amazon Kinesis Data Streams 串流建立目的地，以及可讓 CloudWatch Logs 將資料寫入其中的角色。

建立目的地時，CloudWatch Logs 會以收件人帳戶的名義向目的地傳送測試訊息。當訂閱篩選條件在稍後處於作用中狀態時，CloudWatch Logs 會以來源帳戶的名義向目的地傳送日誌事件。

**若要建立目的地**

1. 在收件人帳戶中，在 Amazon Kinesis Data Streams 中建立目的地串流。在命令提示字元中輸入：

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

1. 等到 串流變成作用中。您可以使用以下 **aws kinesis describe-stream** 命令來檢查 **StreamDescription.StreamStatus** 屬性。此外，應記下 **StreamDescription.StreamARN** 值，因為稍後要將該值傳遞至 CloudWatch Logs：

   ```
   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"
           }
         }
       ]
     }
   }
   ```

   這可能需要花費幾分鐘，讓串流以作用中狀態出現。

1. 建立將授予 CloudWatch Logs 許可以將資料放到串流中的 IAM 角色。首先，您將需要在檔案 **\$1/TrustPolicyForCWL.json** 中建立信任政策。使用文字編輯器來建立此政策檔案，請勿使用 IAM 主控台。

   此政策包含 `aws:SourceArn` 全域條件內容金鑰，可指定 `sourceAccountId` 以協助預防混淆代理人安全問題。如果您在第一次呼叫中還不知道來源帳戶 ID，我們建議您將目的地 ARN 放在來源 ARN 欄位中。在後續呼叫中，應將來源 ARN 設定為從第一次呼叫中收集的實際來源 ARN。如需詳細資訊，請參閱[預防混淆代理人](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. 使用 **aws iam create-role** 命令來建立 IAM 角色，並指定信任政策檔案。記下傳回的 Role.Arn 值，因為稍後也要將此值傳遞至 CloudWatch Logs：

   ```
   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. 建立許可政策以定義 CloudWatch Logs 可在您的帳戶上執行哪些動作。首先，使用文字編輯器在檔案 **\$1/PermissionsForCWL.json** 中建立許可政策：

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

1. 使用 **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. 在串流處於作用中狀態且您已建立 IAM 角色後，即可建立 CloudWatch Logs 目的地。

   1. 此步驟不會將存取政策與您的目的地相關聯，且只是完成目的地建立兩步驟中的第一步。請注意在承載中傳回的 **DestinationArn**：

      ```
      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. 步驟 7a 完成後，即可在日誌資料收件人帳戶中，將存取政策與目的地建立關聯。此政策必須指定 **logs:PutSubscriptionFilter** 動作，並授予寄件者帳戶許可以存取目的地。

      政策會將許可授予傳送日誌 AWS 的帳戶。您可以在政策中僅指定這一個帳戶，或者如果寄件者帳戶是組織的成員，則政策可以指定組織的組織 ID。如此一來，您可以僅建立一個政策，就能允許一個組織中的多個帳戶將日誌傳送至此目的地帳戶。

      使用文字編輯器建立名為 `~/AccessPolicy.json` 的檔案，並隨附下列其中一個政策陳述。

      此第一個範例政策允許組織中具有 ID 為 `o-1234567890` 的所有帳戶將日誌傳送至收件人帳戶。

------
#### [ 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"
                          ]
                      }
                  }
              }
          ]
      }
      ```

------

      此下一個範例只允許日誌資料寄件者帳戶 (111111111111) 將日誌傳送至日誌資料收件人帳戶。

------
#### [ 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. 將您在上一步驟建立的政策連接到目的地。

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

      此存取政策可讓 ID 為 111111111111 的 AWS 帳戶中的使用者針對 ARN arn：aws：logs：*region*：999999999999：destination：testDestination 的目的地呼叫 **PutSubscriptionFilter**。任何其他使用者針對此目的地呼叫 PutSubscriptionFilter 的嘗試將遭到拒絕。

      若要驗證使用者的權限符合存取政策，請參閱《IAM 使用者指南》**中的[使用政策驗證程式](https://docs.aws.amazon.com/IAM/latest/UserGuide/policies_policy-validator.html)。

完成後，如果您將 AWS Organizations 用於跨帳戶許可，請遵循中的步驟[步驟 2：(僅限於使用組織時) 建立 IAM 角色](CreateSubscriptionFilter-IAMrole-Account.md)。如果您要將許可直接授予給其他帳戶，而不是使用 Organizations，則可以略過該步驟並繼續進行 [步驟 3：建立帳戶層級訂閱篩選條件政策](CreateSubscriptionFilter-Account.md)。