当我尝试创建 AWS 资源时,我收到 Amazon CloudWatch Logs 错误“Unable to enable logging.Policy document length breaking CloudWatch Logs Constraints”。
简短描述
当您为 AWS 服务启用 CloudWatch Logs 或创建新的 AWS 资源时,您可能会收到以下错误消息:
“Unable to enable logging.Policy document length breaking CloudWatch Logs Constraints”
CloudWatch 资源策略允许的最大字符长度为 5120。当策略超过 5120 个字符时,您会收到上述错误。您可以在 AWS CloudTrail 事件历史记录中查看错误详细信息。
解决方法
**注意:**如果您在运行 AWS 命令行界面 (AWS CLI) 命令时收到错误,请参阅 AWS CLI 错误故障排除。此外,请确保您使用的是最新版本的 AWS CLI。
您只能使用 AWS CLI 来检查 CloudWatch 资源策略。
要检查您当前的资源策略并对其进行修改,请完成以下步骤:
-
运行 AWS CLI 命令 describe-resource-policies 来检查您当前的 CloudWatch 资源策略:
aws logs describe-resource-policies --REGION-NAME > resource.json
**注意:**请将 REGION-NAME 替换为您的 AWS 区域。
-
将输出保存到名为 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:*"
}
}
}
]
}
**注意:**该示例显示了一个包含两个资源的策略。当资源策略超过 5120 个字符的限制时,CloudWatch 会自动在策略中添加条目 /aws/vendedlogs/*。然后,必须创建前缀为 /aws/vendedlogs/ 的新日志组。如果要使用自定义日志组名称,请编辑策略以包括您的特定资源名称。确保保持在字符限制之内。
-
运行 AWS CLI 命令 put-resource-policy,将 AWSLogDeliveryWrite20150319 资源策略替换为 resource.json 中编辑过的版本:
aws logs put-resource-policy --policy-document file://resource.json --POLICY-NAME AWSLogDeliveryWrite20150319
**注意:**将 POLICY-NAME 替换为要替换的资源策略的名称。
添加新的资源策略时,您可能会收到以下与 CloudWatch 配额相关的错误消息:
“错误:正在创建 CloudWatch Logs 资源策略(名称):CloudWatch Logs 操作错误: PutResourcePolicy 超出了最大尝试次数,https 响应错误,StatusCode: 400,RequestID: 3d123ce1-f123-4d12-12b8-abc1234ba1a9,LimitExceededException: Resource limit exceeded.”
对于每个区域,您的 AWS 账户中最多可以有 10 个 CloudWatch Logs 资源策略。您无法更改此配额。要解决此问题,请运行 AWS CLI 命令 delete-resource-policy 删除现有策略:
aws logs delete-resource-policy --policy-name POLICY-NAME
**注意:**将 POLICY-NAME 替换为要删除的资源策略的名称。
当您所在区域中的资源策略少于 10 个时,您可以创建新的资源策略。
相关信息
使用控制台查看最近的管理事件
CloudWatch Logs 配额
启用 AWS 服务的日志记录