

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 步骤 1：创建目标
<a name="CreateDestination-Account"></a>

**重要**  
此过程中的所有步骤都需要在日志数据接收者账户中完成。

在本示例中，日志数据接收者帐户的 Amazon 帐户 ID 为 999999999999，而日志数据发送者 Amazon 帐户 ID 为 111111111111。

 此示例使用 RecipientStream名为的 Amazon Kinesis Data Streams 流创建一个目标，以及一个 CloudWatch 允许日志向其写入数据的角色。

创建目标后， CloudWatch Logs 会代表收件人账户向目标发送一条测试消息。当订阅筛选器稍后处于活动状态时，Logs 会代表源账户将 CloudWatch 日志事件发送到目标。

**创建目标**

1. 在收款人账户中，在 Amazon Kinesis Data Streams 中创建目标流。在命令提示符下，输入：

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

1. 等到 流变为活动状态。**你可以使用 a **ws kinesis describe-stream** 命令来检查。StreamDescription StreamStatus**财产。此外，请记下 **StreamDescription.streamArn** 的值，因为您稍后会将其传递给 Logs： CloudWatch 

   ```
   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. 创建 IAM 角色以授予 CloudWatch Logs 将数据放入您的直播的权限。首先，你需要在文件 **\$1/ TrustPolicyFor cwl** .json 中创建信任策略。使用文本编辑器创建此策略文件，请勿使用 IAM 控制台来创建。

   此策略包括指定 `sourceAccountId` 的 `aws:SourceArn` 全局条件上下文密钥，有助于避免出现混淆代理安全问题。如果您在第一次调用中还不知道源账户 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 日志可以对您的账户执行哪些操作。首先，使用文本编辑器在文件 **\$1/ PermissionsFor cwl** .json 中创建权限策略：

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

1. 使用 a **w** s 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 日志目标。

   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** action，并向发件人账户授予访问目标的权限。

      该策略向发送日志的 Amazon 账户授予权限。您可以在策略中仅指定这一个账户，如果发件人账户是企业的成员，则策略可以指定企业的企业 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
      ```

      此访问策略允许 Amazon 账户中编号为 111111111111 的用户使用 ARN arn: aws: logs:: 999999999999: destination: testDestination: testDest **PutSubscriptionFilter**ination呼叫目的地。*region*任何其他用户试图拨 PutSubscriptionFilter打该目的地的电话都将被拒绝。

      要针对访问策略验证用户的权限，请参阅 *IAM 用户指南*中的[使用策略验证程序](https://docs.amazonaws.cn/IAM/latest/UserGuide/policies_policy-validator.html)。

完成后，如果您使用 Amazon Organizations 的是跨账户权限，请按照中的[步骤 2：（仅在使用企业时）创建 IAM 角色](CreateSubscriptionFilter-IAMrole-Account.md)步骤操作。如果您选择直接向另一个账户授予权限而不是使用 Organizations，则可以跳过该步骤然后继续执行 [步骤 3：创建账户级订阅筛选策略](CreateSubscriptionFilter-Account.md)。