An error occurred (LimitExceededException) when calling the PutResourcePolicy operation: Resource limit exceeded エラーが発生した時の対処方法

2022.02.16

困っていた内容

CloudFormation で OpenSearch を作成しようとしたところ、An error occurred (LimitExceededException) when calling the PutResourcePolicy operation: Resource limit exceeded というエラーが発生しました。他のアカウント、及び同一アカウントの他リージョンではこのようなエラーは発生しません。原因と対処方法について教えてください。

エラーが発生する原因

リージョンごとの CloudWatch Logs のリソースポリシー数上限の 10 に達したことが原因となります。

PutResourcePolicy

アカウントには、AWSリージョンごとに最大10個のリソースポリシーを含めることができます。

CloudWatch Logs quotas

Resource policies
Up to 10 CloudWatch Logs resource policies per Region per account. This quota can't be changed.

エラーの対処方法

既存のリソースポリシーから不要なポリシーを削除することで、本件エラーを回避できます。

まず、以下のコマンドで既存のリソースポリシーを確認します。

aws logs describe-resource-policies
{
    "resourcePolicies": [
        {
            "policyName": "AWSLogDeliveryWrite20150319",
            "policyDocument": "...",
            "lastUpdatedTime": 1643088504293
        },
        {
            "policyName": "EnableDataSyncLogs",
            "policyDocument": "...",
            "lastUpdatedTime": 1636517535080
        }
    ]
}

不要なポリシーを削除します。

aws logs delete-resource-policy --policy-name EnableDataSyncLogs
aws logs describe-resource-policies
{
    "resourcePolicies": [
        {
            "policyName": "AWSLogDeliveryWrite20150319",
            "policyDocument": "...",
            "lastUpdatedTime": 1643088504293
        }
    ]
}

不要なポリシーがない場合は、任意のポリシーのドキュメントを他のポリシーの内容を含むようにして put-resource-policy で更新した後、不要になった他のポリシーを削除することで、本件エラーを回避できます。

Amazon CloudWatch Logs を用いて OpenSearch ログをモニタリングする

CloudWatch Logs では、リージョンごとに 10 個のリソースポリシーがサポートされます。
複数の OpenSearch Service ドメインでログを有効にする場合は、この制限に達しないように、複数のロググループを含む広範囲のポリシーを作成して再利用します。

参考資料

PutResourcePolicy

CloudWatch Logs quotas

Amazon CloudWatch Logs を用いて OpenSearch ログをモニタリングする

describe-resource-policies

delete-resource-policy

put-resource-policy