当我尝试创建 AWS 资源或为 AWS 服务启用 Amazon CloudWatch Logs 时,我收到错误“Unable to enable logging.Policy document length breaking CloudWatch Logs Constraints.”
简短描述
Amazon CloudWatch 资源策略允许的最大字符长度为 5,120。当您的策略超过 5,120 个字符时,您会收到错误。您可以在 AWS CloudTrail 事件历史记录中查看错误详细信息。
解决方法
要检查您当前的资源策略并对其进行修改,请完成以下步骤:
-
运行以下 describe-resource-policies 命令来检查您当前的资源策略:
aws logs describe-resource-policies --region REGION-NAME > resource.json
**注意:**请将 REGION-NAME 替换为您的 AWS 区域。如果您在运行 AWS 命令行界面 (AWS CLI) 命令时收到错误,请参阅排查 AWS CLI 错误。此外,请确保您使用的是最新版本的 AWS CLI。您只能使用 AWS CLI 来检查 CloudWatch 资源策略。
-
将输出保存到名为 resource.json 的 JSON 文件中。
-
从 resource.json 中复制 AWSLogDeliveryWrite20150319 策略,然后将该策略粘贴到文本编辑器中。
-
要减少策略中的字符数,请执行以下操作:
移除不使用的条目,例如资源和日志流。
将资源 Amazon 资源名称 (ARN) 替换为通配符 *。
附加具有所需权限的新资源策略。
资源策略示例:
{
"Version": "2012-10-17",
"Statement": [
{ "Sid": "AWSLogDeliveryWrite",
"Effect": "Allow",
"Principal": {
"Service": "delivery.logs.amazonaws.com"
},
"Action": [
"logs:CreateLogStream", "logs:PutLogEvents"
],
"Resource":
[ "arn:aws:logs:us-east-1:869614222995:log-group:aws-waf-logs-albwafs:log-stream:xyz",
"arn:aws:logs:us-east-1:869614222995:log-group:aws-s3:log-stream:abc"
],
"Condition":
{ "StringEquals":
{ "aws:SourceAccount": "869614222995" },
"ArnLike": { "aws:SourceArn": "arn:aws:logs:us-east-1:869614222995:*"
}
}
}
]
}
**注意:**该示例显示了一个包含两个资源的策略。当资源策略超过 5,120 个字符的限制时,CloudWatch 会自动在策略中添加条目 /aws/vendedlogs/*。然后,您必须创建前缀为 /aws/vendedlogs/ 的新日志组。如果您要使用自定义日志组名称,请编辑策略以包括您的特定资源名称。确保不超过字符限制。
-
运行以下 put-resource-policy 命令,将 AWSLogDeliveryWrite20150319 资源策略替换为 resource.json 中编辑过的版本:
aws logs put-resource-policy --policy-document file://resource.json --policy-name AWSLogDeliveryWrite20150319
**注意:**请将 policy-name 替换为要替换的资源策略的名称。
添加新的资源策略时,您可能会收到以下与 CloudWatch quotas(CloudWatch 配额)相关的错误消息:
“Error: creating CloudWatch Logs Resource Policy (name): operation error CloudWatch Logs: PutResourcePolicy, exceeded maximum number of attempts, https response error StatusCode: 400, RequestID: 3d123ce1-f123-4d12-12b8-abc1234ba1a9, LimitExceededException: Resource limit exceeded.”
CloudWatch 允许在您的 AWS 账户中为每个区域设置最多 10 个 CloudWatch Logs 资源策略。您无法更改此配额。
要移除不使用的现有策略,请运行以下 delete-resource-policy 命令:
aws logs delete-resource-policy --policy-name POLICY-NAME
**注意:**请将 POLICY-NAME 替换为要删除的资源策略的名称。
当您所在区域中的资源策略少于 10 个时,运行 put-resource-policy 命令来创建新的资源策略。
相关信息
Viewing recent management events with the console(使用控制台查看最近的管理事件)
Enable logging from AWS services(启用 AWS 服务的日志记录)