AWS IAM の6つのリソースで最大クォータが引き上げられたので、実際に引き上げを試してみた
2026年5月5日、以下のアップデートが発表されました。
AWS Identity and Access Management (IAM) has increased maximum quotas for six resources
重要なのは、今回変わったのは Service Quotas でリクエスト可能な最大値 であり、各アカウントに適用されているデフォルトクォータではない点です。そのため、既存アカウントの Roles per account が自動的に 10,000 になるわけではありません。
IAM クォータの3つの値
まず、IAM クォータに関連する3つの値を整理します。
| 種類 | 意味 | 確認コマンド |
|---|---|---|
| AWS default quota | AWS が新規アカウントに設定するデフォルト値 | get-aws-default-service-quota |
| Applied quota | そのアカウントに現在適用されている値 | get-service-quota |
| Maximum quota | Service Quotas で申請可能な最大値 | ドキュメント参照 |
get-aws-default-service-quota は AWS のデフォルト値を確認するコマンドです。すでにクォータ引き上げ済みのアカウントでは、実際に適用されている値と異なる場合があります。現在そのアカウントに適用されている値を確認する場合は get-service-quota を使用します。
今回のアップデートで変わったのは Maximum quota(申請可能な最大値)です。デフォルト値や Applied quota は以下の CLI で確認できます。
# AWS デフォルト値の確認
aws service-quotas get-aws-default-service-quota \
--service-code iam --quota-code L-FE177D64 --region us-east-1
# → Value: 1000.0(Roles per account のデフォルト)
# 現在のアカウントに適用されている値の確認
aws service-quotas get-service-quota \
--service-code iam --quota-code L-FE177D64 --region us-east-1
# → Value: 1000.0(引き上げ未実施の場合はデフォルトと同じ)
変更内容一覧
| リソース | 旧最大値 | 新最大値 | デフォルト値(変更なし) |
|---|---|---|---|
| Customer managed policies per account | 5,000 | 10,000 | 1,500 |
| Instance profiles per account | 5,000 | 10,000 | 1,000 |
| Managed policies per role | 20 | 25 | 10 |
| Role trust policy length | 4,096文字 | 8,192文字 | 2,048文字 |
| Roles per account | 5,000 | 10,000 | 1,000 |
| OpenID Connect providers per account | 100 | 700 | 100 |
※ 「旧最大値」「新最大値」は Service Quotas でリクエスト可能な最大値です。
実機検証
実際にクォータの制限に抵触させて、引き上げ後に解除されることを確認しました。
検証環境
- 検証日: 2026-05-11
- IAM はグローバルサービスのため、Service Quotas では US East (N. Virginia) /
us-east-1から確認・申請しました - 検証は、対象クォータがデフォルト値のアカウントで実施しています。すでに引き上げ済みのアカウントでは同じエラーが再現しない場合があります
以下のコマンドで、現在のアカウントに適用されている値がデフォルト値と同じであることを確認しました。
aws service-quotas get-service-quota \
--service-code iam --quota-code L-0DA4ABF3 --region us-east-1 \
--query 'Quota.Value'
# → 10.0(Managed policies per role)
aws service-quotas get-service-quota \
--service-code iam --quota-code L-C07B4B0D --region us-east-1 \
--query 'Quota.Value'
# → 2048.0(Role trust policy length)
Managed policies per role
ここでの managed policies には、customer managed policies だけでなく AWS managed policies も含まれます。
デフォルト(10)で制限が効くことを確認
検証用ロールを作成します。
aws iam create-role --role-name quota-test-role \
--assume-role-policy-document '{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Principal":{"Service":"ec2.amazonaws.com"},"Action":"sts:AssumeRole"}]}'
ダミーポリシー15個の作成とアタッチ(クリックで展開)
ポリシー名は quota-test-policy-01 のようにゼロパディング連番で作成しています。
ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text)
# ダミーポリシー15個作成
for i in $(seq -w 1 15); do
aws iam create-policy \
--policy-name quota-test-policy-${i} \
--policy-document '{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:ListAllMyBuckets",
"Resource": "*"
}
]
}'
done
# 01〜10 をアタッチ
for i in $(seq -w 1 10); do
aws iam attach-role-policy \
--role-name quota-test-role \
--policy-arn arn:aws:iam::${ACCOUNT_ID}:policy/quota-test-policy-${i}
done
10個までは問題なくアタッチできました。11個目をアタッチしてみます。
aws iam attach-role-policy --role-name quota-test-role \
--policy-arn arn:aws:iam::${ACCOUNT_ID}:policy/quota-test-policy-11
An error occurred (LimitExceeded) when calling the AttachRolePolicy operation:
Cannot exceed quota for PoliciesPerRole: 10
期待通り、デフォルトクォータの10で制限されました。
Service Quotas で15に引き上げ
aws service-quotas request-service-quota-increase \
--service-code iam --quota-code L-0DA4ABF3 --desired-value 15 --region us-east-1
今回の検証では、リクエスト後すぐに get-service-quota の値が 15.0 に更新されました。
aws service-quotas get-service-quota \
--service-code iam --quota-code L-0DA4ABF3 --region us-east-1 \
--query 'Quota.Value'
# → 15.0
引き上げ後、15個までアタッチ可能を確認
Service Quotas 上は即座に Value: 15.0 に更新されましたが、IAM 側の実際の制限に反映されるまでにラグがあり、今回の検証では約13分後に反映を確認できました。その後、11〜15個目のアタッチが全て成功しました。
| ステップ | 結果 |
|---|---|
| 10個アタッチ | ✅ 成功 |
| 11個目 | ❌ LimitExceeded: PoliciesPerRole: 10 |
| Service Quotas → 15 | ✅ 値更新を確認 |
| 11〜15個目 | ✅ 成功(今回は約13分後に反映) |
Role trust policy length
デフォルト(2048文字)で成功確認
EC2 サービスプリンシパルと Condition ブロックを組み合わせて、信頼ポリシーの文字数を調整しました。
aws iam create-role \
--role-name trust-policy-length-test \
--assume-role-policy-document file://trust-policy-2048.json
2048文字ちょうどの信頼ポリシーでロール作成に成功しました。
検証では、改行やインデントの影響を避けるため、JSON を minify した状態で文字数を調整しました。create-role / update-assume-role-policy に渡す JSON ファイルも minify 済みの内容にしています。今回の検証ではポリシー内容が全て ASCII 文字のため、文字数とバイト数は一致しています。
# minify 後のサイズ確認例(ASCII 前提で文字数=バイト数)
cat trust-policy.json | python3 -c "import sys,json; print(len(json.dumps(json.load(sys.stdin),separators=(',',':'))))"
2048文字超でエラー確認
aws iam update-assume-role-policy \
--role-name trust-policy-length-test \
--policy-document file://trust-policy-2049.json
An error occurred (LimitExceeded) when calling the UpdateAssumeRolePolicy operation:
Cannot exceed quota for ACLSizePerRole: 2048
エラーメッセージ上は ACLSizePerRole と表示されますが、ここではロールの信頼ポリシー長のクォータに抵触しています。
Service Quotas で2500に引き上げ
新しい最大値は 8,192 ですが、必要最小限の引き上げにするため 2,500 を指定しました。
aws service-quotas request-service-quota-increase \
--service-code iam --quota-code L-C07B4B0D --desired-value 2500 --region us-east-1
今回の検証では、リクエスト後すぐに承認されました。
aws service-quotas get-service-quota \
--service-code iam --quota-code L-C07B4B0D --region us-east-1 \
--query 'Quota.Value'
# → 2500.0
引き上げ後、2300文字のポリシーで成功確認
今回の検証では約5分後に IAM 側に反映されました。
aws iam update-assume-role-policy \
--role-name trust-policy-length-test \
--policy-document file://trust-policy-2300.json
# → 成功
| ステップ | 結果 |
|---|---|
| 2048文字で作成 | ✅ 成功 |
| 2049文字で更新 | ❌ LimitExceeded: ACLSizePerRole: 2048 |
| Service Quotas → 2500 | ✅ 値更新を確認 |
| 2300文字で更新 | ✅ 成功(今回は約5分後に反映) |
反映ラグについて
Service Quotas の値が更新された直後に IAM 操作を試みましたが、いずれも引き上げ前と同じ制限エラーが発生しました。5〜10分後に再確認したところ、Role trust policy length は約5分後、Managed policies per role は約13分後に反映されていました。
| クォータ | 値更新確認から IAM 反映まで |
|---|---|
| Role trust policy length | 約5分 |
| Managed policies per role | 約13分 |
反映時間は環境やタイミングによって変わる可能性があります。また、今回は控えめな値での申請だったため即時承認されましたが、最大値に近い大幅な引き上げを申請した場合は AWS サポートによる確認が入り、承認自体に時間がかかるケースもあり得ます。引き上げ直後に新しい上限を前提とした操作を行う場合は、数分〜十数分程度の待ちが必要になることを想定しておくとよいでしょう。
今回検証しなかった他の4つのリソースについても、Service Quotas で対象クォータを選択して引き上げをリクエストする流れは同様です。
まとめ
今回のアップデートで、IAM の6つのリソースについて Service Quotas でリクエスト可能な最大値が引き上げられました。
上限に抵触し、ワークアラウンド(ロール分割、ポリシー統合など)で対処していた場合は、Service Quotas での引き上げを試す価値があります。今回検証した2つのクォータでは、リクエスト後すぐに承認され、人手の承認待ちは発生しませんでした。
コンソールから申請する場合は、Service Quotas → IAM → 対象クォータ → 「クォータの引き上げをリクエスト」の順に操作します。CLI の場合は request-service-quota-increase を使用します。IAM はグローバルサービスのため、商用リージョンでは US East (N. Virginia) / us-east-1 から申請します。
ただし、クォータ引き上げには以下の注意点があります。
- 引き上げ後は、自分で簡単に元の値へ戻せない(少なくとも通常操作では「引き下げ」はできない)
get-service-quotaの値が更新されても、IAM 側の実際の制限に即座に反映されるとは限らない。引き上げ直後に新しい上限まで使おうとするとエラーになるケースがある- クォータ引き上げを前提とした設計は「管理コストの上昇」につながる
- IaC やアカウントベースラインに「クォータ引き上げ済み」という暗黙の前提が生まれる
- マルチアカウント環境で新規アカウント作成時に同じ引き上げを忘れると動かない
- 「このアカウントだけ動く」問題の原因になる
デフォルト値の範囲内で設計を工夫できないか、まず検討することをおすすめします。引き上げが必要な場合も必要最小限の値にとどめ、Organizations 配下で多数のアカウントを管理している場合はベースライン処理への組み込みも検討してみてください。
Organizations連携でクォータリクエストテンプレートを使う方法
クリーンアップ
検証リソースの削除手順(クリックで展開)
ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text)
# ポリシーのデタッチ
for i in $(seq -w 1 15); do
aws iam detach-role-policy \
--role-name quota-test-role \
--policy-arn arn:aws:iam::${ACCOUNT_ID}:policy/quota-test-policy-${i}
done
# ロール削除
aws iam delete-role --role-name quota-test-role
aws iam delete-role --role-name trust-policy-length-test
# ポリシー削除
for i in $(seq -w 1 15); do
aws iam delete-policy \
--policy-arn arn:aws:iam::${ACCOUNT_ID}:policy/quota-test-policy-${i}
done








