[小ネタ] CloudFormationが自動で生成するIAMロール名は、スタック名や論理IDが長いとどのように切り詰められるのか確かめてみた

[小ネタ] CloudFormationが自動で生成するIAMロール名は、スタック名や論理IDが長いとどのように切り詰められるのか確かめてみた

CloudFormationが自動で生成するIAMロール名は、スタック名や論理IDが長いと切り詰められます。それぞれ何文字が使用されるのかを確認しました。
2026.11.13

こんにちは、林です。

CloudFormationで RoleName を指定せずにIAMロールを作成すると、<スタック名>-<論理ID>-<ランダムな文字列> の名前が自動で生成されます。

スタック名と論理IDが長く、IAMロール名の上限の64文字を超える場合に、名前がどのように生成されるのかを確かめてみました。

先に結論

  • ロール名に使用されるスタック名と論理IDは、合計で50文字まで
  • スタック名と論理IDがどちらも25文字を超える場合は、それぞれ先頭の25文字が使用される
  • IAMポリシーの Resource に role/<スタック名>-* を指定している場合は、スタック名が切り詰められたロールが一致しないため、スタック名を25文字以下にするか、RoleName を指定する

ドキュメントから分かること

自動で生成される名前は、スタック名、論理ID、一意のIDの組み合わせと記載されています。
RoleName の上限は64文字と記載されています。
上限を超える場合に、どの部分が何文字使用されるのかは、ドキュメントから確認できませんでした。

https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/resources-section-structure.html

https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/TemplateReference/aws-resource-iam-role.html

検証方法

東京リージョンで、AWS::IAM::Role を対象に検証しました。

RoleName を指定しないIAMロールを5つ定義したテンプレートを用意しました。

論理ID 文字数
Role 4
OrderWorkerExecutionRole 24
OrderApiTaskExecutionRole 25
OrderBatchJobExecutionRole 26
OrderApiPipelineDeployStageCodeBuildProjectServiceRole 54

このテンプレートから、スタック名の長さが異なる5つのスタックを作成しました。

スタック名 文字数
dev-app-common 14
stg-order-api-batch-base 24
prod-order-api-monitoring 25
prod-order-api-application 26
stg-order-management-api-ecs-service-deploy-pipeline 52

ロール名は describe-stack-resources で確認しました。

aws cloudformation describe-stack-resources --stack-name dev-app-common \
  --query 'StackResources[].[LogicalResourceId,PhysicalResourceId]' --output text

結果

ロール名は、いずれも <スタック名>-<論理ID>-<ランダムな12文字> の形式でした。
ハイフン2つとランダムな12文字で14文字のため、スタック名と論理IDに使用されるのは合計50文字までです。

スタック名と論理IDの文字数 切り詰め
合計が50文字以下 なし
合計が50文字を超え、片方が25文字以下 もう片方を残りの文字数まで
どちらも25文字を超える それぞれ先頭の25文字まで

組み合わせごとの結果です。
切り詰められた側と、切り詰め後の文字数を記載しています。

スタック名 論理ID 4文字 24文字 25文字 26文字 54文字
14文字 - - - - 論理ID 36
24文字 - - - - 論理ID 26
25文字 - - - 論理ID 25 論理ID 25
26文字 - - スタック名 25 両方 25 両方 25
52文字 スタック名 46 スタック名 26 スタック名 25 両方 25 両方 25

切り詰められたロール名の例

スタック名が26文字、論理IDが25文字の組み合わせでは、スタック名の末尾の1文字が切り詰められました。

スタック名: prod-order-api-application
ロール名:   prod-order-api-applicatio-OrderApiTaskExecutionRole-9w02y8Ta3WrL

スタック名の25文字目がハイフンの場合は、ハイフンが2つ連続しました。

スタック名: stg-order-management-api-ecs-service-deploy-pipeline
ロール名:   stg-order-management-api--OrderApiTaskExecutionRole-IfDGwdvtuFnP

IAMポリシーでロールをワイルドカード指定している場合の注意点

特定のスタックが作成したロールに限定して操作を許可するときに、IAMポリシーの Resource にスタック名を前提にしたワイルドカードを指定することがあります。
iam:PassRole を許可する例です。

{
  "Effect": "Allow",
  "Action": "iam:PassRole",
  "Resource": "arn:aws:iam::123456789012:role/prod-order-api-application-*"
}

スタック名が切り詰められたロールは、この Resource に一致しないため、許可の対象になりません。

prod-order-api-applicatio-OrderApiTaskExecutionRole-9w02y8Ta3WrL

スタック名の先頭25文字とワイルドカードで指定すると、今回のすべての組み合わせに一致しました。

arn:aws:iam::123456789012:role/prod-order-api-applicatio*

この指定は、先頭25文字が同じ別のスタックのロールにも一致します。

ロール名を固定する場合は、RoleName を指定します。
RoleName を指定したロールは、置き換えが発生する更新を実行できません。

https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/TemplateReference/aws-properties-name.html

まとめ

CloudFormationが自動で生成するIAMロール名の切り詰められ方を確かめてみました。

  • ロール名に使用されるスタック名と論理IDは、合計で50文字まで
  • スタック名と論理IDがどちらも25文字を超える場合は、それぞれ先頭の25文字が使用される
  • IAMポリシーの Resource に role/<スタック名>-* を指定している場合は、スタック名が切り詰められたロールが一致しないため、スタック名を25文字以下にするか、RoleName を指定する

この記事がどなたかの参考になれば幸いです。最後までご覧いただきありがとうございました!

参考

https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/resources-section-structure.html

https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/TemplateReference/aws-resource-iam-role.html

https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/TemplateReference/aws-properties-name.html

この記事をシェアする

AWSのお困り事はクラスメソッドへ

関連記事