AWS リソースを作成しようとすると、Amazon CloudWatch Logs で「Unable to enable logging. (ログ記録を有効化できません)Policy document length breaking Cloudwatch Logs Constraints (ポリシードキュメントの長さが CloudWatch Logs の制約を満たしていません)」というエラーが発生します。
簡単な説明
AWS サービスで CloudWatch Logs を有効にするか、新しい AWS リソースを作成する際に、次のエラーメッセージが表示される場合があります。
「Unable to enable logging. (ログ記録を有効化できません)Policy document length breaking Cloudwatch Logs Constraints (ポリシードキュメントの長さが CloudWatch Logs の制約を満たしていません)」
CloudWatch リソースポリシーの最大許容文字数は、5120 文字です。ポリシーが 5120 文字より長い場合に、上記のエラーが発生します。エラーの詳細は、AWS CloudTrail イベント履歴で確認できます。
解決策
注: AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、「AWS CLI で発生したエラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。
CloudWatch リソースポリシーは、AWS CLI 単体で確認できます。
現在のリソースポリシーを確認して変更するには、次の手順を実行します。
-
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:*"
}
}
}
]
}
注: この例では、2 つのリソースを含むポリシーを示しています。リソースポリシーが 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 のクォータに関連する次のエラーメッセージが表示される場合があります。
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」
各リージョンにおいて、AWS アカウントには最大 10 の CloudWatch Logs リソースポリシーを設定できます。このクォータは変更できません。この問題を解決するには、AWS CLI コマンド delete-resource-policy を実行し、既存のポリシーを削除します。
aws logs delete-resource-policy --policy-name POLICY-NAME
注: **POLICY-NAME ** を削除するリソースポリシーの名前に置き換えます。
リージョン内のリソースポリシーが 10 個未満になると、新しいリソースポリシーを作成できます。
関連情報
コンソールで最近の管理イベントを表示する
CloudWatch Logs のクォータ
AWS サービスからのログ記録を有効にする