本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
步骤 1:更新订阅筛选条件
注意
此步骤仅对于由 启用来自 Amazon 服务的日志记录 中列出的服务创建的日志的跨账户订阅才需要。如果您不使用由这些日志组之一创建的日志,则可以跳至 步骤 2:更新现有的目标访问策略。
在某些情况下,您必须更新向目标账户发送日志的所有发件人账户中的订阅筛选条件。此更新添加了一个 IAM 角色,该角色 CloudWatch 可以假设并验证发件人账户有权向收件人账户发送日志。
请按照本节中的步骤为您要更新的每个发件人账户执行操作,以使用企业 ID 获得跨账户订阅权限。
在本节的示例中,111111111111
和 222222222222
两个账户已经创建了用于向账户 999999999999
发送日志的订阅筛选条件。现有的订阅筛选条件值如下:
## Existing Subscription Filter parameter values { "DestinationArn": "arn:aws:logs:region:999999999999:destination:testDestination", "FilterPattern": "{$.userIdentity.type = Root}", "Distribution": "Random" }
如果需要查找当前订阅筛选条件参数值,请输入以下命令。
aws logs describe-account-policies \ --policy-type "SUBSCRIPTION_FILTER_POLICY" \ --policy-name "CrossAccountStreamsExamplePolicy"
要更新订阅筛选条件以开始使用企业 ID 获取跨账户日志权限
请在文件
~/TrustPolicyForCWL.json
中创建以下信任策略。使用文本编辑器创建此策略文件;请勿使用 IAM 控制台来创建。{ "Statement": { "Effect": "Allow", "Principal": { "Service": "logs.amazonaws.com" }, "Action": "sts:AssumeRole" } }
创建一个使用此策略的 IAM 角色。记录该命令返回的
Arn
值的Arn
值,您将需要在本过程的后面部分中使用该值。在此示例中,我们将CWLtoSubscriptionFilterRole
用作我们所创建角色的名称。aws iam create-role \ --role-name CWLtoSubscriptionFilterRole \ --assume-role-policy-document file://~/TrustPolicyForCWL.json
创建权限策略以定义 CloudWatch Logs 可以对您的账户执行的操作。
首先,使用文本编辑器在名为
/PermissionsForCWLSubscriptionFilter.json
的文件中创建以下权限策略。{ "Statement": [ { "Effect": "Allow", "Action": "logs:PutLogEvents", "Resource": "arn:aws:logs:region:111111111111:log-group:LogGroupOnWhichSubscriptionFilterIsCreated:*" } ] }
输入以下命令,以将刚创建的权限策略与您在步骤 2 中创建的角色相关联。
aws iam put-role-policy --role-name CWLtoSubscriptionFilterRole --policy-name Permissions-Policy-For-CWL-Subscription-filter --policy-document file://~/PermissionsForCWLSubscriptionFilter.json
输入以下命令以更新订阅筛选器策略。
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"