備忘録として残しておきます。
こんな感じで、IAMユーザーにStatement AとStatement Bを付与するインラインポリシーがあり、このインラインポリシーにStatement Cを追加しようとしました。
ところが、コードを変更してterraform applyをかけたところ、「LimitExceeded: Maximum policy size of 2048 bytes exceeded」と怒られてしまいました。
│ Error: putting IAM User (****) Policy (****): operation error IAM: PutUserPolicy, https response error StatusCode: 409, RequestID: ****, LimitExceeded: Maximum policy size of 2048 bytes exceeded for user ****
どうやらポリシーの合計が2048 bytesをオーバーしてしまったようです。 仕方ないのでインラインポリシーを2つに分けました。
怒られました。
│ Error: putting IAM User (****) Policy (****): operation error IAM: PutUserPolicy, https response error StatusCode: 409, RequestID: ****, LimitExceeded: Maximum policy size of 2048 bytes exceeded for user ****
「言いがかりをつけるな!」と言いたい気持ちをSlackに吐き出しながら調べてみると、こんなドキュメントを見つけました。
IAM ユーザー、ロール、またはグループに必要な数のインラインポリシーを追加できます。ただし、エンティティごとの総ポリシーサイズ (すべてのインラインポリシーの合計サイズ) は以下の制限を超えることはできません。
・ ユーザーポリシーサイズは 2,048 文字を超えることはできません。
・ロールポリシーサイズは 10,240 文字を超えることはできません。
・ グループポリシーサイズは 5,120 文字を超えることはできません。
どうやらインラインポリシーを分けたとしても、合算されて制限がかかるようです(どうして)
この方法では制限を回避することはできないようです。
結局それぞれを個別の管理ポリシーにし、IAMユーザーにアタッチすることによってこの問題を回避しました。
ユーザー、ロールに関わらず、インラインポリシーが太っていくような実装はしないほうが良さそうですね。
MNTSQ株式会社 SRE 西室