

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

# 更新现有的跨账户订阅
<a name="Cross-Account-Log_Subscription-Update"></a>

如果您当前有跨账户日志订阅，其中目标账户仅向特定发件人账户授予权限，并且您想更新此订阅以便目标账户向企业中所有账户授予访问权限，请按照本节中的步骤操作。

**Topics**
+ [

# 步骤 1：更新订阅筛选条件
](Cross-Account-Log_Subscription-Update-filter.md)
+ [

# 步骤 2：更新现有的目标访问策略
](Cross-Account-Log_Subscription-Update-policy.md)

# 步骤 1：更新订阅筛选条件
<a name="Cross-Account-Log_Subscription-Update-filter"></a>

**注意**  
此步骤仅对于由 [启用来自 AWS 服务的日志记录](AWS-logs-and-resource-policy.md) 中列出的服务创建的日志的跨账户订阅才需要。如果您不使用由这些日志组之一创建的日志，则可以跳至 [步骤 2：更新现有的目标访问策略](Cross-Account-Log_Subscription-Update-policy.md)。

在某些情况下，您必须更新向目标账户发送日志的所有发件人账户中的订阅筛选条件。此更新添加了一个 IAM 角色，该角色 CloudWatch 可以假设并验证发件人账户有权向收件人账户发送日志。

请按照本节中的步骤为您要更新的每个发件人账户执行操作，以使用企业 ID 获得跨账户订阅权限。

在本节的示例中，`111111111111` 和 `222222222222` 两个账户已经创建了用于向账户 `999999999999` 发送日志的订阅筛选条件。现有的订阅筛选条件值如下：

```
## 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"
```

如果需要查找当前订阅筛选条件参数值，请输入以下命令。

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

**更新订阅筛选器以开始使用组织来 IDs 获得跨账户日志权限**

1. 请在文件 `~/TrustPolicyForCWL.json` 中创建以下信任策略。使用文本编辑器创建此策略文件；请勿使用 IAM 控制台来创建。

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

1. 创建一个使用此策略的 IAM 角色。记录该命令返回的 `Arn` 值的 `Arn` 值，您将需要在本过程的后面部分中使用该值。在此示例中，我们将 `CWLtoSubscriptionFilterRole` 用作我们所创建角色的名称。

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

1. 创建权限策略以定义 CloudWatch Logs 可以对您的账户执行的操作。

   1. 首先，使用文本编辑器在名为 `/PermissionsForCWLSubscriptionFilter.json` 的文件中创建以下权限策略。

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

   1. 输入以下命令，以将刚创建的权限策略与您在步骤 2 中创建的角色相关联。

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

1. 输入以下命令以更新订阅筛选条件。

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

# 步骤 2：更新现有的目标访问策略
<a name="Cross-Account-Log_Subscription-Update-policy"></a>

更新所有发件人账户中的订阅筛选条件后，可以更新收件人账户中的目标访问策略。

在以下示例中，收件人账户为 `999999999999`，目的地名为 `testDestination`。

此更新将使企业中 ID 为 `o-1234567890` 的所有账户向收件人账户发送日志。只有创建了订阅筛选条件的账户才会实际向收件人账户发送日志。

**要更新收件人账户中的目标访问策略以开始使用企业 ID 获取权限**

1. 在收件人账户中，请使用文本编辑器创建包含下列内容的 `~/AccessPolicy.json` 文件。

------
#### [ 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. 输入以下命令，将刚创建的策略附加到现有目标。要更新目标以使用带有组织 ID 的访问策略，而不是列出特定 AWS 账户的访问策略 IDs，请添加`force`参数。
**警告**  
如果您正在处理中列出的 AWS 服务发送的日志[启用来自 AWS 服务的日志记录](AWS-logs-and-resource-policy.md)，则在执行此步骤之前，必须先更新所有发件人账户中的订阅筛选器，如中所述[步骤 1：更新订阅筛选条件](Cross-Account-Log_Subscription-Update-filter.md)。

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