IAM のインラインポリシーが文字数上限に達したときの対処方法

2023.04.12

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

困っていた内容

IAM のインラインポリシーの記述時に、文字数が上限を超過してしまいます。
インラインポリシーには IP 制限などの細かな制限を記述しています。
インラインポリシーの文字数上限に達したときの対処方法を教えてください。

どう対応すればいいの?

前提として、インラインポリシーの文字数制限の上限を引き上げることは不可能となります。

IAM クォータおよび AWS STS クォータ、名前の要件、および文字の制限 - AWS Identity and Access Management

IAM および AWS STS の最大文字数とサイズの制限は、次のとおりです。以下の制限の引き上げをリクエストすることはできません。
(中略)
IAM ユーザー、ロール、またはグループに必要な数のインラインポリシーを追加できます。ただし、エンティティごとの総ポリシーサイズ (すべてのインラインポリシーの合計サイズ) は以下の制限を超えることはできません。
ユーザーポリシーサイズは 2,048 文字を超えることはできません。
ロールポリシーサイズは 10,240 文字を超えることはできません。
グループポリシーサイズは 5,120 文字を超えることはできません。

また、複数のインラインポリシーを同一の IAM リソース (ユーザー、グループ、ロール)にアタッチする場合、複数のインラインポリシーの文字数の合計値が制限値を超えることは不可能となります。

IAM ロールまたはユーザーのマネージドポリシーを増やす、または文字サイズ制限を引き上げる | AWS re:Post

インラインポリシーは必要なだけ使用できますが、ポリシーの合計サイズは文字クォータを超えることはできません。インラインポリシーの文字制限は、ユーザーが 2,048、ロールが 10,240、グループが 5,120 です。

対処方法としては、インラインポリシーの代わりとしてカスタマー管理ポリシー(以下管理ポリシー)の利用を検討してください。
また、インラインポリシーと管理ポリシーを併用することも可能です。

管理ポリシーとインラインポリシーの比較 - AWS Identity and Access Management

管理ポリシーとインラインポリシーのどちらを選ぶかは、ユースケースを考慮して決定します。通常、インラインポリシーではなく、管理ポリシーを使用することをお勧めします。
注記
管理ポリシーとインラインポリシーの両方を併用して、プリンシパルエンティティに共通および固有のアクセス許可を定義することができます。

管理ポリシーの文字数の上限は 6144文字となりますが、複数の管理ポリシーをアタッチした場合の文字数の合計値に上限はありません。
そのため、1 つの管理ポリシーの文字数が 6144文字を超える際は、複数の管理ポリシーに分割して記載することが可能です。

なお、1 つの IAM ユーザーにアタッチ可能な管理ポリシー数は、デフォルトで 10 個となり、最大でも 20 個となります。

IAM クォータおよび AWS STS クォータ、名前の要件、および文字の制限 - AWS Identity and Access Management

リソース デフォルトのクォータ 最大クォータ
(中略)
IAM ユーザーにアタッチされた管理ポリシー 10 20

参考資料

IAM クォータおよび AWS STS クォータ、名前の要件、および文字の制限 - AWS Identity and Access Management
IAM ロールまたはユーザーのマネージドポリシーを増やす、または文字サイズ制限を引き上げる | AWS re:Post
管理ポリシーとインラインポリシーの比較 - AWS Identity and Access Management
IAM クォータおよび AWS STS クォータ、名前の要件、および文字の制限 - AWS Identity and Access Management